
如果是在方法外,那么会在执行main方法之前进行对象创建,也就是说在内外的执行先后顺序是不一样的。
备注:通常在main方法外的都是定义为static的,需要初始化内存中的对象才这么搞,以后会直接进行调用,不会再去重新创建。在main方法里面的每次执行都会重新创建,没有那个好的说法,只能是具体情况具体分析。
在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)
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方法的对象删除,绝对输出不了任何东西
在输入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方法没有关系。只和类的初始化顺序相关