zoukankan      html  css  js  c++  java
  • 从java main方法说开去(转)

    刚刚接触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

  • 相关阅读:
    DOM
    链接后加"/"与不加"/"的区别
    Tomcat启动脚本catalina.sh
    MVC 之AjaxHelper
    在MVC中使用async和await的说明
    禁用Flash P2P上传
    基于SpringBoot开发一个Restful服务,实现增删改查功能
    JavaScript学习总结
    Spring MVC 学习总结
    JS 将对象转换成字符 字符串转换成json对象
  • 原文地址:https://www.cnblogs.com/softidea/p/5613251.html
Copyright © 2011-2022 走看看