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;
}

解决方案 »

  1.   

    这正式构造方法区别普通方法的地方加上void就成了普通方法了
      

  2.   

    构造方法本就没有返回值,当你在new 一个实例的时候,相当于就是调用它的构造方法;
    而你加上个void () 它就成普通的方法了
      

  3.   

    在实例化一个类时,可以通过new关键字声明一个不含参数的构造方法,void 修饰的是一个没有返回值的普通方法
      

  4.   

    构造函数的格式化用法,不写返回值.
    楼主可以这样想
    new XXXX();返回的其实是一个内存给该对象分配的地址.然后执行构造函数.并不需要什么返回值.不需要写返回值的类型。
      

  5.   

    下面是我的理解,未必正确:
    构造函数的调用者不是开发者自己,而是系统,开发者只能触发对象的构造(通过申请对象)。也就是说,如果构造函数有返回值,处理返回值的是系统,而系统是难以根据返回值去处理的,所以它根本不需要关系构造函数的返回值。(main函数有一个int的返回值,是因为系统希望知道程序的运行结果)在初始化阶段最容易失败的是内存的申请问题,而系统在调用构造函数之前,对象的内存空间已经分配完成,构造函数所要做的事情主要是对对象的某些成员进行初始化,所以实际上它也不会有什么问题。既然构造函数不需要返回值,那为什么构造函数不使用void类型呢?这个问题我也没想清楚,可能就是为了突出构造函数的特殊性吧,比如构造函数不是开发人员该去调用的。
      

  6.   


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