java含有main函数的类的构造方法执行的疑问?

我的代码如下:
class Q
{
static
{
System.out.println("Q class is loading");
}
}
class E
{
static
{
System.out.println("I never run");
}
}
class W
{
static
{
System.out.println("W class is loading");
}
public static void main(String[] args)
{
new E();
}
W()
{
System.out.println("I wish I be the frist.");
}
}
编译运行后:
W class is loading
I never run

我想问的是为什么哈有main函数的类W里的构造函数不执行了呢?含有main函数的类可不可以实例化?能否有详细的解答,谢谢!

想不到事隔数年,Java语法竟出现了这样的变化(不知道以前有无),直接static,一开始读代码,一头雾水,晕!
作用我大概是猜到一些,不过我就纳闷了,Java在载入类的时候留有入口供程序员执行代码,这本是虚拟机内部的工作,对用户应该是完全隐藏的啊,让程序员在这时候干什么呢?想不通!
对于楼主的问题,我想楼主应该首先了解你所写的每一段代码会在什么时候被执行,这是最起码的,否则写出来干嘛呢!
前面我猜的,static中的代码是在类被加载时执行,那么什么时候类被加载呢,我的逻辑应该是某个类中的元素被请求时,对比上面的代码结果,这一想法暂时还站得住脚。
类中只有两种元素可以被外界请求,一是静态元素,还有就是构造方法(在构造类的对象时被请求)。注意我上面说的是“类”而不是“对象”。
所以自然的,main被请求因此W类被虚拟机载入,然后请求了E的构造方法用来构造E的实例,所以E被载入,完事!

如果没有明白上面的阐述,请看下面的直接回答:
1、含有main函数的类的构造方法为什么没有被执行?
答:因为你没有构造该类的实例。只有在构造类的实例时才会请求类的构造方法。
2、包含main函数的类可否被实例化?
答:可以。类可否被实例化跟类的内容无关,只需要参考该类的定义,只有虚基类不可被实例化(当然没有访问权限的更不可能)。
3、开始做了总结性的阐述,上面两个问题的解答也都附带了简要的说明(应该说比较详细了)。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-24
构造方法只能在实例化对象时自动运行。如果要一次运行多个构造函数,用this关键字,如果是调用父类构造函数请用super。

对于一般的程序执行main函数的是主线程,所有在main函数中直接调用的代码都属于这个线程,其结束整个程序就结束了
多线程如果把其他线程作为守护线程,那么在main函数的线程结束以后,这个线程仍旧可继续执行。
第2个回答  2010-01-06
CLASS W构造函数不执行是因为你没有调用此构造函数(你没有创建这个类的实例),构造函数的作用是创建类的对象和初始化属性的.
第3个回答  2019-08-06
构造函数
是一种特殊的方法
主要用来在创建对象时初始化对象
即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中
特别的一个类可以有多个构造函数
可根据其参数个数的不同或参数类型的不同来区分它们
即构造函数的重载
如果在创建类的时候,没有建立构造方法;那类会默认创建一个空的构造方法
如:
public
class
demo{
//默认创建这个方法,即是没有手动将创建——前提条件是类中没有创建任何有关构造方法
public
demo(){}
private
name;
...
}
希望我的回答可以帮到你~!
第4个回答  2010-01-06
1. W里的构造方法没有执行 是因为你没有创建W的实例,你创建的是E的实例 new E()
2. static语句优于构造方法执行,从运行结果上看也优于main方式执行
3. 实例化和含不含有main方法没有关系

java含有main函数的类的构造方法执行的疑问?
1、含有main函数的类的构造方法为什么没有被执行?答:因为你没有构造该类的实例。只有在构造类的实例时才会请求类的构造方法。2、包含main函数的类可否被实例化?答:可以。类可否被实例化跟类的内容无关,只需要参考该类的定义,只有虚基类不可被实例化(当然没有访问权限的更不可能)。3、开始做...

java类中构造方法是必须的吗?还是只有javabean中的构造方法是必须...
一、在java中,构造方法不是必须显示定义的,如果没有定义构造方法,那么该类就有一个默认的无参数构造方法 二、main方法也不是必须的,main方法是作为运行这个类的入口,如果你不是要单独的运行这个类则不用写main方法

关于Java构造方法的一个问题
public test(String str) { \/\/这是一个有参构造方法,在这个方法内调用了上面的空参构造方法。this();System.out.println("执行this()后,调用了有参构造方法。输出参数:"+str);} public void test(){ System.out.println("普通方法");} public static void main(String[] args) { test t=...

java 一个很奇怪的问题,有时候能运行,有时却提示错误
private String name; \/\/声明姓名属性 private int age; \/\/声明年龄属性 public Person(){ \/\/无参构造 } public Person(String name,int age){ \/\/取得信息的方法 this(); \/\/在此处调用Person类中的无参构造方法 this.name=name;this.age=age;} public String getInfo(){ retu...

java的小问题 为什么执行的 时候 构造方法没有执行
构造方法是new对象时调用的,比如 T t=new T(),其中T()就是类T的构造方法。所以你这段程序中构造方法没用。

如何使java的构造函数运行?
没有别的办法,构造函数只会在对象生成的时候执行...比如你有个Test类我猜你写的是Test t = new Test();在下面的程序中没有用到t,会提示可以删除,可以不写对象的引用,直接写成new Test();就执行构造了..t只是一个Test类型的引用,引用了new Test();出来的对象。

构造方法何时被调用?
public static void main(String[] args){ A a = new A() ;调用了无参构造方法; A a1 = new A(5,vieri);调用了两参构造方法 } } 问题二:java 构造函数什么时候被调用执行 在java语言 中,构造函数又称构造方法。特殊性在于,与普通方法的区别是,他与类名相同,不返回结果也不加void返回值。构...

java中,main函数里获取到的数据,我想在另外一个类的方法里进行使用,我...
有两个建议:把它存到数据源,然后在另外的方法里调取;直接在main中调用另外的一个方法,并且以参数的形式传入这个方法.例如:在main中获得了a,想在方法b()中使用a,可以把b()改为b(int v)然后再main中b(int a)就可以了

java中关于构造器构造函数构造方法重载方法的困惑
方法一:--- public String +(String s ,int i){ return s+i.toString() ;} 重载方法:--- public String +(inti ,int j){ return i.toString()+j.toString() ;} \/\/其中toString()是将整形转化为字符串的方法;\/\/+号是方法名;--- public String +(String s1,String s2);就叫做方法...

java 类中定义一个类,这两个类构造函数先后问题
1、调用顺序:JAVA类首次装入时,会对静态成员变量或方法进行一次初始化,但方法不被调用是不会执行的,静态成员变量和静态初始化块级别相同,非静态成员变量和非静态初始化块级别相同。先初始化父类的静态代码--->初始化子类的静态代码--> (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非...

相似回答