从java main方法说开去(转)-阿里云开发者社区

开发者社区> 数据库> 正文

从java main方法说开去(转)

简介: 刚刚接触java语言时,接触的便为一个java main方法。我们知道这样程序就可以运行了,但是程序是怎么运行起来的我们却不知道。 众所周知,当执行一个java程序时,首先会启动一个JVM虚拟机进程,当程序执行完时,JVM进程则消亡。

刚刚接触java语言时,接触的便为一个java main方法。我们知道这样程序就可以运行了,但是程序是怎么运行起来的我们却不知道。

众所周知,当执行一个java程序时,首先会启动一个JVM虚拟机进程,当程序执行完时,JVM进程则消亡。其他导致JVM进程消亡的还有以下情况:
  1. System.exit(int)方法,执行该方法时,虚拟机腿粗好。int参数为状态码,为0时,正常退出;若不为0,则异常退出。
  2. 遇到异常或错误时。若在程序过程中遇到异常时,不作处理会一直抛出异常到main函数,若main函数也未处理,则会抛出给JVM,若JVM处理不了该异常时,则JVM崩溃。
  3. JVM所依赖的平台发生错误。 
JVM主要由 类加载子系统、运行时数据区(内存空间)、执行引擎以及本地方法接口组成。运行时数据区又由 方法区、堆、java栈、PC寄存器、本地方法栈组成。
在内存空间中,方法区和堆是所有java线程共享的,而java栈、本地方法栈、PC寄存器则由每个线程私有。
在执行java程序时,在上篇博客http://blog.sina.com.cn/s/blog_ae63f79a0102vw94.html中已经讲到类加载子系统的过程。
类加载首先将.class文件从硬盘加载到内存,.class文件和JVM即为java实现一次编写,处处运行的关键。
前面说到将.class文件从硬盘加载到内存,具体加载到哪里呢,即为前述的运行时数据区的方法区
然后JVM会在堆中创建一个该类的class对象。Class对象都是JVM自己创建的,并且只有JVM才会创建class对象,所有的类对应的class对象都只存在一个,可以说是单例模式的一个典范。
 
下面开始讨论,普通通过构造函数创建对象和通过反射创建对象的区别。
newInstance和new的区别在于创建对象的方式不同。前者是使用类加载机制。在使用newInstance时,必须保证该类已经加载并且已经连接了。以上由Class.forname(String)实现。newInstance只能使用默认的无参构造函数,而new可以使用任意声明的public构造函数。
我们常见到在引用所写的java代码时,会有import,使用import关键字的java类,JVM在启动时会自动加载引用的java类。
而我们希望能够动态的加载类,那就可以使用Class.forName了。
故我们可以得到一下的结论:
newInstance: 弱类型。低效率。只能调用无参构造。
   new: 强类型。相对高效。能调用任何public构造。
newInstance()是实现IOC、反射、面对接口编程 和 依赖倒置 等技术方法的必然选择,new 只能实现具体类的实例化,不适合于接口编程。
所以我们在写jdbc时会发现调用数据库驱动程序时,会使用Class.forName()函数了。

http://www.cnblogs.com/vikeria/p/4374973.html

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章