static,匿名对象

特点:

  随着类的加载而加载

  优先于对象存在

  被所有对象所共享

  可以直接被类名调用

使用注意:

      静态方法只能访问静态成员 但是非静态成员可以访问静态成员;

  静态方法中不可以使用this,super关键字

  主方法(main)是静态的 public static void main(String[] agrs){}

 

 方法的调用:
 1 /*
 2         特点:
 3             随着类的加载而加载
 4             优先于对象存在
 5             被所有对象所共享
 6             可以直接被类名调用
 7 
 8             方法的调用:
 9                 1.对象调用:  对象.方法(实参);
10                                 
11                 2.类调用     这个方法所在的类的名字.方法(实参);
12                             //前提:  这个被调用的方法必须使用 static修饰
13 
14             static in num = 100;//表示人类的总数
15         
16 
17             在JVM内存区中有一块存储区域:  静态区域,专门存储类成员
18 
19         */
20 
21 
22 //描述人类
23 class Person
24 {
25     
26 
27     //static Person(){}//StaticDemo.java:27: 错误: 此处不允许使用修饰符static
28     /*
29         没有使用static修饰的方法或字段,属于对象  -- >  实例成员
30         
31                 
32         使用static修饰的方法或字段,属于类         --->  类成员
33 
34 
35         调用:
36                 若是实例成员:只能通过对象来调用;
37                 若是类成员: 可以使用类名调用; 也可以使用对象来调用;
38                             建议使用:类名来调用;        其实在底层,对象调用类成员,也会转换类名调用
39 
40 
41 
42 
43                 static方法,主要用在做工具类的方法的时候(工具方法)
44     */
45     String name;
46 
47     int age;
48 
49     
50     static int num = 100;//人类总数
51 }
52 
53 class StaticDemo 
54 {
55     public static void main(String[] args) 
56     {
57         System.out.println("通过类名来调用类成员= " + Person.num);
58         //System.out.println("通过类名来调用实例成员= " + Person.age);
59         System.out.println("通过对象来调用实例成员= " + new Person().age);
60         System.out.println("通过对象来调用类成员= " + new Person().num);
61 
62 
63         //故意使用对象来调用类成员
64 
65         Person p1  = new Person();
66 
67         //p1去修改人类总数
68         p1.num = 95;
69         
70         System.out.println("p1.num= " + p1.num);//95
71         Person p2 = new Person();
72 
73         System.out.println("p2.num= " + p2.num);//95 //因为staric是被所有对象所共享
74 
75         
76         //对方法或字段只进行一次调用时;
77         //new Person();表示匿名对象,没有名字的对象
78 
79         new Person().age = 17;//使用一次之后就被销毁了
80         System.out.println(new Person().age);//0
81         
82         
83 
84         //==  判断对象时候是同一个对象,其实比较的是  堆里面的地址
85         System.out.println("p1 == p1" +(p1 == p1));//true
86         System.out.println("new Preson() == new Person()" + (new Person() == new Person()));//false
87 
88     }
89 }

 

 

访问字段和方法:

  • 类和实例访问字段和方法的语法:
    • 访问类成员: 类.字段 类.方法
    • 访问实例成员: 实例.字段 实例.方法

static 修饰的字段和方法,既可以通过类调用,也可以使用实例调用;

没static 修饰的字段和方法,只能使用实例来调用

 

匿名独享:

  

特点:

  对方法或字段只进行一次调用时;

    new Car().show();

    new Car().run();

  可作为实际参数进行传递;

    public void show(Car c){ }

    new Car().show(new Car());

  只在堆内存中开辟空间,而没有在栈内存的引用。  

如果只调用一次:匿名对象

如果要调用多次:实例

posted @ 2016-11-23 10:36  chenxiaoq  阅读(227)  评论(0编辑  收藏  举报