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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 爱上这格调 中级黑马   /  2013-9-16 17:29  /  1940 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨增坤 于 2013-9-19 12:31 编辑

在一个类中的构造函数中直接建立另外一个类的对象  然后使用对象中的函数 为什么编译通不过那
这个是我自己试着验证的程序
class Zi
{
public void show()
{
  System.out.println("show");
}
}
class Fu
{
Fu()
{
  zi = new Zi();
}
public void work()
{
  zi.show();
}
}
class  Test
{
public static void main(String[] args)
{
  Fu fu = new Fu();
  fu.work();
}
}
编译之后提示错误:work方法中的zi.show()找不到符号

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

8 个回复

倒序浏览
编辑栏中的<>图标专门用来放代码
回复 使用道具 举报
你在Fu类中都没有声明zi对象,在Fu类中先申明 Zi zi = null;

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
  1.         public void work()
  2.         {
  3.           zi.show();
  4.         }
复制代码
同学,你这段代码,有很大的问题:
work方法居然调用了其他方法内部的局部变量!这是绝对不允许的!

构造函数Fu()运行结束后,栈内的引用变量Zi就释放了,new Zi()对象在堆中由于没有人引用,已被归入了垃圾一类,等gc一过来就会被释放。

方法外调用方法内的局部变量是绝对不允许的!会引起程序错误。你可以一定要操作该变量,可以把他赋值给成员变量,即声明一个private Zi zi;
  1. Fu()
  2. {
  3.   this.zi = new Zi();
  4. }
复制代码
这样才可以呢。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
  1. class Zi{
  2.         public void show()        {
  3.           System.out.println("show");
  4.         }
  5. }

  6. class Fu{
  7.         Zi zi = null;//改一下就好了吗!
  8.         Fu(){
  9.                 zi = new Zi();
  10.         }
  11.         public void work()        {
  12.           zi.show();
  13.         }
  14. }

  15. public class  Testfff{
  16.         public static void main(String[] args)         {
  17.           Fu fu = new Fu();
  18.           fu.work();
  19.         }
  20. }
复制代码
回复 使用道具 举报
周文斌 发表于 2013-9-16 18:57
同学,你这段代码,有很大的问题:
work方法居然调用了其他方法内部的局部变量!这是绝对不允许的!

搜戴斯乃   原来如此  谢了啊
回复 使用道具 举报
在构造函数中创建对象,构造函数结束后,对象就自动释放了。

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

回复 使用道具 举报
刘亮 中级黑马 2013-9-16 20:20:43
8#
你父类里面没有work show()如何找,可以继承下 class fu extends zi

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

回复 使用道具 举报
第十行原来的代码是zi = new Zi();
没有生命zi的类型。
应该改为Zi zi=new Zi();

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

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