日期:2014-05-20  浏览次数:20892 次

构造函数的返回值问题
class NotHelloWorldFrame extends JFrame

        //为什么这里没有返回值呢,添加void为返回值,不能正常会在窗口,请教一下各位高手
public NotHelloWorldFrame()
{
setTitle("NotHelloWorld");
setSize(DEAFAULT_WIDTH,DEAFAULT_HEIGHT);
//add panel to frame 
NotHelloWorldPanel panel = new NotHelloWorldPanel();
add(panel);
}

public static final int DEAFAULT_WIDTH = 300;
public static final int DEAFAULT_HEIGHT = 200;

}
//a panel that displays a message
class NotHelloWorldPanel extends JPanel
{
public void paintComponent(Graphics g)
{
g.drawString("Not a hello,world program", MESSAGE_X, MESSAGE_Y);
}
public static final int MESSAGE_X = 75;
public static final int MESSAGE_Y = 100;
}
------最佳解决方案--------------------
这正式构造方法区别普通方法的地方

加上void就成了普通方法了
------其他解决方案--------------------
构造方法本就没有返回值,当你在new 一个实例的时候,相当于就是调用它的构造方法;
而你加上个void () 它就成普通的方法了
------其他解决方案--------------------
构造函数的格式化用法,不写返回值.
楼主可以这样想
new XXXX();返回的其实是一个内存给该对象分配的地址.然后执行构造函数.并不需要什么返回值.不需要写返回值的类型。
------其他解决方案--------------------
下面是我的理解,未必正确:
构造函数的调用者不是开发者自己,而是系统,开发者只能触发对象的构造(通过申请对象)。也就是说,如果构造函数有返回值,处理返回值的是系统,而系统是难以根据返回值去处理的,所以它根本不需要关系构造函数的返回值。(main函数有一个int的返回值,是因为系统希望知道程序的运行结果)

在初始化阶段最容易失败的是内存的申请问题,而系统在调用构造函数之前,对象的内存空间已经分配完成,构造函数所要做的事情主要是对对象的某些成员进行初始化,所以实际上它也不会有什么问题。

既然构造函数不需要返回值,那为什么构造函数不使用void类型呢?这个问题我也没想清楚,可能就是为了突出构造函数的特殊性吧,比如构造函数不是开发人员该去调用的。
------其他解决方案--------------------
在实例化一个类时,可以通过new关键字声明一个不含参数的构造方法,void 修饰的是一个没有返回值的普通方法
------其他解决方案--------------------
构造函数没有返回值。
------其他解决方案--------------------
不用返回值的
------其他解决方案--------------------
引用:
下面是我的理解,未必正确:
构造函数的调用者不是开发者自己,而是系统,开发者只能触发对象的构造(通过申请对象)。也就是说,如果构造函数有返回值,处理返回值的是系统,而系统是难以根据返回值去处理的,所以它根本不需要关系构造函数的返回值。(main函数有一个int的返回值,是因为系统希望知道程序的运行结果)

在初始化阶段最容易失败的是内存的申请问题,而系统在调用构造函……


补充一下,我个人觉得如果要将构造函数设计成有void的返回值在技术角度是可以的。因为在一个类中,构造函数的函数名需要等于类名,这一点已经可以让编译器辨识出它与其它函数的区别了。当然这属于编译器设计或者说程序语言设计的问题。
------其他解决方案--------------------
多谢各位的热情回复