黑马程序员技术交流社区

标题: 静态的问题 [打印本页]

作者: 黄晓鑫    时间: 2014-1-8 14:13
标题: 静态的问题
静态方法只能访问静态成员,不可以访问非静态成员。  
因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。
作者: 黄晓鑫    时间: 2014-1-8 14:22
所以没有办法访问对象中的成员。是什么意思
作者: 贺利英    时间: 2014-1-8 14:49
对于类中的成员只有当对象被创建之后(即 类名 变量名=new 类名();)才给他们分配内存空间,但是如果对象都没有存在,那么在内存中也就没有分配相对应的空间给此对象的成员,那么也就没有办法访问此对象的成员了。
作者: 黄晓鑫    时间: 2014-1-8 14:51
可否写个例子?
作者: 范晓冲    时间: 2014-1-8 15:24
静态方法在类加载的时候形成,此时还没有生成,对象的成员也就不可能存在,因此静态方法就无法访问喽
作者: 贺利英    时间: 2014-1-8 15:48
/*错误的代码*/
/*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();来执行此时,对象中的成员的值才可以真正的被访问到、
                                       
        }
}



作者: 贺利英    时间: 2014-1-8 15:49
若有错误的话 希望给我指正,大家互相学习啊 呵呵呵
作者: 王新年    时间: 2014-1-8 16:01
对象的成员是指对象中的变量和方法,对于非静态成员只有在实例化对象时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("方法");
        }

}

作者: 黄晓鑫    时间: 2014-1-10 19:40
因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。看清楚
作者: mrwise1991    时间: 2014-1-13 23:28
̅Xcc̲ 发表于 2014-1-8 14:22
所以没有办法访问对象中的成员。是什么意思

因为在静态方法随类一起加载,而此时你还没有创建对象,自然就会没法访问对象中的成员啊,因为对象都没有创建,哪来的成员?其实如果实例化对象之后,可以通过对象访问其中的非静态成员。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2