一、static关键字
- static(静态) : 与类一起加载
- 加了static修饰符的方法和属性叫类方法(静态方法)、类属性(静态属性)
- 未加static修饰符的方法和属性叫对象方法(非静态方法、实例方法)、对象属性(非静态属性、实例属性)
- static(类)属性 和 非static(对象、实例)属性的区别
- 份数不同—— static属性:1份;非static属性:1个对象1份
- 储存位置不同——static属性:方法区(元空间);非static属性:堆内存中
- 内存分配空间的时间不同——static属性:第一次加载类的时候;非static属性:创建对象的时候
- 生命周期不同——static属性:和类的生命周期相同;非static属性:和所属对象相同
- 调用方法不同——static属性:通过类名调用(
对象名调用<不推荐>
);非static属性:通过对象名调用
示例:
//static : (静态)与类一起加载
public class Student {
//属性-变量
private static int age;//年龄(静态变量-类变量)
private double score;//成绩(非静态变量-对象变量)
//方法
public static void go() {
}
public void run() {
}
// main()方法
public static void main(String[] args) {
Student s = new Student();
//属性-变量
System.out.println(s.age);//对象 调用 类变量
System.out.println(Student.age);//类 调用 类变量
System.out.println(s.score);//对象 调用 对象变量
//System.out.println(Student.score);//报错,类 不能直接调用 对象变量,调用对象变量需要new一个对象
//方法
s.run();//对象 调用 对象方法
s.go();//对象 调用 类法法
//Student.run();//报错,类 不能直接加载 对象方法,调用对象方法需要new一个对象
Student.go();//类 调用 类方法
/*
小结:
1.静态是跟着类一直存在的,非静态需要创建对象(new)后才能用
2.非静态方法 可以嵌套 非静态方法和静态方法,因为非静态方法需要new之后才加载的
3.静态方法 可以嵌套 静态方法,但不能嵌套非静态方法,
因为静态方法是跟类一起加载的,而非静态方法是需要new之后才有的
4.未加载方法里面可以放已加载方法和未加载方法
已加载方法里面可以放已加载方法但不能放未加载方法
*/
}
}