黑马程序员技术交流社区

标题: 关于静态方法只能访问静态变量 [打印本页]

作者: ben_vs_cong    时间: 2014-12-22 22:43
标题: 关于静态方法只能访问静态变量
本帖最后由 ben_vs_cong 于 2014-12-23 21:28 编辑

public class Test {
    String s1="java";  
    public static void main(String args[]) {                  
        int z=2;              
        Test t=new Test();              
        System.out.println(t.s1+z); //静态不是只能访问静态??为什么t.s1可以输出
    }  
}

不知道有大神能解释一下吗?感觉后面学混了,有点不懂,先谢谢了
作者: 后悔药    时间: 2014-12-22 22:52
我是来拿黑马币的
作者: zhengyijun    时间: 2014-12-22 23:32
准确的说是静态的方法不能直接访问非静态变量或方法,可以new一个类的实例,再通过该实例访问它的非静态变量或方法。你上面的例子就是这个原理。
作者: Alexrl    时间: 2014-12-22 23:45
楼上+1,顺便拿个B
作者: 青衫禅客    时间: 2014-12-22 23:52
静态只能调用静态说的是同一个类中,而t.s1是对象调用,这是个可以的
作者: 圣诞老人    时间: 2014-12-22 23:55
楼上+1,顺便拿个B
作者: 7788665544    时间: 2014-12-22 23:57
你这个是用new出来的对象去调用的,不是用静态的main方法本身去调用的。
作者: Honelyboy    时间: 2014-12-22 23:58
创建的对象调用成员变量与int z=2相连接,让后输出。
作者: 古都旧城    时间: 2014-12-23 00:21
表达一下我的个人陋见:首先静态方法(或变量)是在类加载的时候,就在内存中存在了,当程序运行的时候,静态修饰的方法已经存在。而普通方法(或变量)只有创建该类的对象以后才加到内存中,相对滞后(没有加载之前肯定是不能用的),这也就说明了静态只能访问静态的原因。
其次,当你创建了类对象之后,方法已经加载到了方法区,成员变量也进行了显示初始化,自然也就能通过对象调用了。  个人觉得这主要是数据加载到内存的一个先后顺序问题。 (不知道说的对不对,仅供参考)
作者: 李一白_    时间: 2014-12-23 09:23
楼上分析的很透彻啊

作者: 菜鸟一号    时间: 2014-12-23 09:53
静态函数只能访问静态变量的理解的前提是直接访问,而楼主访问的非静态变量是通过对象来访问的,两码事
作者: xiao飞    时间: 2014-12-23 10:11
你访问都属于同一函数中, 而且你修饰的是静态函数,你的变量又没有用静态修饰,所以在同一局部中是可以访问的
作者: ben_vs_cong    时间: 2014-12-23 21:26
古都旧城 发表于 2014-12-23 00:21
表达一下我的个人陋见:首先静态方法(或变量)是在类加载的时候,就在内存中存在了,当程序运行的时候,静 ...

谢谢哟,我就是觉得有点混淆了
作者: ben_vs_cong    时间: 2014-12-23 21:27
zhengyijun 发表于 2014-12-22 23:32
准确的说是静态的方法不能直接访问非静态变量或方法,可以new一个类的实例,再通过该实例访问它的非静态变 ...

恩恩,谢谢回答
作者: 红楼    时间: 2014-12-23 21:35
学习了、、、、、、
作者: 不给吃鸭梨    时间: 2014-12-23 21:37
对象的调用~~~
作者: 侯鹏成    时间: 2014-12-23 21:47
7楼说得好               




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