A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class person
{
         String  name;//实例变量
        static String country="cn";//类变量
        public static void show()
        {
                System.out.println(name+"     "+country);
        }


}
class personDemo5
{

        public static void  main(String args[])
        {
                //person p=new person();
                //p.name="zhangsan";
                //p.show();
                System.out.println(person.country);//先于对象存在,随着类的加载而存在
                person.show();                                   //可以直接用类名来调用  被所以对象所共享 存在于方法区中

        }
}

5 个回复

倒序浏览
所谓的静态变量优先于对象存在,是说当你的类被加载到内存中时,被static修饰的变量也会随着类的加载而加载到内存中,而这个类的对象此时并没有出现,只有当你申明并实例化这个类的变量时,才会在内存中开辟空间存放该类的对象,所以当类加载后,可以直接调用类名.变量名直接调用,因为其在内存中已经存在,而对象暂时还没有。
所以你写的代码有两个个问题。
1.就是Person类中show函数是静态的,随类加载而加载,此时并没有该类对象,所以你是无法调用类中非静态成员name的。
2.主函数中直接用类名调用没有问题的,但是对非静态变量的调用会导致编译失败。

  1. class person
  2. {
  3.                 /**
  4.                  * static方法只能调用静态变量,所以name必须要被static所修饰
  5.                  */
  6.         static String  name;//实例变量
  7.         static String country="cn";//类变量
  8.         public static void show()
  9.         {
  10.              System.out.println(name+"     "+country);
  11.         }


  12. }
  13. class personDemo5
  14. {

  15.         public static void  main(String args[])
  16.         {
  17.                 //person p=new person();
  18.                 //p.name="zhangsan";
  19.                 //p.show();
  20.                 System.out.println(person.country);//先于对象存在,随着类的加载而存在
  21.                 person.show();                                   //可以直接用类名来调用  被所以对象所共享 存在于方法区中

  22.         }
  23. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 赞一个!

查看全部评分

回复 使用道具 举报
一楼正解,  要么你把 name 属性也静态下, 要么你就只能创建对象来调.show() 方法来获取那name属性                                 
回复 使用道具 举报
楼上讲的很详细,在没有实例化前就直接调用类的静态变量和函数,能有打印值就是说明静态变量先于实例化后的对象加载到内存中
回复 使用道具 举报
二楼高手   
回复 使用道具 举报
你的show方法是静态方法,那么他调用的成员就必须得是静态的,否则,函数抛出异常。其次,需要强调的是,类的权限:public->default-还可以用static , final修饰,作用不同,不可使用 private 和 protected

评分

参与人数 1黑马币 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马