Static关键字的特点什么?
static 修饰的变量或者方法:
a:随着类的加载而加载
b:优先于对象存在
c:被类的所有对象共享
举例:比如我们班的学生应该用同一个班级名称
这个特点也是在告诉我们什么时候使用静态
如果某个成员变量是被所有对象共享的,那么它就应该定义为静态
举例:饮水机 静态 水杯 非静态
(共性用静态,特性用非静态)
d:可以通过类名调用
但其实它本身也可以通过对象名调用(推荐使用类名调用)
而静态修饰的内容我们一般都称其为:与类相关的或者类成员
代码演示:
public class Demo1 {
int num1=10; //非静态成员变量
static int num2=20;//静态成员变量
//非静态的成员方法既可以访问静态成员,也可以访问非静态成员
public void print(){ //非静态的成员方法
System.out.println(num1); //10
System.out.println(num2); //20
}
//静态成员方法不能访问非静态成员
public static void print1(){ //非静态的成员方法
//System.out.println(num1); //10
System.out.println(num2); //20
}
}
Static关键字的注意事项是什么?
1.如何理解在静态方法中是没有this关键字的呢?
因为静态是随着类的加载而加载的,而this是随着对象的创建而存在的,并且静态比对象先存在内存中。
2.为什么静态方法只能访问静态的成员变量和静态的成员方法呢?
因为静态的成员方法只能访问静态变量和静态成员方法,而非静态方法不但可以访问静态变量和静态成员方法,而且也可以访问非静态变量和非静态成员方法。
简单的来说静态只能访问静态,非静态可以访问静态,关键是要搞清楚谁先进入内存的问题
代码演示:
public class Demo {
static int num=10;
public static void main(String[] args) {
Demo d=new Demo();
d.getMsg();
System.out.println(d);
Demo.show();
}
public static void show(){
System.out.println("show方法");
}
public static void show2(){
// this.show(); show2是静态方法
// 随着Demo02加载 而加载到内存 此时还没有创建对象
//this是指对象的引用 那么这里不能有this
}
public void display(){
System.out.println("display方法"+num);
}
public void getMsg(){//非静态方法
System.out.println("getMsg方法");
this.display();//非静态的方法调用非静态的方法
System.out.println("this的值"+this);
}
}