- 浏览: 318463 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (262)
- Java (20)
- 设计模式 (16)
- Oracle (13)
- Struts (1)
- 问题解决 (9)
- ibatis (2)
- Maven (5)
- Git (2)
- 实现原理 (6)
- 敏捷开发 (22)
- Spring (4)
- 算法 (8)
- MySQL (2)
- Java工具箱 (17)
- jQuery (1)
- 英语学习 (8)
- 杂谈 (15)
- 多线程 (15)
- Java解惑 (7)
- Linux (1)
- 重构36计 (6)
- 网络 (4)
- PHP (1)
- Socket (6)
- 面试 (1)
- JVM (14)
- 历史与故事 (5)
- 报表 (4)
- CMS (3)
- Windows (1)
- nginx (5)
- 架构设计 (7)
- RubyOnRails (2)
- Hadoop (8)
- Go (7)
- JS (1)
- Web (1)
- 项目实例 (5)
- ubuntu (4)
最新评论
-
jacking124:
按照你这个配置以后提示这个异常?Exception occur ...
Go语言学习:开发环境搭建及Hello World -
焦志广:
有请看http://jiaozhiguang-126-com. ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
w156445045:
Hadoop 有没windows环境下的配置呢,
谢谢。非常感 ...
Hadoop白皮书(1):分布式文件系统HDFS简介 -
xiangxm:
学习了。
Java 解惑知多少六 -
焦志广:
xhh_lite 写道怎么少了一个类?恩?不少啊,少那个类啊; ...
易学设计模式四 命令模式(Commond)
Java语言允许通过程序化的方式间接对Class进行操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数、属性和方法等。Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方式操作Class对象开辟了途径。
测试结果
brand : 中华 color : 黑色max speed : 200
类装载器ClassLoader
类装载器工作机制
类装载器就是寻找类的节码文件并构造出类在JVM内部表示对象的组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:
[1.]装载:查找和导入Class文件;
[2.]链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的:
[2.1]校验:检查载入Class文件数据的正确性;
[2.2]准备:给类的静态变量分配存储空间;
[2.3]解析:将符号引用转成直接引用;
[3.]初始化:对类的静态变量、静态代码块执行初始化工作。
类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。其中,根装载器不是ClassLoader的子类,它使用C++编写,因此我们在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下的类包。
这三个类装载器之间存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下,使用AppClassLoader装载应用程序的类
本文参考 http://www.iteye.com/topic/1123081
public class Car { private String brand; private String color; private int maxSpeed; public Car(){}; public Car(String brand, String color, int maxSpeed) { this.brand = brand; this.color = color; this.maxSpeed = maxSpeed; } public void introduce() { System.out.println("brand : " + brand + " color : " + color + "max speed : " + maxSpeed); } public String getBrand() { return brand; } public void setBrand(String brand) { this.brand = brand; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getMaxSpeed() { return maxSpeed; } public void setMaxSpeed(int maxSpeed) { this.maxSpeed = maxSpeed; } }
package test.reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectTest { public static Car initCar() throws Throwable { ClassLoader loader = Thread.currentThread().getContextClassLoader(); Class clazz = loader.loadClass("test.reflect.Car"); Constructor cons = clazz.getDeclaredConstructor((Class[])null); Car car = (Car)cons.newInstance(); Method setBrand = clazz.getMethod("setBrand", String.class); setBrand.invoke(car, "中华"); // Method setColor = clazz.getMethod("setColor", String.class); // setColor.invoke(car, "黑色"); Field colorFld = clazz.getDeclaredField("color"); colorFld.setAccessible(true); colorFld.set(car, "黑色"); Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class); setMaxSpeed.invoke(car, 200); return car; } public static void main(String [] args) throws Throwable { Car car = initCar(); car.introduce(); } }
测试结果
brand : 中华 color : 黑色max speed : 200
类装载器ClassLoader
类装载器工作机制
类装载器就是寻找类的节码文件并构造出类在JVM内部表示对象的组件。在Java中,类装载器把一个类装入JVM中,要经过以下步骤:
[1.]装载:查找和导入Class文件;
[2.]链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的:
[2.1]校验:检查载入Class文件数据的正确性;
[2.2]准备:给类的静态变量分配存储空间;
[2.3]解析:将符号引用转成直接引用;
[3.]初始化:对类的静态变量、静态代码块执行初始化工作。
类装载工作由ClassLoader及其子类负责,ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入Class字节码文件。JVM在运行时会产生三个ClassLoader:根装载器、ExtClassLoader(扩展类装载器)和AppClassLoader(系统类装载器)。其中,根装载器不是ClassLoader的子类,它使用C++编写,因此我们在Java中看不到它,根装载器负责装载JRE的核心类库,如JRE目标下的rt.jar、charsets.jar等。ExtClassLoader和AppClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的JAR类包;AppClassLoader负责装载Classpath路径下的类包。
这三个类装载器之间存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下,使用AppClassLoader装载应用程序的类
本文参考 http://www.iteye.com/topic/1123081
发表评论
-
Easy Explorer 插件安装 下载
2015-02-06 10:37 1597Easy Explorer是一个Eclipse插件,主要用于快 ... -
位运算
2012-11-15 10:48 760一、位运算符C语言提供了六种位运算符: & 按位与 ... -
Java API Design Guidelines
2012-11-14 20:00 1014ref:http://www.artima.com/weblo ... -
代码的味道
2012-11-17 18:50 736什么时候需要Refactoring? ... -
如何提高代码质量三 可变更性
2012-11-11 14:21 1055c. 适配器模式 我 ... -
如何提高代码质量二 可维护性
2012-11-11 14:21 15642. 可维护性 软件的 ... -
如何提高代码质量一 可读性
2012-11-11 14:21 1029高质量代码的三要素 ... -
生成Myeclipse的注册码
2012-10-17 11:30 0public class MyEclipseGen { ... -
总结一下 Spring的IOC、DI
2012-10-14 21:16 917国庆节刚过,应一些朋 ... -
位运算符在Java编码中的两个应用
2012-10-03 22:27 1034位运算符用于处理整型 ... -
java关键字——strictfp
2012-10-01 10:30 868strictfp, 即 strict float point ... -
Java 异常处理
2012-09-21 16:06 1210为什么要在J2EE项目中谈异常处理呢?可能许多java初学者 ... -
String,StringBuffer与StringBuilder的区别
2012-09-18 18:03 577String 字符串常量 StringBuffer字符串变量( ... -
Java NIO缓冲区内部实现机制
2012-09-17 14:03 839缓冲区内部实现 ... -
Java NIO核心概念及基本读写
2012-09-15 23:30 16311. 引言 I/O流或者输入/输出流指的是计算机 ... -
Java中十个常见的违规编码
2012-09-12 12:43 702最近,我给Java项目做了 ... -
Java 基本数据类型及运算
2012-09-10 22:09 714基本数据类型 int n = 7, m = ... -
Java 进制转换
2012-09-10 16:03 85710进制转16进制 10转2进制 package com ... -
System.arraycopy方法的使用
2012-09-09 22:08 934package com.jiaozg.test; i ... -
Java 泛型学习
2012-09-05 13:50 793Java泛型由来的动机 理解Java泛型最简单的方法是把它看成 ...
相关推荐
java反射例子,封装了一个反射帮助类,解压,加载到myeclipse上可用;java反射例子,封装了一个反射帮助类,解压,加载到myeclipse上可用;
java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier;
java反射例子.doc 是个小例子.主要是讲反射机制,是java的重要部分.
JAVA反射机制及应用例子.。。Reflection API
Java反射简单例子,给刚刚学习反射的人用...
java学习例子 java java例子 java反射
Java反射案例,可以参考: Java反射机制 - 相关API:https://blog.csdn.net/niuba123456/article/details/85951088
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
Java 8个反射实例 项目实例 项目工程
import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import com.org.entity.User; /** */ public class Test3 { /** * @param args */ public static void main(String[] args) ...
java反射例子
讲解了JAVA中反射机制,包含例子,代码!对初学者很有用
重新学习Spring相关书籍时,看到一些反射的代码例子;分享一下
java反射机制例子
java反射详解,详细说明java反射内部机制,适合初学者。
一个例子8个demo让你了解Java反射机制
Java反射实例,可以给初学反射的同志们一定帮助。一个简单实例,可以更好的理解反射的规矩。
代码主要实现了Java反射应用实例, 包含利用反射方法创建对象(使用默认构造函数和自定义构造函数),访问对应对象的方法(包括带参数的和不带参数的),访问对应对象的域(Field). 从这里可以看到代码的详细解说:...
java reflect Method getDeclaredMethod invoke getConstructor
java 反射使用的整理和委托实现接口反射的例子