static函数只能访问被static修饰的变量和函数 static 代码块里面不能使用 this,这跟创建对象加载代码的顺序有关。 this指的是当前对象,而static方法加载的时候这个对象还没有创建完全。 当然不存在this(当前对象).Static方法是类方法,先于任何的实例(对象) 存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在 内存中生成。而this指代的是当前的对象 private static String name;
public static void main(String[] args) { //System.out.println(this.name);//ERROR } } 特点:
随着类的加载而加载 优先于对象存在 被所有对象所共享 可以直接被类名调用 方法的调用: 1.对象调用: 对象.方法(实参); 2.类调用 这个方法所在的类的名字.方法(实参); //前提: 这个被调用的方法必须使用 static修饰 在JVM内存区中有一块存储区域: 静态区域,专门存储类成员 class Person { //static Person(){}//StaticDemo.java:27: 错误: 此处不允许使用修饰符static
String name=0; int age=0;
static int num = 100;//人类总数 } class StaticDemo
{ public static void main(String[] args) { System.out.println("通过类名来调用类成员= " + Person.num); // System.out.println("通过类名来调用实例成员= " + Person.age); System.out.println("通过对象来调用实例成员= " + new Person().age); System.out.println("通过对象来调用类成员= " + new Person().num); Person p1 = new Person();
p1.num = 95; System.out.println("p1.num= " + p1.num);//95 p1.age = 85; System.out.println("p1.age= " + p1.age);//85 Person p2 = new Person(); System.out.println("p2.num= " + p2.num); //95因为使用static修饰,为单独开辟的一块区域,相当于大家共享的变量; System.out.println("p2.age= " + p1.age);//0,为默认值指,因为age是P1,P2独自的
//对方法或字段只进行一次调用时; //new Person();表示匿名对象,没有名字的对象 new Person().age = 17;//使用一次之后就被销毁了
System.out.println(new Person().age);//0 //== 判断对象时候是同一个对象,其实比较的是 堆里面的地址
System.out.println("p1 == p1" +(p1 == p1));//true System.out.println("new Preson() == new Person()" + (new Person() == new Person()));//false }
} |
|