java在main方法中创建对象和main方法外创建对象有什么区别

RT

如果是在方法中创建,那么是在执行到main方法的相应代码的时候才去执行(也就是说执行到代码才去进行对象创建)。
如果是在方法外,那么会在执行main方法之前进行对象创建,也就是说在内外的执行先后顺序是不一样的。
备注:通常在main方法外的都是定义为static的,需要初始化内存中的对象才这么搞,以后会直接进行调用,不会再去重新创建。在main方法里面的每次执行都会重新创建,没有那个好的说法,只能是具体情况具体分析。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-05-09

在main方法中创建对象,只有这个方法才可以使用这个对象,别的方法使用必须要在创建一个对象

在main方法外创建别的类对象,首先得在main方法中创建当前类的对象,这时候才会加载出你在main方法外创建的别的类的对象,这样类中其他方法才可以使用这个对象,如果你没有在main方法中创建当前类的对象,在其他方法中也不能使用这个对象

package com.unique.java;
public class TestDemo {
Zoo zoo = new Zoo(1);

public static void main(String[] args) {
TestDemo testDemo = new TestDemo();
Zoo zoo1 = new Zoo(2);
}
}
class Zoo{
Zoo(int idx){
System.out.println("Zoo("+idx+")");
}
}

输出

Zoo(1)

Zoo(2)

//----------------------------------------------------------------------------------------

package com.unique.java;

public class TestDemo {
Zoo zoo = new Zoo(1);

public static void main(String[] args) {
//TestDemo testDemo = new TestDemo();
Zoo zoo1 = new Zoo(2);
}
}

class Zoo{
Zoo(int idx){
System.out.println("Zoo("+idx+")");
}
}
}
输出:

Zoo(2)


第2个回答  推荐于2017-11-26
如果在类中创建对象则类里面的所有方法都可以使用这个对象,这就叫全局变量,如果只在方法中创建对象则只有这个方法可以使用这个对象,别的方法要使用必须再创建一个对象才能使用我们叫这种方式为局部变量追问

public class TestDemo {
Zoo zoo = new Zoo(1);
public static void main(String[] args) {
Zoo zoo1 = new Zoo(2);
}
}
class Zoo{
Zoo(int idx){
System.out.println("Zoo("+idx+")");
}
}
//为什么值输出Zoo(2)???/

追答

因为main方法传入的参数是2,java虚拟机找到main方法入口后传入是2所以调用的就是2,调用方法需要在方法中调,你在类里面调肯定不起作用,不信你把main方法的对象删除,绝对输出不了任何东西

追问

有点明白,又有点不明白。
在运行main方法前不是首先进行变量初始化吗?

追答

变量初始化他只是初始化,你如果在方法外对变量做修改时不会起作用的

本回答被提问者采纳
第3个回答  2014-08-26
没有区别,main方法只是一个特殊的方法,它是一个入口方法。
在输入java XXX的时候调用的方法追问

public class TestDemo {
Zoo zoo = new Zoo(1);
public static void main(String[] args) {
Zoo zoo1 = new Zoo(2);
}
}
class Zoo{
Zoo(int idx){
System.out.println("Zoo("+idx+")");
}
}
//为什么只输出Zoo(2)???/

追答

public class TestDemo {
Zoo zoo = new Zoo(1);
public static void main(String[] args) {
Zoo zoo1 = new Zoo(2);
TestDemo testDemo = new TestDemo();
}
}
class Zoo{
Zoo(int idx){
System.out.println("Zoo("+idx+")");
}
}

加上
TestDemo testDemo = new TestDemo();
就可以输出Zoo(1);
你这个问题和main方法没有关系。只和类的初始化顺序相关

追问

大神,还是没有正面回答为什么Zoo(1)不输出?
以及求问类的加载顺序?

追答

关于类的初始化顺序,你可以到百度搜索一下,很多的。
然后我这里给你一个连接,你也可以去看看。
http://www.cnblogs.com/jackyrong/archive/2008/08/12/1266161.html

本回答被网友采纳
第4个回答  2018-04-04
你要想TestDemo类下的成员变量加载到jvm内存里面,在main方法里面创建对象new TestDemo();就能输出Zoo(1)了。
相似回答