静态成员
- 类的静态成员经常被称为类成员,因为静态成员与类相关,而不是类的某个实例。非静态的成员变量方法经常被称为实例成员,因为非静态的成员变量和方法只存在类的实例中
- 静态成员变量和方法不能使用引用来访问,因为引用是指类的实例,不需要类的实例来访问静态成员。访问静态成员要使用类名
- 静态方法不能访问实例成员
静态初始化块
静态初始化块是一组当类被JVM的类加载器加载是执行的语句。静态初始化块的作用是允许类执行任何所需的只需要发生一次的设置任务
static{
语句出现在这里 主体}
实例化初始化块
与静态初始化块类似,它在类的对象每次实例化是执行一次。实例化初始化块在构造器调用之前执行
public class Test{
public Test(){构造函数}
{实例初始化块}
}
- 执行顺序:子类中相应的构造器被调用,执行对super的调用,控制流程跳转到相应的父类构造器,父类构造器执行完后跳回子类构造器,在该子类构造器中的super后面的语句执行前,实例化初始化块执行
内部类
内部类可以分为四种:
- 静态内部类:作为某个类的静态成员,存在类的内部
- 成员内部类:作为类的成员,存在于某个类的内部
- 局部内部类:存在于某个方法内部的类
-
匿名内部类:存在于某个类的内部,但是无类名的类
public class Test{ static class Inner{静态内部类} }
静态内部类在未创建外部类的对象的情况下,可以直接创建静态内部类的对象,还可以引用外部类的静态成员变量和静态方法,但是不能引用外部类的普通成员
public class Test{
class Outer{
class Inner{成员内部内}
}
}
成员内部类可以调用外部类的所有成员。但是只能是创建了外部类的对象后,才能引用外部的成员
public class Test{
public void f(){
class Inner{成员内部内}
}
}
}
局部内部类中要使用它所在方法中的局部变量,就需要将这个局部变量定义为final
new类或者接口的名字(){
匿名内部类的主体
}
匿名内部类是一种特殊的内部类,它没有名字。匿名内部类的定义与对象的创建合并在一起。
匿名内部类是为唯一对象而定义的类,当我们只需要创建一个类的对象,而且用不上它的名字时,就可以用匿名内部类