1.问题:

         当在定义类的时候,类中都会有相应的属性和方法。而属性和方法都是通过创建本类对象调用的。当在调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余。可是不创建对象,方法又调用不了,这时就会想,那么我们能不能不创建对象,就可以调用方法呢?

答:可以的,可以通过static关键字来实现。static它是静态修饰符,一般用来修饰类中的成员。

2.static特点:

        被static修饰的成员变量属于类,不属于这个类的某个对象。

public class A1 { //定义一个静态变量 public static int n = 1000;
} class B1{ //程序入口 public static void main(String[] args) { //创建类A1的对象a1,a2 A1 a1 = new A1(); A1 a2 = new A1(); //改变静态变量的值 a1.n=20;
        System.out.println(a1.n);//结果为20 System.out.println(a2.n);//结果为20 /*
        static关键字修饰的成员变量,就是一个共享的资源
        当对象在访问这个资源的时候,如果这个对象修改了这个共享成员变量,
        那么其它对象访问这个共享资源时,这个共享资源值也已经改变
        可以理解为公共资源
         */ }
}

        被static修饰的成员,通过类名点静态变量或则方法名直接访问。

类名.静态成员变量名

类名.静态成员方法名(参数)

public class A1 { //定义一个静态变量 public static int n = 1000; public static void print(){
        System.out.println("helloword");
    } //程序入口 public static void main(String[] args) { int number=A1.n;//类名.静态成员变量名 A1.print();//类名.静态方法名 }
}

3.需要注意是问题

静态的成员,随着类的加载而加载,优先于对象存在

不能使用this/super访问静态成员

同一个类中,静态成员只能访问静态成员

public class A1 { //成员变量 public int x = 100; //静态变量 public static double y=232.23; //静态方法 public static void method(){ //this.y   不能使用this/super访问静态成员。 System.out.println(this.y);//会报错 //同一个类中,静态成员只能访问静态成员 System.out.println(x);//会报错 System.out.println(y);
    }
}