黑马程序员技术交流社区

标题: 有个疑问构造函数的 [打印本页]

作者: 爱上这格调    时间: 2013-9-16 17:29
标题: 有个疑问构造函数的
本帖最后由 杨增坤 于 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()找不到符号

作者: EYE_SEE_YOU    时间: 2013-9-16 17:56
编辑栏中的<>图标专门用来放代码
作者: loading……99.9    时间: 2013-9-16 18:03
你在Fu类中都没有声明zi对象,在Fu类中先申明 Zi zi = null;
作者: 周文斌    时间: 2013-9-16 18:57
  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. }
复制代码
这样才可以呢。
作者: 王广亚    时间: 2013-9-16 19:11
  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 19:40
周文斌 发表于 2013-9-16 18:57
同学,你这段代码,有很大的问题:
work方法居然调用了其他方法内部的局部变量!这是绝对不允许的!

搜戴斯乃   原来如此  谢了啊

作者: Mr.__ㄨīn    时间: 2013-9-16 20:13
在构造函数中创建对象,构造函数结束后,对象就自动释放了。
作者: 刘亮    时间: 2013-9-16 20:20
你父类里面没有work show()如何找,可以继承下 class fu extends zi
作者: 陌上尘    时间: 2013-9-17 14:13
第十行原来的代码是zi = new Zi();
没有生命zi的类型。
应该改为Zi zi=new Zi();






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