上节static静态修饰变量总结
- static修饰三个内容:成员变量,方法,代码块
- 静态变量不属于对象而是属于类的,被类所有的对象所共享。
- 静态变量使用的时候,推荐使用【类名.变量名】进行调用。
假如我有一个学生类:
public class Student {
String name;//成员变量属于对象
static String sex;//静态成员变量属于类
}
现在我在测试类中调用这个类的静态变量。推荐使用【类名.变量名】进行调用:
public class Text01 {
public static void main(String[] args) {
Student.sex="女";
}
}
- static变量和非static变量的区别:
1.份数不同,静态变量只有1分,非静态变量一个对象一份
2.存储位置不同,静态变量在方法区,非静态变量在堆中。
3.内存分配空间的时间不同,静态变量是第一次加载的时候,非静态变量是创建对象的时候。
4.生命周期不同,静态变量和类的生命周期相同,非静态变量的生命周期和所属对象相同。
5.调用方法不同,静态变量:通过类名调用,也能通过对象名调用但是不推荐。非静态变量:通过对象名调用。
static静态修饰方法
- 被static修饰的方法叫静态方法
- 静态方法调用:类名.静态方法名
- 静态方法有三个不可以:
1.静态方法中不能直接使用非静态成员变量。
2.静态方法中不能直接使用普通方法。
3.静态方法中不能用this
原因:加载类的时候先加载的是静态变量和方法,此时还没有创建对象,所有非静态的变量和方法都没有被分配空间,无法调用。 - 静态方法两可以:
1.静态方法中可以访问静态变量
2.静态方法中可以访问静态方法。 - 非静态方法也就是普通方法。
1.普通方法可以使用静态变量和静态方法还有this关键字。
原因:加载类的时候先加载的是静态的变量和方法,所以创建对象后,普通方法和变量从分配空间,此时静态的已经存在了,可以直接用。
下面是我的一个学生类:
public class Student {
/*静态方法,属于类*/
public static void bbb(){
System.out.println(sex);
// 静态方法中不能直接使用非静态成员变量以及普通方法。
System.out.println(name);(报错)
// 静态方法中不能用this
System.out.println(this.name);(报错)
}
// 普通方法,属于对象
public void aaa(){
//普通方法里可以用静态变量和方法以及this关键字
System.out.println(sex);
bbb();
}
}
我在测试中调用静态方法:类名.静态方法名
public class Text01 {
public static void main(String[] args) {
// 普通方法的调用,创建对象进行调用
Student stu=new Student();
stu.aaa();
// 静态方法调用:静态方法跟静态变量一样,也是属于类的而不是属于对象
Student.bbb();
}
}