关于构造方法的小问题
在学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的构造方法中才能调用自己的方法?谢谢各位指教!
--------------------编程问答-------------------- f.setBackground(Color.BLACK)是调用对象的方法,这个只有在方法中才调用。不一定是构造方法,其它方法也可以。但你直接写在类里,没有任何方法这样是不行的 --------------------编程问答-------------------- 你得在方法里面用f.setBackground(Color.BLACK); --------------------编程问答-------------------- 你可以在类内部,方法外部new对象,但是 f.setBackground(Color.BLACK) 是调用方法要在方法体内,要么就把它们放在初始化块中。 --------------------编程问答-------------------- 如果您是语言的设计者,您觉得可以允许这种语法,那么它有什么用呢?它能在什么情况下用呢? --------------------编程问答-------------------- 不一定是在构造函数里,单必须是在一个方法里,不能直接在类中使用。例如:
--------------------编程问答-------------------- 楼主很喜欢思考吧,我曾经貌似也有过这样的疑问,看到楼上几个的回答,好像都在告诉你这样写是不行的,不知道lz清楚了没,我跟lz分享一点吧:
class TTFrame {
Frame f = null;
//构造函数
public TTFrame(){
f = new Frame();
}
//一个方法
void show(){
f.setBackground(Color.BLACK);
}
}
抓住基本的一点:
在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.*;--------------------编程问答-------------------- 必须要在方法内部调用。 --------------------编程问答-------------------- java 类里面只能声明变量。
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);
}
}
具体的执行必须在方法里面,或者在静态块中,比如
class TTFrame {--------------------编程问答-------------------- 类中不能有 语句 --------------------编程问答--------------------
private static Frame f = new Frame();
static{
f.setBackground(Color.BLACK);
}
}
说的很清楚 顶一个 --------------------编程问答-------------------- Java的三大特征:多态,继承,封装,这里就涉及封装的问题。封装是把过程(方法)和数据(属性)包围起来,对数据的访问只能通过已定义的方法来实现,面向对象设计始于这些基本概念。所以面向对象编程是以类为核心,类中包含有方法和属性。楼主忽视了面向对象编程的基本特征。 --------------------编程问答-------------------- 你直接在类中用是不行的 就相当于 饭得在碗里吃 要是没有个载体 就不符合规矩了 --------------------编程问答-------------------- 类里面自能定义字段和方法啊, Frame f = new Frame(); 就相当一定义了一个属性 为Frame,并初始化了,
你 f.setBackground(Color.BLACK);这个既不是方法也不是字段
--------------------编程问答-------------------- --------------------编程问答-------------------- 类里面的方法外部怎样可以有方法调用的语句呢?
补充:Java , Java SE