加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

深入理解static关键字

发布时间:2020-12-15 07:51:02 所属栏目:Java 来源:网络整理
导读:1 class A{ 2 public int i = 10 ; 3 public void show(){ 4 System.out.printf("%d" ,i); 5 } 6 } 7 8 class M{ 9 public static void main(String[] args){ 10 A a1 = new A(); 11 A a2 = new A(); 12 13 a1.i = 20 ; 14 a2.show(); // 此时输出10 15 } 16
 1 class A{
 2     public int i = 10;
 3     public void show(){
 4         System.out.printf("%d",i);
 5     }
 6 }
 7 
 8 class M{
 9     public static void main(String[] args){
10         A a1 = new A();
11         A a2 = new A();
12         
13         a1.i = 20;
14         a2.show();//此时输出10
15     }
16 }

?

 1  /*
 2      本程序证明了:A类的多个对象共用一个static属性i
 3  */
 4  class A{
 5     public static i = 10; //加上static修饰符
 6     public void show(){
 7         System.out.printf("%d",i);
 8     }
 9 }
10 
11 class M{
12     public static void main(String[] args){
13         A a1 = new A();
14         A a2 = new A();
15         A a3 = new A();
16         
17         a1.i = 20;
18         a2.show();//此时输出20
19         System.out.printf("%d",a3.i);//也输出20
20     }
21 }

?

结论:

如果给一个属性加上static,那么这个属性不再属于某一个对象了,而是属于N个对象,共用同一个static属性。

static修饰的方法和成员,在类加载的时候,一起加载进虚拟机。优先于对象的创建。static属性在一个单独的内存区,而不是在new出的对象内存中。所以下面的代码范例,可以直接由类名调用,不需要类对象名

?

?

?

 1  /*
 2      本程序证明了:static属性i是属于类本身的,或者讲:没有对象,我们仍然
 3      可以通过类名的方式访问类内部的static属性。static方法同理
 4  */
 5  class A{
 6      //给属性和方法加上static修饰符
 7     public static i = 10; 
 8     public static void f(){
 9         System.out.printf("20");
10     }
11 }
12 
13 class M{
14     public static void main(String[] args){
15     System.out.printf("%d",A.i);//输出10
16     A.f();//输出20
17     }
18 }

?

  显然,static属性和方法虽然属于类本身,可以通过类名的方式访问,但是也属于类对象,也可以通过类对象名的方式访问,

static只是表明了该成员具有了可以通过类名访问的潜在特征,但是是否可以通过类名访问,还必须满足一个条件:该成员必须是非private的

?

重点:

非静态方法可以访问静态成员(包括属性和方法)

非静态方法的创建在类对象和static成员的创建之后!

所以静态方法不可以访问非静态成员,因为静态成员可以直接由类名访问,非静态成员必须要有类对象名才能访问。

有静态方法的时候不一定创建了非静态方法,但是有非静态方法的时候一定能创建了静态方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读