java 创建main方法_从java main方法说开去

本文探讨了Java程序的运行流程,从JVM的启动到程序执行。讲解了System.exit()方法如何终止JVM进程,以及异常处理可能导致JVM崩溃的情况。详细介绍了JVM的运行时数据区组成,包括方法区、堆、Java栈等。同时,对比了newInstance()和new关键字在创建对象时的区别,newInstance()适用于动态加载类和接口编程,而new则更适合直接实例化具体类。在Java JDBC中,常使用Class.forName()来加载数据库驱动。

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

众所周知,当执行一个java程序时,首先会启动一个JVM虚拟机进程,当程序执行完时,JVM进程则消亡。其他导致JVM进程消亡的还有以下情况:

System.exit(int)方法,执行该方法时,虚拟机腿粗好。int参数为状态码,为0时,正常退出;若不为0,则异常退出。

遇到异常或错误时。若在程序过程中遇到异常时,不作处理会一直抛出异常到main函数,若main函数也未处理,则会抛出给JVM,若JVM处理不了该异常时,则JVM崩溃。

JVM所依赖的平台发生错误。

0_1285381395C6iW.gif

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()函数了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值