Java知识储备


1,关于 . java文件 规定:第一行为 package name; 表示该.java文件属于哪一个包。 一个.java文件中可以有多个类,但是只能有一个public类,并且这个public类必须与.java文件名一样(区分大小写)。   2,package(包) 概念:package表示包,类似于文件夹。 ··· 注意:如果一个.java文件声明了package,在使用javac编译时要使用带包编译即:javac -d . name.java,否则在执行.class文件时会报错(找不到或无法加载主类)。 ··· package的命名规范为域名倒置,例如:com.company.department.group.project.module;逐步细化。   3,CLASSPATH和JAVA_HOME的作用 classpath是java编译后生成的.class文件的存放位置,默认为 . 即在当前目录下生成.class文件,java1.6后不用配置。 java_home是java安装目录的根目录。   4,类加载 ··· 概念: JVM首次使用某个类时,需要通过CLASSPATH查找该类的.class文件,并将.class文件中对类的描述加载到内存中,进行保存(如:包名,类名,父类名,属性,方法,构造方法等)。 ··· 何时加载     · 被动加载:创建对象,创建子类对象,访问静态属性,调用静态方法。     · 主动加载:Class.forName("全限定名");  // 类似于反射。 ··· 注意:     · 类加载时使用“双亲委派机制”,首先通过启动器和标准扩展查看是不是就java.lang包下的类,如果不是,再用系统类加载器加载用户定义的类。这样可以防止黑客修改lang包下的类。     · 可以通过类加载器隔离加载的类,比如一个Tomcat可以部署多个项目时,就是通过类加载器隔离不同项目中加载的类。   5,代码块 ··· 静态代码块:类加载的时候执行(且只会执行一次),可以用来初始化静态属性。 // stataic{} ··· 动态代码块:对象创建的时候执行,类似于构造方法。 ··· 方法中的代码块:用来隔离变量的作用域。   6,创建对象时的执行步骤 ··· 类加载(如果类还没有加载):     初始化静态属性;     执行静态代码块; ··· 对象初始化(执行构造方法):     初始化实例属性;     执行动态代码块;     执行构造方法中的内容;   注意事项     · 构造方法不能递归调用。     · idea中把jar添加到Modules,其实就是在执行java命令时,把jar包的路径添加到-classpath参数中。-classpath就是启动JVM时这个程序所有的 .class文件所在的目录,然后找到入口main方法开始执行。     · Runtime.getRuntime().addShutdownHook(new Thread)可以添加一个钩子,当JVM退出时,会执行这个线程。