分享

static关键字

 无语悲剧 2012-12-20

static函数只能访问被static修饰的变量和函数

static 代码块里面不能使用 this,这跟创建对象加载代码的顺序有关。

this指的是当前对象,而static方法加载的时候这个对象还没有创建完全。

当然不存在this(当前对象).Static方法是类方法,先于任何的实例(对象)

存在。即Static方法在类加载时就已经存在了,但是对象是在创建时才在

内存中生成。而this指代的是当前的对象
class ThisDemo

 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
 }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约