什么情况下使用ClassLoader来加载类?其实这个问题应该问,什么时候使用import来加载类,不能使用import的,就只能使用ClassLoader了。

使用import的条件:

1.必须是存在本地的,当程序员需要这个类的时候,内部类装载器会自动装载该类,对程序员来说是透明的。

2.编译的时候必须在现场,否则编译器会因为找不到引用文件而不能正常的编译。

ClassLoader分为3种,用一个简单的例子来说明:

    public static void printClassLoader(){
ClassLoader loader = Thread.currentThread().getContextClassLoader();
System.out.println("loader = " + loader.getClass());
System.out.println("loader parent = " + loader.getParent().getClass());
System.out.println("loader parent parent = " + loader.getParent().getParent());
}

loader = class sun.misc.Launcher$AppClassLoader
loader parent = class sun.misc.Launcher$ExtClassLoader
loader parent parent = null

分别是: AppClassLoader,ExtClassLoader,BootClassLoader。从上面的代码可以看到继承关系。

Class反射则是对象描述类语义结构,在java.reflect包中,主要是3个反射类:Constructor,Method,Field。

我们有一个Car类

public class Car {
private String name; public Car(){ } public void showName(){
System.out.println("name = " + name);
}
}

里面比较坑的是,有name属性,但是没有提供修改的办法,我们可以用反射来修改。

  public static void getColor(){
ClassLoader loader = Thread.currentThread().getContextClassLoader();
try{
Class clazz = loader.loadClass("Car");
Object car = (Object)clazz.newInstance(); Field name = clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(car,"carry");//在这里修改属性 Method method = clazz.getMethod("showName");
method.invoke(car,(Object[])null); }catch(Exception e){
System.out.println(e.toString());
}
}

这是平时写代码的时候,比较有用的技巧。

最新文章

  1. C#把 DataTable转换为Model实体
  2. Markdown编辑器入门
  3. 【原创】Android selector选择器无效或无法正常显示的一点研究
  4. jquery插件链接
  5. Collections的应用
  6. 转:通过代码理解Asp.net4中的几种ClientIDMode设置.
  7. 一道关于java 类初始化 成员初始化的笔试题的解析
  8. 69个spring面试题及答案
  9. Delphi TStringList的用法
  10. 手动同步chrome浏览器
  11. SQL Server 2008数据库的一些基本概念 区、页、行
  12. C语言之linux内核--BCD码转二进制与二进制转BCD码(笔试经典)
  13. WBS 与 甘特图
  14. Redis的过期策略和内存淘汰机制
  15. 输出列表为字符串,并在最后一个值前加上and 4.10.1
  16. 【Spring】SpringMVC非注解配置的两种方式
  17. 【吉比特】G-bits2018校园春季招聘技术类岗位笔试经验
  18. 新型智能芯片nxp----嗯质朴
  19. igraph Tutorial
  20. 【前端自动化构建 grunt、gulp、webpack】

热门文章

  1. algorithm@ Divide two integers without using multiplication, division and mod operator. (Bit Operation)
  2. Java中HashMap和TreeMap的区别深入理解
  3. Java网络编程(UDP协议-聊天程序)
  4. 第十一章、认识与学习 BASH 数据流重导向
  5. 只允许input框输入数字,输入其他的键的时候,直接不显示的方法
  6. Oracle- PL/SQL DEV的远程配置
  7. sql2008_x64 读取excel
  8. 使用 StoryBoard 的时候加入用户引导页面
  9. IDF实验室-简单的ELF逆向 writeup
  10. 汽车行业DMS系统介绍