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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 北京南瓜 中级黑马   /  2015-3-12 15:28  /  1208 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Person
  2. {
  3. public static void speak()
  4. {
  5. System.out.println("speak chinese");
  6. }
  7. }
  8. class PersonDemo
  9. {
  10. //Person p= new Person();
  11. public static void main(String[] args)
  12. {
  13. Person p= new Person();
  14. p.speak();
  15. }

  16. }
复制代码
这样运行是没问题的,可是把Person对象移到主函数外为什么运行不成功?
  1. class Person
  2. {
  3. public static void speak()
  4. {
  5. System.out.println("speak chinese");
  6. }
  7. }
  8. class PersonDemo
  9. {
  10. Person p= new Person();
  11. public static void main(String[] args)
  12. {
  13. //Person p= new Person();
  14. p.speak();
  15. }

  16. }
复制代码


12345.jpg (23.73 KB, 下载次数: 6)

12345.jpg

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 加油~

查看全部评分

11 个回复

倒序浏览
静态方法只能引用静态成员变量
回复 使用道具 举报
pop1234o 发表于 2015-3-12 15:38
静态方法只能引用静态成员变量

p在这里不是变量而是创建的Person对象。。。
回复 使用道具 举报
因为主函数是静态函数,不能调用非静态成员,静态函数是随着类的加载而加载的,在静态函数中调用非静态成员,将会发生找不到成员变量的错误。若非要将Person的实例化在主函数外面创建,就要将实例化对象定义为静态的。不过这样的话会有点浪费内存空间,因为Person对象的生命周期,将会是从程序运行开始直到程序结束。
将实例化对象定义在主函数外的程序如下:
class PersonDemo{
        static Person pt=new Person();
        public static void main(String agrs[]){
                pt.speek();//speek();
        }
       
}
class Person{
        public void speek()
        {
                System.out.println("hahaha");
        }
}

评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

回复 使用道具 举报
yangruijing 发表于 2015-3-12 15:46
因为主函数是静态函数,不能调用非静态成员,静态函数是随着类的加载而加载的,在静态函数中调用非静态成员 ...

嗯,刚才运行了一下确实可以,不过static貌似不是只能修饰成员函数和成员变量吗
回复 使用道具 举报
静态方法只能引用静态成员变量,因为他们的创建时期不一样
回复 使用道具 举报
vayne 发表于 2015-3-12 16:03
静态方法只能引用静态成员变量,因为他们的创建时期不一样

关键我这个p不是成员变量啊
回复 使用道具 举报
北京南瓜 发表于 2015-3-12 15:58
嗯,刚才运行了一下确实可以,不过static貌似不是只能修饰成员函数和成员变量吗 ...

Person p=new Person();
p也是一个变量啊,只不过是一个Person类型的引用变量而已
回复 使用道具 举报
北京南瓜 发表于 2015-3-12 15:40
p在这里不是变量而是创建的Person对象。。。

你这个是成员变量,只不过他是Person类型的
回复 使用道具 举报
yangruijing 发表于 2015-3-12 16:21
Person p=new Person();
p也是一个变量啊,只不过是一个Person类型的引用变量而已 ...

好吧,这两天看的视频都快把我搞晕了
回复 使用道具 举报
pop1234o 发表于 2015-3-12 16:44
你这个是成员变量,只不过他是Person类型的

恩,知道了,thank you!
回复 使用道具 举报
vayne 中级黑马 2015-3-13 15:44:01
12#
你这就就有点水来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马