[TOC]
代码块的种类:静态代码块、构造代码块、普通代码块
静态代码块:
功能:一般完成静态成员变量的初始化。
特点:
1.一般不能使用非静态的变量
2.静态的代码块只会加载一次,执行时机只有创建第一个对象的时候才会被执行,而且仅执行一次
如果不创建对象也不会执行
使用场景:如果想实现对静态成员变量的初始化赋值,可以通过静态代码块实现
构造代码块:
特点:
1.在构造方法之前执行
2.直接定义在类体中的代码块
3.每创建一个对象都会被执行一次
方法代码块:
特点:
1.方法中的代码块
2.只有调用方法的时候才会被执行的代码块
3.代码块中声明的变量外界无法访问</font>
final
特点:
- final修饰的类不可以被继承,但是可以继承其他类
- final修饰的方法不可以被覆盖,但父类中没有被final修饰的方法,子类覆盖后可以加final
- final修饰的变量称为常量,这些变量只能赋值一次
- 修饰引用类型的对象,引用类型的变量值为对象地址值,地址值不能更改,但地址内的对象属性值可以修改。
- 修饰成员变量,需要在创建对象前赋值,否则报错
static
可以修饰任何的成员变量、方法、代码块
特点:
- 随着jvm加载.class文件,看一下字节码中有没有static修饰的内容,如果有则放到方法区中的static区
- 然后在做new对象的事情
- 被static修饰的成员变量属于类,不属于这个类的某个对象
- 被static修饰的成员可以通过类名直接访问
静态方法
格式:
访问修饰符 static 返回值 方法名([参数]){
方法体
}
特点:
- 只要static修饰的方法,也是随着类的加载,分配的方法区内存。
- 类方法:类名.方法() 对比普通方法:1.创建对象 2.对象.方法()
- static修饰的方法不能使用非静态成员变量
- static方法中不能使用this关键字
- 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 接口(){
重写接口方法
}