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为返回值,不能正常会在窗口,请教一下各位高手
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 XXXX();返回的其实是一个内存给该对象分配的地址.然后执行构造函数.并不需要什么返回值.不需要写返回值的类型。
构造函数的调用者不是开发者自己,而是系统,开发者只能触发对象的构造(通过申请对象)。也就是说,如果构造函数有返回值,处理返回值的是系统,而系统是难以根据返回值去处理的,所以它根本不需要关系构造函数的返回值。(main函数有一个int的返回值,是因为系统希望知道程序的运行结果)在初始化阶段最容易失败的是内存的申请问题,而系统在调用构造函数之前,对象的内存空间已经分配完成,构造函数所要做的事情主要是对对象的某些成员进行初始化,所以实际上它也不会有什么问题。既然构造函数不需要返回值,那为什么构造函数不使用void类型呢?这个问题我也没想清楚,可能就是为了突出构造函数的特殊性吧,比如构造函数不是开发人员该去调用的。
补充一下,我个人觉得如果要将构造函数设计成有void的返回值在技术角度是可以的。因为在一个类中,构造函数的函数名需要等于类名,这一点已经可以让编译器辨识出它与其它函数的区别了。当然这属于编译器设计或者说程序语言设计的问题。