java的运行流程
一,我们所看不到的:
1,如果java文件没有package,就默认给文件加上"无名"package;
2,默认导入java.lang包,所以我们的java程序中可以使用sting,math,integer等类,包括一些异常类;
3,如果生成的类没有父类,则为这个类隐式加上父类:object;因此,包括object中的许多方法可以使用;
4,字段的初始化;
二,我们所看的到的:
既然看的到,就先看程序运行结果:
public class jrun1 {
public jrun1() {
system.out.println(" 构造函数");
}
static
{
system.out.println("static{}");
}
{
system.out.println("{}");
}
public static void main(string[] args) {
system.out.println("main()");
}
}
运行结果:
static{}
main()
显然,程序运行时,先运行:
static
{
system.out.println("static{}");
}
再调用main();
注意: 我们可以得到一个副产品:不用main方法也能运行的程序:
public class jrun1 {
static
{
system.out.println("no main()");
system.exit(0);
}
}
如果我们在类中建立一个对象:
public class jrun1 {
public jrun1() {
system.out.println(" 构造函数");
}
static
{
system.out.println("static{}");
}
{
system.out.println("{}");
}
public static void main(string[] args) {
system.out.println("main()");
new jrun1();
}
}
运行结果:
static{}
main()
{}
构造函数
从而,我们得出:
建立一个非主类对象,顺序为:静态初始化块static{}-->初始化块{}-->构造函数constructor;
那么,牵涉到继承,运行流程又如何?
看程序:
class jrun1father{
jrun1father(){
system.out.println("父类构造函数");
}
static{
system.out.println("父类静态初始化块");
}
{
system.out.println("父类初始化块");
}
}
public class jrun1 extends jrun1father{
public jrun1() {
system.out.println("子类构造函数");
}
static
{
system.out.println("子类静态初始化块");
}
{
system.out.println("子类初始化块");
}
public static void main(string[] args) {
//system.out.println("主方法)");
new jrun1();
}
}
运行结果:
父类静态初始化块
子类静态初始化块
父类初始化块
父类构造函数
子类初始化块
子类构造函数
所以,牵涉到父类:父静态-->子静态-->父初始化及构造-->子初始化及构造;
注意:初始化块和构造是接连运行的,不会父类子类交替.
//////////////////////////////////////////////////////////////////////////
作者:laodie
qq:16643190
电话:110转120转119转168099999按3
闽公网安备 35060202000074号