反射的基础: java.lang.Class Class类的实例对象,用于记录类描述信息. 源码说:represent classes and interfaces in a running Java application Class类没有公共的构造方法,无法通过new运算符实例化:只能通过对象的getClass方法,或是通过Class.forName(-)来获得实例. static ClassforName(String className)throws ClassNotFoundExcep…
package chapter7; /** * 初始化及类的加载顺序:顺序如下 * 1.基类的static变量 * 2.导出类的static变量 * 3.基类的变量 * 4.基类的构造函数 * 5.导出类的变量 * 6.导出类的构造函数 */ class Insect { private int i = 9; protected int j; Insect() { System.out.println("i = " + i + ",j = " + j); j = 3…
接下来可以随意提供一个简单的主类,该主类无须编译就可使用上面的CompileClassLoader来运行它. package chapter18; public class Hello { public static void main(String[] args){ for(String arg:args){ System.out.println("运行Hello的参数:" + arg); } } } 无须编译该Hello.java,可以直接使用如下命令来运行该Hello.java程…
JAVA静态代码块会在类被加载时自动执行? 一.先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中,可以将某一块代码声明为静态的,这样的程序块叫静态初始化段.静态代码块的一般形式如下: static { 语句序列 } public class staticBlock{ //定义一个普通的main()方法 public static void main(String args[]){ System.…
JAVA虚拟机系列(一) 类的加载 目录 1 类的初始化过程 2 详解初始化时的各个阶段 一.类初始化的过程 先来看一个CLASS文件在整体生命周期里会遇到的阶段: xxxx.class --->加载---->连接--->初始化---> 使用--->卸载. 我们将会在本章讨论一下xxxx.class--->加载--->连接---->初始化的过程. 讨论的方式采用自问自答模式: 1 首先类什么时候会被加载? 答:这一点JVM并没有强制约束,由不同的JVM供应商…
说到反射,首先说类的加载器. 类的加载: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载: 就是指将class文件读入内存,并为之创建一个Class对象. 任何类被使用时系统都会建立一个Class对象. 连接: 验证 是否有正确的内部结构,并和其他类协调一致 准备 负责为类的静态成员分配内存,并设置默认初始化值 解析 将类的二进制数据中的符号引用替换为直接引用 初始化: 就是我们以前讲过的初始化步骤 类初始化时机: 创建类的实…
1 本文概要 本章介绍Java类的加载.连接和初始化的深入知识,并重点介绍Java反射相关的内容.本章知识偏底层点,这些运行原理有助于我们更好的把我java程序的运行.而且Java类加载器除了根加载器之外,其他类加载器都是使用Java语言编写的,所以我们完全可以开发自己的类加载器,通过使用自定义的类加载器,完成一些特定的功能. 本章重点介绍java.lang.reflect包下的接口和类,包括Class.Method.Field.Constructor和Array,这些类分别代表类.方法.属性.…
类的使用分为三个步骤: 类的加载->类的连接->类的初始化 一.类的加载 当程序运行的时候,系统会首先把我们要使用的Java类加载到内存中.这里加载的是编译后的.class文件 每个类加载到内存中,会创建一个对应的Class对象.这个Class对象保存了这个类有哪些成员(数据成员,方法成员) 注意:这里只有在某个Java类被使用的时候,才会被加载 加载时机:任何用到这个类的时候.(实例化,使用里面的静态静态成员....) 二.类加载器(JVM里面的一个东西) 作用:将.class文件(可能在磁…
首先自定义一个类Person package reflection; public class Person { private String name; public int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int a…
转自http://blog.csdn.net/jamesjxin/article/details/46606307 前言 在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的.我们往…