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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ben_vs_cong 中级黑马   /  2014-12-22 22:43  /  3113 人查看  /  16 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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可以输出
    }  
}

不知道有大神能解释一下吗?感觉后面学混了,有点不懂,先谢谢了

16 个回复

倒序浏览
我是来拿黑马币的
回复 使用道具 举报
准确的说是静态的方法不能直接访问非静态变量或方法,可以new一个类的实例,再通过该实例访问它的非静态变量或方法。你上面的例子就是这个原理。

评分

参与人数 1技术分 +2 收起 理由
lwj123 + 2 不错

查看全部评分

回复 使用道具 举报
楼上+1,顺便拿个B
回复 使用道具 举报
静态只能调用静态说的是同一个类中,而t.s1是对象调用,这是个可以的
回复 使用道具 举报
楼上+1,顺便拿个B
回复 使用道具 举报
你这个是用new出来的对象去调用的,不是用静态的main方法本身去调用的。
回复 使用道具 举报
创建的对象调用成员变量与int z=2相连接,让后输出。
回复 使用道具 举报
表达一下我的个人陋见:首先静态方法(或变量)是在类加载的时候,就在内存中存在了,当程序运行的时候,静态修饰的方法已经存在。而普通方法(或变量)只有创建该类的对象以后才加到内存中,相对滞后(没有加载之前肯定是不能用的),这也就说明了静态只能访问静态的原因。
其次,当你创建了类对象之后,方法已经加载到了方法区,成员变量也进行了显示初始化,自然也就能通过对象调用了。  个人觉得这主要是数据加载到内存的一个先后顺序问题。 (不知道说的对不对,仅供参考)
回复 使用道具 举报
楼上分析的很透彻啊
回复 使用道具 举报
静态函数只能访问静态变量的理解的前提是直接访问,而楼主访问的非静态变量是通过对象来访问的,两码事
回复 使用道具 举报
你访问都属于同一函数中, 而且你修饰的是静态函数,你的变量又没有用静态修饰,所以在同一局部中是可以访问的
回复 使用道具 举报
古都旧城 发表于 2014-12-23 00:21
表达一下我的个人陋见:首先静态方法(或变量)是在类加载的时候,就在内存中存在了,当程序运行的时候,静 ...

谢谢哟,我就是觉得有点混淆了
回复 使用道具 举报
zhengyijun 发表于 2014-12-22 23:32
准确的说是静态的方法不能直接访问非静态变量或方法,可以new一个类的实例,再通过该实例访问它的非静态变 ...

恩恩,谢谢回答
回复 使用道具 举报
红楼 中级黑马 2014-12-23 21:35:08
15#
学习了、、、、、、
回复 使用道具 举报
对象的调用~~~
回复 使用道具 举报
7楼说得好               
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马