应用程序启动:
java 类名
调用JVM,启动 JVM进程
应用程序结束:
1.所有代码执行完了;
2.有没能 处理 的Exception; Error
3.System.exit(0)
4.运行的平台 强制 结束。
----------------------------------------
类的声明周期:
1.类的加载:
把 类的 字节码文件 加载 到JvM的内存 方法区中,并且 生成 一个 Class类型 的对象。
ClassLoader 加载的
2.连接
1)验证:验证 字节码文件 格式是否正确。
2)准备:为 类变量(静态) 分配空间 默认初始化。
3)解析:把 符号引用 转换(替换成) 直接引用(指针:指向内存地址的指针)。
pulic void run(){ 代码}
3.初始化:为类变量 进行 声明处 和 静态块处初始化。
当创建某个类的新实例时
当调用某个类的静态成员;
当初始化某个子类时,该子类的所有父类都会被初始化。
当使用反射方法强制创建某个类或接口的对象时
当虚拟机java命令运行启动类
--------------------------------------------------
类加载器:
1.根类加载器
加载核心类库
D:\Java\jdk1.8.0_144\jre\lib
C++写的
2.扩展类加载器
加载 扩展类库
D:\Java\jdk1.8.0_144\jre\lib\ext
3.系统类加载器(应用类加载器)
classpath路径下的类 .
4.自定义类加载器
路径 不是classpath路径
------------------------------------------------
父类 委托 机制 (双亲)
Student.class
1.查找 此类 是否 已经被加载过 ,已经加载过了,就返回Class对象
2.系统类加载器先不加载,父加载器(扩展类加载器) 是否存在;存在 ,父加载器(扩展类加载器) 递归调用 父加载器 (根类加载器) 加载;如果 根类加载器 能加载 ,就返回 Class对象,如果不能加载,返回扩展类加载器加载 ,能加载 返回 Class对象, 不能加载,用系统类加载器加载。
3.系统类加载器先不加载,父加载器(扩展类加载器) 是否存在;不存在,请求 根类加载器加载,能加载 返回 Class类型对象,不能,自己加载。
-------------------------------------------------
反射:从 方法区的 字节码中 动态的获得 类中的信息。
获得:
属性:
getDeclaredFields()获得所有属性(包括私有)
getName() 获得名字
getType() 获得类型
getModifiers() 获得访问修饰符
set() 给属性赋值
get() 获得属性值
方法:
getDeclaredMethods() 获得所有方法
getReturnType() 获得返回类型
getParameterTypes() 获得参数列表
invoke() 调用方法
构造:
getDeclaredConstructors()所有构造器
newInstance() 调用构造器
------------------------------------------------------------------
注解:从JDK5开始, Java增加了对元数据(MetaData)的支持,就是注解Annotation;注解是指代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。
@interface 注解名{
//成员变量,类型参数
public
默认
public 类型 名();
public 类型 名() default 默认值;
}