• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wchenfeng

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

类的静态成员

当类的一个成员变量或者成员方法被声明为静态时,这个类的所有对象将共用这个成员变量或成员方法。

意味着无论这个类上生成多少个对象,静态成员变量都是只有一份;

一旦静态成员变量的值改变,则所有对象都会受到影响。

class a{
    int x,y;
    static int z;
}
public class sentence{
    public static void main(String[] args)
    {
        a a1=new a(),a2=new a();
        a.z=10;
        a1.x=1;
        a1.z=2;
        a2.x=11;
        a2.z=12;
        System.out.println("a1.x="+a1.x);
        System.out.println("a2.x="+a2.x);
        System.out.println("a1.z="+a1.z);
        System.out.println("a2.z="+a2.z);
        System.out.println("a.z="+a.z);
    }
}

 当执行语句

 a.z=10;

共享静态属性z的值为10;

当执行语句

a1.x=1;

对象a1中的x成员变量值为1;

当执行语句

 a1.z=2;

共享静态属性z的值为2;

当执行语句

a2.x=11;

对象a2中的x成员变量值为11;

当执行语句

 a2.z=12;

共享静态属性z的值为12;

静态方法不能直接访问类的其他成员,除非这些成员也被声明为static,即静态方法不能直接处理非静态的成员,非静态成员只能通过对象来访问,这意味着在访问非静态成员前必须先创建一个对象,创建对象后,可以通过对象去访问静态和非静态成员。

class a{
    int x,y;
    static int z;
}
public class sentence{
    public static void main(String[] args)
    {
        a a1=new a(),a2=new a();
        a.z=10;
        System.out.println("a.z="+a.z);
        System.out.println("a1.y="+a1.y);
        System.out.println("a1.z="+a1.z);
    }
}

运行结果

a.z=10
a1.y=0
a1.z=10

而以下代码无法运行 

class a{
    int x,y;
    static int z;
}
public class sentence{
    public static void main(String[] args)
    {
        a a1=new a(),a2=new a();
        a1.y=10;
        System.out.println("a.y="+a.y);
    }
}

原因:无法从静态上下文中引用非静态 变量 y。

posted on 2022-04-12 20:02  王陈锋  阅读(17)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3