class Test
{
int x,y;
void output()
{
System.out.println(x);
System.out.println(y);
}
public static void main(String args[])
{
Test tmp;
tmp=new Test();
tmp.output();
}
}
对这代码有点不解, Test 类有两个方法,output 方法和 main 方法。main 方法是这个类的入口函数,当执行到 Test tmp 时能定义这个对象吗?! 这好象有点像自己包含自己的问题。
------解决方案--------------------
Java允许在一个类的方法中创建一个同类的对象出来的,静态方法main当然也可以创建新的Test对象
------解决方案--------------------
public static void main(String args[])
{
Test tmp;//创建一个Test的对象
tmp=new Test();//实例化这个对象
tmp.output();//通过这个对象调用Test中的output();方法
}
------解决方案--------------------
不是所谓的 "包含 ",是 "产生 "
举个俗例子:
类:女人类
方法:生女孩
那么当调用女人类的生小孩对象时,当然又产生一个女人
------解决方案--------------------
楼主所说的 "包含 "应该更像是内部类
------解决方案--------------------
Test one=new Test();
one.x=10;
one.y=10;
System.out.println(x); // 这为什么输出 0 ? 上面语句不是已经赋值了吗?
你修改的只是one这个实例指向的x值,它与this是分开两个不同的,one与this根本不是同一个对象,互相不会受到影响
------解决方案--------------------
this 和one都是Test类的一个实例,但是它们不是同一个对象!
------解决方案--------------------
让我用这个例子来让你理解女人和小孩的关系,这样也许你就不会觉得多了个女人了
执行我的test2,就会看到你想要的结果了
public class test2 {
public test2() {
test1.newperson();
}
public static void main(String[] args) {
test2 test21 = new test2();
}
}
public class test1 {
public test1() {
}
public static void newperson(){
System.out.println( "new a baby ");
}
}
------解决方案--------------------
嘿嘿!其实main方法不关它放在哪里!都不属于任何一个类.所以你说的自己包含自己是不存在的!
------解决方案--------------------
无论如何,只要你调用了test one =new test(); 这样就已经表明你新创建了一个新的test类的实例,one在这里不是可能与this为同一个的!
你要指向同一个必须是Test one = this;这样
------解决方案--------------------
那这里面的 this 对象不等于 one 对象吗?
===
this只有在一个对象中说才有意义的,调用obj.method时,在method中this就已经转变了obj这个对象了
在你的例子中test one是一个test的实例,只有当调用 构造函数,或者one.method时,this才会等于one,在main方法中不存在this(因为静态方法中不存在this)
------解决方案--------------------
this你可以理解为“当前方法所属于的实例”
------解决方案--------------------
对于输出0和10的问题:
在对类进行实例化时 "tmp ",这时对类成员变量进行了初始化x,y分别等于0.在类内部的方法
show()中又实例化了类对象 "one ",并对类成员变量进行了赋值,你可以将tmp和one看成时人类中的男人和女人,男人有黑眼睛黑皮肤,女人有蓝眼睛白皮肤,那么他们有不同的x,y值,不是类当中的同一个x,y.而且在主函数中对本类(主函数所在的类)进行实例化对象的时,调用本类成员变量时候就是用System.out.println(x);但是在类中的方法实例化对象后就得用方法中类对象调用类成员变量.
而且在本类方法中去实例化本类的对象这种方法是不提倡的,尽量在主函数中去实例化类对象.