1. 用类名加new 创建一个对象,这个对象的作用域是整个类吗?关于这个对象作用域的问题,我确实很疑惑,在图书馆找了资料,但是还是没找到答案。直接上个例子,请各位帮忙解决下。import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.*;
public class TestFrame extends JFrame{
public TestFrame(String s){
super(s);
JTextArea m ;
m = new JTextArea(8,8);
JButton f = new JButton ("not");
JButton k = new JButton ("ok");
JTextField p = new JTextField("THIS is a revoluntion");
m.setText("this is");
m.setEditable(false);
setSize(222,111);
setVisible(true);
Container o = getContentPane();
o.setLayout(new FlowLayout());
o.add(f);
o.add(k);
o.add(p);
o.add(m);
}
public static void main (String args []){
TestFrame b = new TestFrame("shit");
}
}
对于这个程序,我想问的是:
在main 方法里创建的对象,作用域是整个类吗?为什么变量在方法体声明,作用域却是当前的方法体,出了方法体,就失去作用了。而对象却可以作用于整个类?这是怎么实现的?
------解决方案--------------------
我暂时理解你的疑问为:为什么对象的作用域和变量的作用域不一样?
先想一下什么是对象,是一组数据的集合,存放在内存里面,一组数据能产生什么作用?貌似不会,只能是别人来访问它。所以对象的作用域这个说法不太合适。只能用访问权限来描述,就是谁可以访问我这组数据。
变量是什么?一个变化的量,用来标识那些数据,作用域,就是这个变量标识这组数据的有效范围。
举个形象的例子(我靠我刚想到,我太有才了。请大神不要BS我):
一个班里有很多个学生,有张三、李四、王五……
班里人给他们起了绰号:张三——来福、李四——双响炮、王五——旺财
这些学生就是对象,绰号就是变量。对象的作用域,这个好像真没有。张三的作用域?但是来福的作用域是有的,就是这个班,只要在这个班里,来福就是指张三,出了这个班就不是了。假如双响炮是班里人自己取得绰号,那么别人都不知道,出了这个班这个变量就没有了,但是来福旺财,还可以存在。
A class{
int a;//来福,作用域是整个class的大括号内
Object b;//旺财,作用域同上
void f1(){
boolean c;//双响炮,作用域是f1方法的大括号内
a = new Integer(1);//张三
b = new Frame();//王五
c = new Boolean("true");//李四
}
f2(){
a = a = new Integer(2);//任然在作用域内,可以再赋值,它代表的量变化了,所以“变量”
b = new String("I'm another Objection");同上
//c = new Boolean;这个变量已经不存在了,已经超出了他的作用域
}
}
睡不着的时候就多敲键盘,敲着敲着就睡着了。。。