在Java学习中,我们经常会见到static关键字。static关键字在java中指的的是静态的意思,可以修饰成员变量与成员方法。
下面对于static关键字进行总结。
1.static 关键字修饰成员变量
当staic关键字修饰成员变量时,此变量被共享变量,被这个类中的所有对象所共享。
public class MyTest1 {
public static void main(String[] args) {
Person p1 = new Person();
p1.name="张三";
p1.guoji="美国";
Person p2 = new Person();
p2.name="李四";
p2.guoji="英国";
Person p3 = new Person();
p3.name="王五";
p3.guoji="法国";
System.out.println(p1.guoji);//法国
System.out.println("===========");
System.out.println(p2.guoji);//法国
System.out.println("===========");
System.out.println(p3.guoji);//法国
}
}
class Person{
//成员变量
public String name;
//静态变量
public static String guoji;
}
注意:方法区会存储当前类类信息,包含类的静态变量,类的初始化代码(定义静态变量时的赋值语句和静态初始化代码块等)
2.static 关键字修饰成员方法
被static修饰的方法,在方法的内部,只能访问静态成员,不能访问非静态成员
在静态成员方法不能出现this关键字
public class MyTest {
public static void main(String[] args) {
Star star = new Star();
star.eat();
//静态成员的调用推荐使用类名调用
Star.run();
Star.show2();
}
}
class Star{
//静态变量
public static int age=25;
//成员变量
public String name;
public void show(){
System.out.println(this.name);
System.out.println(age);
}
//静态方法中不能访问非静态变量,只能访问静态变量
public static void show2(){
System.out.println(age);
/*静态成员随着类的加载而加载,
优先于对象存在,先存在访问不到后存在的*/
//System.out.println(name);
/*this 代表本类的一个引用(对象)
静态成员随着类的加载而加载,优先于对象存在,先存在访问不到后存在的*/
//System.out.println(this);
}
public void eat(){
System.out.println("吃饭");
this.sleep();
}
public void sleep(){
System.out.println("睡觉");
}
public static void run(){
//静态方法中只能访问静态方法
//this.sleep();
show2();
}
}
总结 |
---|
static:可以修饰成员变量,可以修饰成员方法 |
修饰成员变量,此变量为共享变量,被该类的所有对象所共享 |
被static所修饰的方法,在方法内部只能访问静态成员,不能访问非静态成员 |
在静态方法中不能出现this关键字 |
被静态所修饰的成员,推荐使用类名去调用 |
上面的原因是:
被静态所修饰的成员,随着类的加载而加载,是优先于对象存在的,先存在访问不到后存在的