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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我只是大致知道静态方法只能访问静态成员,不能访问非静态。被Static修饰的成员随着类的加载而加载,但是具体的原因还是不太清楚。请高手解释解释!!

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

6 个回复

倒序浏览
被static 修饰的静态。优先于对象存在。随着类的加载而加载。
也就是说。static比对象先存在。就不必先创建对象了。被static修饰的可以直接被调用。在方法去区内共享。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报

好像这个没什么原因吧,是java的规则吧,你掌握就好了。
回复 使用道具 举报
首先static表示的是静态,当类中的方法或属性被static修饰之后就表示它属于类所拥有了,也就是static的东西会随着类的加载而加载,也就是随着类的产生而产生。之所以静态方法只能访问静态的成员是因为非静态的成员只有在对象产生之后才可以产生,对象比类后产生,当你用静态方法去访问非静态的成员时这些非静态的成员根本就没有产生,你就不可以访问到了?但静态的成员却随着类的加载就产生了,此时成员已经产生了,所以你就可以访问了。所以静态方法只能访问静态成员。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
一句话说到底,被static修饰的任何成员直属于类,可以被类和对象调用,先有类再有对象
回复 使用道具 举报
静态方法只能方法问静态同一个类中的静态方法,不能访问非静态方法。
如果要调用就通过创建对象调用。
举例如下:
class  Demo
{
        public static void main(String[] args)
        {

                int i = 1;
                Demo dem = new Demo();//调用非静态的方法。
                dem.test2(i);
                test1();
               
        }
        public static void test1()
        {
                System.out.println("test1******");
        }
        public void test2(int i)
        {

                System.out.println("test2*****"+i);

        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

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