类加载

java中类的加载方式有两种,分为隐式和显示加载方式。

隐式的 : 使用new关键字让类加载器按需求载入所需的类
显式的 : 由 java.lang.Class的forName()方法加载
由 java.lang.ClassLoader的loadClass()方法加载
(1) 使用Class.forName()
Class.forName()方法具有两个重载的方法:
public static Class forName(String className)
public static Class forName(String className, boolean initialize,ClassLoader loader)
参数说明:
className - 所需类的完全限定名
initialize - 是否必须初始化类(静态代码块的初始化),默认情况为true,当设置为false时将不执行静态代码块的初始化
loader - 用于加载类的类加载器
public class Main3 {   
public static void main(String[] args) throws Exception {
Class clazzA = Class.forName(args[0]);
System.out.println("实例化类A");
A o1 = (A) clazzA.newInstance();
}
}

(2) 直接使用类加载器
获得对象所属的类 : getClass()方法
获得该类的类加载器 : getClassLoader()方法
public class Main3 {   
public static void main(String[] args) throws Exception {
Main3 main3 = new Main3();
System.out.println("准备载入类");
ClassLoader loader = main3.getClass().getClassLoader();
Class clazzA = loader.loadClass(args[0]);
System.out.println("实例化类A");
A o1 = (A) clazzA.newInstance();
}
}


动态加载jar
jar包读取:
JarFile jar = new JarFile("test.jar");
//从jar文件输入流中获取类信息
InputStream in = jar.getInputStream(jar.getEntry("META-INF/plugin.xml"));


URL jarFileUrl = new URL("file:d:\\projects\\test.jar");
URLClassLoader classLoader = new URLClassLoader(new URL[] {jarFileUrl});
//动态加载jar包中的类
Class clazz = classLoader.loadClass("ExampleClass");
//反射得到方法
Method method = clazz.getDeclaredMethod("example", null);
//反射执行方法
method.invoke(clazz.newInstance(), null);

java提供了三种ClassLoader
l.系统类加载器
2.当前类加载器
3.当前线程加载器
URLClassLoader默认情况使用系统类加载器来进行加载,但是在web应用中时需要定义使用当前线程类加载器来加载类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值