- 静态内部类的定义以及使用
定义:按照是否有static修饰分为静态内部类和非静态内部类,有static修饰的为静态内部类,没有static修饰的为非静态内部类。
使用:
静态有名内部类
①跨类使用:
跨类使用时需要以”外部类名.内部类名“的方式说明该静态有名内部类的来源
②本类使用:
本类使用时只需要普通的创建对象方式即可,不需要使用外部类类名
静态匿名内部类
注意:静态内部类只能直接定义在外部类中
public class Father{
static class Daughter{ //直接在外部类中定义静态内部类
public void eat{
}
}
public static void main(String[] args) {
static class Son{ //在main方法中定义静态内部类
public void eat{
}
}
}
}
执行这段代码后我们发现直接定义的方式可执行,而非直接的方式报错,提示我们这种定义方式非法。
- 非静态内部类的使用
①直接在类中定义的非晶态内部类,创建对象时必须先创建外部类对象
public class Father{
class Son{ //直接在外部类中定义非静态内部类
}
public void eat(){
Son son =this.new Son(); //默认使用this创建外部对象,this可以省略
}
}
②直接在类中定义的非晶态内部类,在静态方法中创建对象,必须“显式”创建外部类对象
public class Father{
class Son{ //直接在外部类中定义内部类
}
public static void eat(){ //静态方法
Son son =new Father().new Son(); //必须用new 外部类名()形式
//显式创建外部类对象
}
}
- 注意事项
局部变量不能用static修饰
这是因为在我们运行java程序时,编译器的运行顺序为执行“一次”java命令——>类加载一次——>静态的成员(成员变量、代码块、方法)只被操作操作一次。
static修饰的属性会在类加载的时候就加载好,但此时方法还没有得到调用,那么这个方法里的局部变量被加载是没有意义的。