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

关于构造方法的小问题
在学java的时候遇到了个小问题
class TTFrame {
public TTFrame(){
Frame f = new Frame();
f.setBackground(Color.BLACK);
}
}

这样写没问题
class TTFrame {
Frame f = new Frame();
f.setBackground(Color.BLACK);
}

这样f不能调用任何方法

为什么Frame的对象一定要在TTFrame的构造方法中才能调用自己的方法?谢谢各位指教!

------解决方案--------------------
楼主很喜欢思考吧,我曾经貌似也有过这样的疑问,看到楼上几个的回答,好像都在告诉你这样写是不行的,不知道lz清楚了没,我跟lz分享一点吧:
抓住基本的一点:
在Java语言中,是以类为单位的,类里面包含的成员只有三种:属性,行为(方法),内部类,而这三种可以配有各种修饰符,有权限修饰符,有状态修饰符。
也许有人会说static静态代码块,静态代码块可以归类到行为中。
希望楼主从基本点出发,就不难明白啦,希望楼主学习进步。
------解决方案--------------------
说明:
     类的简单组成就是 成员变量 和 成员方法。 在此程序中,变量 f 就是一个普通成员变量,你要想改变普通成员变量的值(或属性),只有一种方法。在声明成员变量的类里面写一个方法改变值(或属性)。如下形式

class TTFrame {
        //普通成员变量
int i = 0;
void check(){
i = 6;
}
}

如果按你想的,像下面写,语法就不对。
class TTFrame {
//普通成员变量
int i = 0;
i = 6;
}

但是局部变量可以这样写。如下 局部变量jj  (这是成员变量和局部变量的重要区别):
class TTFrame {

int i = 0;
void check(){
i = 6;
int jj = 11;
jj = jj++;
jj = jj+i;
}

}


看下面,想改变 f 的值(属性),必须写在一个方法里(主方法当然也可以)进行操作 f .不然任何访问都不合法。

import java.awt.*;

class TTFrame {
 //普通成员变量
    Frame f = new Frame();
    //普通成员方法
    void pirntLuch(){
     int i = 0;
    }
}

public class TestFrame{
public static void main(String[] args){
TTFrame tt = new TTFrame();
tt.f.setBackground(Color.BLACK);
}

}

------解决方案--------------------
Java的三大特征:多态,继承,封装,这里就涉及封装的问题。封装是把过程(方法)和数据(属性)包围起来,对数据的访问只能通过已定义的方法来实现,面向对象设计始于这些基本概念。所以面向对象编程是以类为核心,类中包含有方法和属性。楼主忽视了面向对象编程的基本特征。