java基础-基本环境与类加载及程序运行

基本环境

对于不同操作系统的有不同的jvm,常用的之前是classic,现在常用的是hotspot。

  jdk:java developement kit

  jre:java runtime evoroment

  jvm:java virtual metcial

  

classpath:一个类要用到另一个类到classpath路径中去,在jdk1.5中默认是当前目录下去查询要运行的.class文件

path:在path去找到运行的javac命令

java_home配置好后其它软件运行只需要在%JAVA_HOME%/bin,查找到javac与其它的命令

类加载

   程序运行过程是:ClassLoader将其Load到内存中CodeSegment,运行环境找到main方法开始执行classLoader的类加载机制是并非一次性加载,需要的时候加载(运行期间动态加载)。

class loader的层次关系(不是继承)

  classloader在load class的时候首先找上层是不是load过了,如果已经load了,就不会再此load。因此导致安全性是非常好的,自己写的String.class永远没有机会执行(破坏性代码),即如果重写java.lang.String代码自己的写永远无法执行,因为jre已经load过这个class文件了,加不会加载用户写的java.lang.String文件。所有的classloader都是从classloader这个类继承而来,得到其名称:System.out.println(com.gudai.NumTest.class.getClassLoader().getClass().getName());。

application.classloader中有一个parent引用指向ext class loader而后已此类推。

案例:

  
    分别得到classloader的名称
    得到最开始的classloader
    System.out.println(String.class.getClassLoader());
    得到当前类的classloader即ApplicationClassLoader
    System.out.println(com.gudai.NumTest.class.getClassLoader().getClass().getName());
    得到jre下的classloader
    System.out.println(com.sun.crypto.provider.DESKeyFactory.class.getClassLoader().getClass().getName());

在.java文件中,只能有一个public类。
    
      1.使用命令行的方式
        
        .java文件名如果与主类名中的class文件不同,则运行程序步骤是:
        1.javac 文件名.java
        2.java 主类名

Ps:如果主类是公共的则必须使类名与文件名相同



      2.使用eclipse中书写java文件    

        运行.java文件,如果主类没有没有去写public类型,而且主类文件名与.java程序文件名不同,则会出现运行出错,因为eclipse会去找同名的class文件去运行
        运行步骤是:
        1.javac 文件名.java
        2.java 文件名
    

    注意:最先有数据的是方法区

原文地址:https://www.cnblogs.com/chaojibaidu/p/10554583.html