袁艺

个人站

欢迎来到我的个人站~


代码块、static、匿名对象、内部类

[TOC]

代码块的种类:静态代码块、构造代码块、普通代码块


执行顺序:静态代码块---》构造代码块---》构造方法-----》普通方法-----》普通代码块


静态代码块:

   功能:一般完成静态成员变量的初始化。
   特点:

1.一般不能使用非静态的变量
2.静态的代码块只会加载一次,执行时机只有创建第一个对象的时候才会被执行,而且仅执行一次
       如果不创建对象也不会执行
   使用场景:如果想实现对静态成员变量的初始化赋值,可以通过静态代码块实现

构造代码块:

   特点:

1.在构造方法之前执行
2.直接定义在类体中的代码块
3.每创建一个对象都会被执行一次


方法代码块:

   特点:

1.方法中的代码块

2.只有调用方法的时候才会被执行的代码块
      

3.代码块中声明的变量外界无法访问</font>

final

特点:

  • final修饰的类不可以被继承,但是可以继承其他类
  • final修饰的方法不可以被覆盖,但父类中没有被final修饰的方法,子类覆盖后可以加final
  • final修饰的变量称为常量,这些变量只能赋值一次
  • 修饰引用类型的对象,引用类型的变量值为对象地址值,地址值不能更改,但地址内的对象属性值可以修改。
  • 修饰成员变量,需要在创建对象前赋值,否则报错

static

可以修饰任何的成员变量、方法、代码块

特点:

  1. 随着jvm加载.class文件,看一下字节码中有没有static修饰的内容,如果有则放到方法区中的static区
  2. 然后在做new对象的事情
  3. 被static修饰的成员变量属于类,不属于这个类的某个对象
  4. 被static修饰的成员可以通过类名直接访问

静态方法

   格式:

      访问修饰符 static 返回值 方法名[参数]{
       方法体
      }

   特点:

  1. 只要static修饰的方法,也是随着类的加载,分配的方法区内存。
  2. 类方法:类名.方法() 对比普通方法:1.创建对象  2.对象.方法()
  3. static修饰的方法不能使用非静态成员变量
  4. static方法中不能使用this关键字
  5. static方法可以引用静态的成员变量

使用场景:在项目中会反复用到某个功能—–>做成工具类—->使用方便 类名.方法()

静态属性:

   static 数据类型 属性名;
   静态属性使用时要用—>类名.属性名,静态方法和非静态方法中都能引用

静态代码块:

 static{
    语句;
   }

   功能:一般负责完成静态成员变量的初始化
   特点:

1.不能使用非静态的变量
2.静态代码块只会加载一次,执行时机只有创建第一个对象的时候才会被执行,且仅执行一次
使用场景:如果想实现对静态成员变量初始化赋值,可以通过静态代码块实现

匿名对象

概念:是指在创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。如:new Person()

特点:

  • 创建匿名对象直接使用,没有变量名
  • 匿名对象在没有指定其引用变量时,只能使用一次
  • 匿名对象可以作为方法接受的参数、方法的返回值使用

内部类

成员内部类:


  定义在类中的类,称为内部类

public class Outer{

    成员变量

   String name;

    成员方法

    public void show(){

 }

  成员内部类 

   public class Inner{

   }

}


访问方式:外部类名.内部类名 变量名 = new 外部类名().new 内部类名();

内部类的作用:
    1.外部类需要某些功能通过内部类实现
    2.弥补单继承的缺点
    3.私有的成员变量,内部类可以访问

  内部类:
  访问修饰符:
  1.访问修饰符可以使用public private  protected  默认
  2.内部类属性:this.属性    外部类: 外部类.this.属性
  3.内部类在外部类中直接创建对象
   


public void useInner()

  {
       Inner in=new Inner();
        in.x=100;
        in.y=200;
        in.test();
  }

内部类也可以在外部类外部创建对象:
    步骤:
       1.外部类对象   out.name   out.show()   
       2.out.new Inner();—->返回一个Inner类型的对象
         Outer.Inner in=out.new Inner();


局部内部类:

   
  定义在方法中内部类,叫局部内部类。
  类似:局部变量

class 外部类 { 
	修饰符 返回值类型 方法名(参数) {
class 内部类 {
//其他代码
}
}
}
匿名内部类:

  是开发更加灵活。


   new 接口(){
     重写接口方法
   }