Java的main方法与类的加载的联系
来源:互联网 发布:oracle常用sql语句 编辑:程序博客网 时间:2024/06/05 11:03
鉴于许多同学对这个main方法的迷惑!我这里提供一些意见,希望对大家有帮助!呵呵!
****我们说加载先:
Java的类是用到才开始加载的,并且在每个类的构造器调用之前,类的每个域(成员变量)都要首先被编译器初始化一次,然后才轮到构造器来干活儿。但是,Java的初始化是惰性的,它没有C++构造函数的苛刻的要求,Java编译器会保证每个变量在使用之前会被初始化,因此Java中只要求程序员在合适的地方为类成员给一个有效的值即可。
一个static变量在没有类实例的时候也是可以使用的,这就要求static必须被恰当地初始化,也就是说,在构造器的调用之前,加载类的时候,Java编译器会允许JVM运行一段代码,至少可能会有几行。
****程序开始的时候类加载的时候所做的工作流程是怎样的?
每当执行Java编译器的时候,编译器会寻找指定的类,当它找到类时,首先需要初始化static变量,因为这些成员可以在没有实例的情况下运行,接着,再按照变量的声明顺序依次初始化类的成员,成员初始化完毕之后才为自己调用构造器,一切进行完毕之后,才可以调用方法。但主类比较特殊,主方法会在构造器之前,static变量初始化之后调用,这是由于Java的惰性初始化,在main方法被调用之前无法知道是否存在主类的实例。
Java的初始化和构造的分离使得Java提供了代码块作为初始化成员的工具和支持无名类的利器,而这样一来,初始化的工作就不免会被扩展,程序员可以嵌入额外的初始化步骤。由于Java的成员分普通成员和static成员,初始化代码块也分static的,例如:
public class Foo{
int a;
int b;
static int c;
{
a=-1;
b=1;
}//这个就是所谓的初始化代码块
static {
c=100;
}//static成员有专属的static初始化代码块
Foo(){Syetem.out.println("Foo creat now!")}//这个和C++确实不同,权限大为缩减
};
接下来就是问题的实质了:如何在没有main方法的情况下执行程序段?把程序段写在static块里面就可以了!当执行加载主类命令时,static块中的代码会在类对象初始化之前执行完毕。注意,这个只是执行代码段而已,并且只能执行static初始化代码块内的代码,并不是所谓的执行程序。首先一点,你这static代码块无法接受到传递过去的参数。而且,如果打算运行上面的类,肯定会失败,因为在初始化完成之后JVM找不到入口,入口都没有当然程序也就特别异常了。
- Java的main方法与类的加载的联系
- main()方法的执行 和 类加载
- java的main方法
- Java的Main方法与Java进程之间的关系
- Java的Main方法与Java进程之间的关系
- main方法之前的加载时间衡量
- java基础:反射类的main方法
- java 之反射类的main方法
- java 调用类的Main()方法
- [Java] main方法的参数
- Java Main方法的作用
- Java的main方法浅析
- Java main方法的参数
- Java启动加载main的流程
- spark与java的联系
- java中main方法的初始化与static关键字
- java中main方法的初始化与static关…
- JAVA main 方法的执行原理 main()方法详解
- [智力问答] 十个最难的字 你认识几个
- 如果你是个中国人,真的应该去看看《叶问2》――一段宗师传奇
- 商业周刊:Google新面孔诞生记
- WINRAR打包时,去掉SVN或CVS版本控制信息文件
- MSSQL中括号的作用
- Java的main方法与类的加载的联系
- char数组与string的强制转换
- struts2-java.lang.NullPointerException at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading(FileManager.j
- 提供一个逻辑问题的算法!(最近打的大家参考一下)
- Scrum工具大比拼---流行Scrum工具一网打尽
- 博客开张四年半,艰辛历程,求点赞
- Microsoft SQL Server 2005 还原数据库的方法(图)
- 给大家写一个java的简单的栈
- QT4向s3c2410平台移植