目录
static
static静态(对象共享)的意思,修饰成员方法和成员变量(类方法和类变量)
修饰成员变量时表示这个成员变量被所有的对象共享,改一个对象的此变量会同时改变其他对象的该变量
静态内容会在方法区单独存入静态区,并为静态内容初始化。类的对象中不再保存静态内容,而会存放一个静态标记,通过静态标记找到静态区的内容,节省了内存空间。
可以直接通过类名.的方式进行访问修改(建议),用对象调用时底层JVM自己转换为类名调用
因为静态内容优先初始化,所有非静态成员方法可以访问所有的静态和非静态成员变量和方法。而静态成员方法只能访问静态的成员变量和静态的成员方法。且静态方法中不能使用this关键字
静态代码块:使用{}括起来的叫代码块,用static修饰的称为静态代码块,即格式为static{方法体}。静态代码块仍然属于静态内容,无法使用非静态内容,用于静态成员变量的赋值并初始化项目。静态代码块随着字节码文件的加载而加载,在创建对象的时候会调用,且优先于构造方法执行,但只在创建第一个对象的时候调用。在调用类中的静态内容时也会执行静态代码块。
内部类
一个事物中包含了另外一个或多个事物
目的:将内部类隐藏起来而不想让外界直接看到,提高安全性
内部类格式:
public class 类名{
修饰符 class 类名{
}
}
内部类可以直接调用外部类的成员(包括私有),外部类想用内部类的成员必须创建对象
内部类分为成员内部类和局部内部类
成员内部类可以用public,private,protected以及static修饰。外界想使用成员内部类(修饰符为public的情况):格式:外部类名.内部类名 对象名=外部类对象名.new 内部类名(实参..);其中的外部类对象名可以改为new 外部类名称(实参...) 使用内部类的成员方法:内部类对象名.方法名
内部类可以访问外部类的成员变量(包括私有)
(修饰符为private的情况):需要在外部类创建一个方法,方法中创建内部类的对象,并调用方法
(修饰符为static的情况):new 外部类名.内部类名(实参..)的方式创建
局部内部类是在方法里面定义类,此时不需要修饰符,直接class+类名,使用时需要在方法内,局部类之外创建局部类的对象调用局部类的方法
匿名内部类
可以省去写一个实现类,直接通过接口来调用接口方法
创建接口实现类对象的/父类的子类对象的快捷方式
格式:new 类名或接口名(){
重写方法;
};最后有一个分号
是局部内部类的一个特殊形式~
本质上是一个对象,这个对象继承了类或实现了接口
想要调用重写的方法,需要在{}之后加个.方法,这样可以匿名内部类中的调特有方法