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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄晓鑫 高级黑马   /  2014-1-8 14:13  /  1130 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态方法只能访问静态成员,不可以访问非静态成员。  
因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 神马都是浮云

查看全部评分

9 个回复

倒序浏览
所以没有办法访问对象中的成员。是什么意思
回复 使用道具 举报
对于类中的成员只有当对象被创建之后(即 类名 变量名=new 类名();)才给他们分配内存空间,但是如果对象都没有存在,那么在内存中也就没有分配相对应的空间给此对象的成员,那么也就没有办法访问此对象的成员了。
回复 使用道具 举报
可否写个例子?
回复 使用道具 举报
静态方法在类加载的时候形成,此时还没有生成,对象的成员也就不可能存在,因此静态方法就无法访问喽
回复 使用道具 举报
/*错误的代码*/
/*class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }

        public static void show()
        {
                System.out.println("name="+name+",age="+age);
        }
}


class PersonDemo
{
        public static void main(String[] args)
        {
                Person.show();//注意,对于静态方法是可以运用类名调用的。
                              //所以没有通过Person p=new Person("lisi",10);语句
                                          //建立对象的方法来调用show();所以内存中没有此成员变量,所以会编译失败
                                       
        }
}

*/

/*下面给你写的是正确的方法*/
/*正确程序*/
class Person
{
        private static String name;//静态成员随着类的加载而加载,所以这样写的话也是正确的
        private static int age;
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
        }

        public static void show()
        {
                System.out.println("name="+name+",age="+age);
        }
}

class PersonDemo
{
        public static void main(String[] args)
        {
                Person.show();//注意,对于静态方法是可以运用类名调用的。
                              //或者用Person p=new Person("lisi",10);
                                          //p.show();来执行此时,对象中的成员的值才可以真正的被访问到、
                                       
        }
}


评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
若有错误的话 希望给我指正,大家互相学习啊 呵呵呵
回复 使用道具 举报
对象的成员是指对象中的变量和方法,对于非静态成员只有在实例化对象时jvm才会给他们分配内存,对于静态成员,jvm在加载类时就已经给他们分配了内存空间,例如下代码:
public class Test2 {

        private int s=10;
        public static void main(String[] args) {
                // 此时静态方法main是无法访问成员变量s的所以此处会报错
                System.out.println(s);
                method();//静态方法main()是不能访问成员方法的所以此处报错
                //通过实例化对象Test2就可以访问s
                Test2 t=new Test2();
                System.out.println(t.s);

        }
        public void method(){
                System.out.println("方法");
        }

}

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 很给力!

查看全部评分

回复 使用道具 举报
因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。看清楚
回复 使用道具 举报
̅Xcc̲ 发表于 2014-1-8 14:22
所以没有办法访问对象中的成员。是什么意思

因为在静态方法随类一起加载,而此时你还没有创建对象,自然就会没法访问对象中的成员啊,因为对象都没有创建,哪来的成员?其实如果实例化对象之后,可以通过对象访问其中的非静态成员。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马