java含有main函数的类的构造方法执行的疑问?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中的代码是在类被加载时执行,那么什么时候类被加载呢,我的逻辑应该是某个类中的元素被请求时,对比上面的代码结果,这一想法暂时还站得住脚。
类中只有两种元素可以被外界请求,一是静态元素,还有就是构造方法(在构造类的对象时被请求)。注意我上面说的是“类”而不是“对象”。
所以自然的,main被请求因此W类被虚拟机载入,然后请求了E的构造方法用来构造E的实例,所以E被载入,完事!
如果没有明白上面的阐述,请看下面的直接回答:
1、含有main函数的类的构造方法为什么没有被执行?
答:因为你没有构造该类的实例。只有在构造类的实例时才会请求类的构造方法。
2、包含main函数的类可否被实例化?
答:可以。类可否被实例化跟类的内容无关,只需要参考该类的定义,只有虚基类不可被实例化(当然没有访问权限的更不可能)。
3、开始做了总结性的阐述,上面两个问题的解答也都附带了简要的说明(应该说比较详细了)。 参考技术A 构造方法只能在实例化对象时自动运行。如果要一次运行多个构造函数,用this关键字,如果是调用父类构造函数请用super。
对于一般的程序执行main函数的是主线程,所有在main函数中直接调用的代码都属于这个线程,其结束整个程序就结束了
多线程如果把其他线程作为守护线程,那么在main函数的线程结束以后,这个线程仍旧可继续执行。 参考技术B CLASS W构造函数不执行是因为你没有调用此构造函数(你没有创建这个类的实例),构造函数的作用是创建类的对象和初始化属性的. 参考技术C 构造函数
是一种特殊的方法
主要用来在创建对象时初始化对象
即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中
特别的一个类可以有多个构造函数
可根据其参数个数的不同或参数类型的不同来区分它们
即构造函数的重载
如果在创建类的时候,没有建立构造方法;那类会默认创建一个空的构造方法
如:
public
class
demo
//默认创建这个方法,即是没有手动将创建——前提条件是类中没有创建任何有关构造方法
public
demo()
private
name;
...
希望我的回答可以帮到你~! 参考技术D 1. W里的构造方法没有执行 是因为你没有创建W的实例,你创建的是E的实例 new E()
2. static语句优于构造方法执行,从运行结果上看也优于main方式执行
3. 实例化和含不含有main方法没有关系
Java中的main方法
本文含有个人臆测成分
Java中,编译器会把含有main函数的类作为作为项目入口类。先加载main函数所在的类,然后执行main函数。而mian函数是静态函数,是不需要实例化类就可以直接执行的。但是,我们都知道静态变量和静态块是先于静态方法被执行的,而main函数只不过是作为被编译器特殊识别的静态函数,所以当main函数所在类有静态变量和静态代码块时,他们依然是先于main函数被执行的。
结合我前面的一篇文章 Java对象的初始化顺序,原理版,不用死记,所有关于执行顺序的问题,应该都可以被正确的分析出结果了。
============================================================
|| 我是小布,小布又作小步的意思,哪怕小步前行,也希望自己一直坚持下去!||
============================================================
以上是关于java含有main函数的类的构造方法执行的疑问?的主要内容,如果未能解决你的问题,请参考以下文章