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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜天伟 中级黑马   /  2012-12-14 11:22  /  1096 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法只能访问静态成员。
        非静态方法既可以访问静态也可以访问非静态。
这是Static的 规则  
我有点疑问的是,要是先建立了对象  ,那么这时候非静态的也就有了初始化值,那么这时候静态方法可以访问非静态成员了嘛?
在第六天的第一个视频最后,有个同学也问了这个问题,毕老师回答,必须的!
但 ,我按照这个编码  。结果却编译不通过  {:soso_e136:}
StaticDemo.java:50: 错误: 无法从静态上下文中引用非静态 变量 name
                System.out.println("::::"+name);
                                          ^
1 个错误
这是什么情况?
上代码
class Person
{
        String name;//成员变量,实例变量。
        static String country = "CN";//静态的成员变量,类变量。
        public static void show()
        {
                System.out.println("::::"+name);
                //this.haha();
        }
        //public void haha()
        //{}
}

class  StaticDemo
{
        public static void main(String[] args)
        {
                Person p = new Person();
                //p.name = "zhangsan";
                //p.show();

                //System.out.println(p.country);

                //System.out.println(Person.country);

                p.show();
        }
}

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 神马都是浮云

查看全部评分

2 个回复

倒序浏览
被Static静态修饰的属性或方法,可以直接使用类名调用(类名.属性/类名.方法())
        #注意:使用static方法,不能调用非static的属性或方法
        #原因:因为static属性或方法可以在对象没有实例化的时候就直接调用了.

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 就是这样

查看全部评分

回复 使用道具 举报
System.out.println("::::"+new Person().name);改成这样就对了
因为public static void show()这里头你调用name,而这个name是不是静态的,需要有Person这个对象
所以会出错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马