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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yangchao8907 中级黑马   /  2013-7-30 11:56  /  1188 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-30 18:18 编辑

看完毕老师的视频,有个例子有点儿问题绕不过来
  1. <p>class Person
  2. {
  3. String name;</p><p> public static void show()
  4. {
  5.   System.out.println(name+"haha");
  6. }
  7. }</p><p>class PersonDemo
  8. {
  9. public static void main(String[] args)
  10. {
  11.   //第一种方式:
  12.   Person p = new Person();
  13.   p.show();
  14.   //第二种方式:
  15.   //Person.show();
  16. }
  17. }</p>
复制代码
为什么第一种方式,实例化对象,然后调用show()方法,报错呀?而第二种方式就可以。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

7 个回复

倒序浏览
你定义的name属性不是静态的啊,静态方法访问外部非静态成员当然报错了啊
回复 使用道具 举报
你定义的方法show()是静态的,不能用对象调用
static 用法:是一个修饰符,用于修饰成员(成员变量,成员函数) 当成员被静态修饰后,就多了一个调用方式,出来可以被对象调用外 还可以直接被类名调用,格式为:类名.静态成员。  

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
  1. class Person
  2. {
  3.         String name;

  4.         public static void show()
  5.         {
  6.                 System.out.println(name+"haha");
  7.         }
  8. }

  9. class PersonDemo
  10. {
  11.         public static void main(String[] args)
  12.         {
  13.                 //第一种方式:
  14.                 Person p = new Person();
  15.                 p.show();
  16.                 //第二种方式:
  17.                 //Person.show();
  18.         }
  19. }
复制代码
重新把代码粘一下,

回复 使用道具 举报
本帖最后由 王丽达 于 2013-7-30 12:32 编辑

静态方法show()想要调用,有两种方式:
1.被静态方法调用,像主函数就是静态的,就可以调用。
2.静态方法被所在类类名调用。
你得把变量name也定义成静态,name默认是null。自己测试下

回复 使用道具 举报
无法从静态上下文中引用非静态 变量 name
回复 使用道具 举报
本帖最后由 Mr_Free 于 2013-7-30 15:01 编辑

发错地方了
回复 使用道具 举报
  1. class Person
  2. {
  3. static String name;//应该加上static修饰符,用于修饰成员变量或者成员函数

  4. public static void show()
  5. {
  6. System.out.println(name+"haha");
  7. }
  8. }

  9. class PersonDemo
  10. {
  11. public static void main(String[] args)
  12. {
  13. //第一种方式:
  14. Person p = new Person();
  15. p.show();
  16. //第二种方式:
  17. // Person.show();
  18. }
  19. }
复制代码
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,格式为:类名.静态成员
静态方法只能访问静态成员,其中也不可定义this,super关键字

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