第一次接触OPP。。
有如下一疑惑:比如我现在要写一个GUI程序。
窗口中有一个按钮。书上说:“在类中,变量一般是描述属性,方法是描述动作。”那么,我是应该这样:import java.swing.*;
public testFrame extends JFrame {
       testFrame() {
            setTitle("frame");
            setSize(frameWidth,frameHeight);
            
            //some codes...            JPanel panel = new JPanel();
            panel.add(new JButton("Button"));
            add(panel);
       }
private final int frameWidth = 400;
private final int frameHeight = 300; 
}
还是应该import java.swing.*;
public testFrame extends JFrame {
       testFrame() {
            setTitle("frame");
            setSize(frameWidth,frameHeight);
            
            //some codes...            panel.add(button);
            add(panel);
       }
private JPanel panel = new JPanel();
private JButton button = new JButton("button");
private final int frameWidth = 400;
private final int frameHeight = 300; 
}
也就是说。。我知道,框架(Frame)的宽度和高度是框架的属性,所以定义成实例变量,
但是,框架中包含的这些组件(Component),究竟属于不属于框架的属性呢?
把按钮(Button)定义成实例变量好还是在构造方法中用局部变量定义比较好呢?
两者会各产生什么影响?求解望各位帮忙。。

解决方案 »

  1.   

    组件不属于frame的属性。
    没多大影响,不过理论上,“实例变量”的效率要稍微高一些
      

  2.   

    其实,你这问题只是构造函数的问题。一般的method是在需要用到时才调用,而构造函数则是在创建对象是,边会自动调用,并执行构造函数的内容。因此构造函数不需从程序直接调用,而是在对象残生时自动执行。
    所以构造函数一般用来赋值对象的初值。把这问题理解好了,你应该就知道该怎么做了吧
      

  3.   

    局部变量和实例变量的区别效率我是真不知道两者的区别有多大也就是说。。我知道,框架(Frame)的宽度和高度是框架的属性,所以定义成实例变量,
    理解错误,框架的高度和宽度其实是Component类里面的属性当你调用setSize的方法的时候修改的就是这两个属性值
    但是,框架中包含的这些组件(Component),究竟属于不属于框架的属性呢?如果你定义这些组件为实例变量的话那么他们就是,否则不是
    要用普通类的眼光去看待swing和awt,他们也只是普通的java类把按钮(Button)定义成实例变量好还是在构造方法中用局部变量定义比较好呢?
    看需求,如果你下面有其他的方法需要引用这些组件对象的话,就定义为实例变量,否则还是局部变量吧两者会各产生什么影响?
    局部变量的生命周期比实例变量短,而且作用范围小。
    例如增加事件监听,你需要判断事件源是哪个组件,这个时候你如果把该组件定义为实例变量比较合适
    当然你也可以不通过实例变量,而通过其他方法获得该组件对象