黑马程序员技术交流社区

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

作者: yangchao8907    时间: 2013-7-30 11:56
标题: 关于静态的问题
本帖最后由 杨兴庭 于 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()方法,报错呀?而第二种方式就可以。


作者: HMHM汪磊    时间: 2013-7-30 12:01
你定义的name属性不是静态的啊,静态方法访问外部非静态成员当然报错了啊
作者: a2213502    时间: 2013-7-30 12:07
你定义的方法show()是静态的,不能用对象调用
static 用法:是一个修饰符,用于修饰成员(成员变量,成员函数) 当成员被静态修饰后,就多了一个调用方式,出来可以被对象调用外 还可以直接被类名调用,格式为:类名.静态成员。  
作者: yangchao8907    时间: 2013-7-30 12:12
  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:21
本帖最后由 王丽达 于 2013-7-30 12:32 编辑

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


作者: 王希军    时间: 2013-7-30 13:58
无法从静态上下文中引用非静态 变量 name
作者: Mr_Free    时间: 2013-7-30 14:59
本帖最后由 Mr_Free 于 2013-7-30 15:01 编辑

发错地方了
作者: 以防万一    时间: 2013-7-30 19:10
  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关键字






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