1、被static修饰的成员变量属于类,不属于某个对象(也就是说:多个对象访问或修改static修饰的成员变量时,其中一个对象将static成员变量进行了修改,其它的对象的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
public class Person {
String name;
static String className;
}
测试类
2、被static修饰的成员,可以通过类名直接访问
public class Test {
public static void main(String[] args) {
System.out.println("===========这里是测试类========");
Person p1 = new Person();
Person p2 = new Person();
p1.name="张三";
p2.name="李四";
System.out.println(p1.name);
System.out.println(p2.name);
p1.className="基础班";
System.out.println(p1.className);//结果为:基础班(对象的共享数据,静态修饰)
System.out.println(p2.className);//结果为:基础班(对象的共享数据,静态修饰)
System.out.println(Person.className);//结果为:基础班(可以是类名直接调用,也可以new后调用)
}
}
3、在静态上下文中,不能访问非静态的内容,不能使用this/super
public class Student {
String name;
int age;
public static void fn(){
System.out.println(name+age); //这里不能调用非静态中的变量,会报错
}
}
4、在非静态中,可以访问静态中的变量
public class Student {
static String name;
static int age;
public static void fn(){
System.out.println(name+age);
}
public void meth(){
System.out.println(name+age);//非静态可以访问静态内容
}
}
5、static静态的使用场景
Demo.java
public class Demo {
public static void main(String[] args) {
/*
* 在多态调用中,编译看=左边父类,父类有编译成功,父没有编译失败
* 运行: 静态方法,运行父类中的静态方法
* 运行: 非静态方法,运行子类的重写方法
* 成员变量,编译运行全是父类
* */
Parent p = new Child();
System.out.println(p.i);//输出的是父类i=1;
p.show();//输出的是父类方法;
}
}
Parent.java
public class Parent {
static int i=1;
public static void show(){
System.out.println("父类中的show方法");
}
}
Child.java
public class Child extends Parent {
static int i=2;
public static void show(){
System.out.println("子类中的show方法");
}
}