一、静态类和非静态的定义
1、非静态
一、有名类
class Eat{//不可以直接在main方法中使用 必须创建对象
void sleep() {
}
}
二、匿名类
Example example =new Example() {
};
2、静态
一、有名类
static class Eat1 {//可以在main的静态方法中调用
void sleep1(){
System.out.println("");
}
}
二、匿名类
static Example example1 =new Example() {//静态匿名内部类的使用
};
3、总结
有名类中把static加到class前,匿名类的把static 加到表达式前面
二、静态类中需要注意:
1、通过类名调用对象
public class Test {
public static class Eat {
void speak() {
System.out.println("");
}
}
public static void main(String[] args) {
Eat eat =new Test.Eat();
}
}
此处的 Test.Eat();就是通过类名调用对象
2、静态类只能直接定义在外部类里面:
非静态内部类的定义可以定义在内部类的方法、代码块中,而静态内部类只能在外部类的外部(即成员变量的位置)
3、静态内部类仅能直接访问外部类的静态成员变量和方法,可以通过创建外部类的对象间接使用非静态的成员变量和方法。
正如静态方法中可以直接调用静态方法,而只能通过对象来调用非静态方法和属性一样,此类型一致:
静态方法和属性的内存分配和赋值从类运行的,所以一旦在静态的方法中使用非静态的成员变量(不经过创建对象),这时非静态变量【创建对象时执行】的执行不会分配空间,所以报错;
4、在静态类中可以定义静态属性,在非静态的类中不可以定义静态属性//静态方法中也不可定义静态属性(局部区域)
public static class Eat {//正确
static int age;
}