public class StaticTest {
public static void main(String[] args) {
String country = A.country;//静态成员可以通过类名访问
A.study();//静态方法可以直接通过类名访问 比对象优先加载进内存
A a = new A();
String name = a.name; //非静态资源只能通过对象去访问
a.eat();//非静态方法通过对象访问
a.study();//静态资源也可以通过对象去访问但是不提倡
String country1 = a.country;//静态资源也可以通过对象去访问但是不提倡
a.country="王权富贵"; //使用对象a修改静态资源country的值
A a1 = new A();
System.out.println(a1.country); //使用对象a1查看静态成员变量的值是否发生变化 输出结果为王权富贵 发生了改变
}
}
class A extends StaticTest{
//普通资源 普通资源可以随时调用
String name; //普通成员变量
public void eat(){
System.out.println("普通成员变量"+name);
System.out.println("静态成员变量"+country);//普通方法调用静态成员变量
}
//静态资源 静态资源又叫做类资源 随着类加载而加载
static String country; //静态成员变量
public static void study(){
System.out.println("静态成员变量"+country);//静态方法调用静态成员变量
// System.out.println("普通成员变量"+name); 直接调用非静态成员变量的话是不被语法认的
//eat(); 静态方法调用非静态方法也是不可行的
}
}
总结:被static(静态)修饰符所修饰的资源叫做静态资源,又叫类资源,即随着类的加载而加载!
static的特点:
1,随着类的加载而加载,因此static的资源优先于对象加载进内存;
2,static资源是在多个对象中共享的;
3,static资源可以通过类名直接调用,也可以通过对象调用(不推荐)
4,static资源只加载一次就会一直存在,除非类在内存中被销毁;
补充:
static {
System.out.println("静态代码块");
}
public A(){
{
System.out.println("构造代码块");
}
System.out.println("构造方法");
}
执行顺序:静态代码块>构造代码块>构造方法(其中构造代码块和构造方法是同级的,执行看代码的先后顺序)
你学废了吗?