`
dylan0514sina.cn
  • 浏览: 94949 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

类层次结构中的引用关系必须在同一ClassLoader下

    博客分类:
  • any
 
阅读更多
编写接口
/*
 * Copyright (c) 2008 Skyon Technology Ltd.
 * All rights reserved.
 *
 * project: ims
 * create: 2013-6-7
 * cvs: $Id: $
 */
package com.skyon.cl.test;

/**
 * TODO (2013-6-7 上午10:27:23) 请添加 A 类的注释。
 * @author dylan0514 
 * @version $Revision: 1.1 $
 */
public interface A {

}

实现类
/*
 * Copyright (c) 2008 Skyon Technology Ltd.
 * All rights reserved.
 *
 * project: ims
 * create: 2013-6-7
 * cvs: $Id: $
 */
package com.skyon.cl.test;

/**
 * TODO (2013-6-7 上午10:28:26) 请添加 AImpl 类的注释。
 * @author dylan0514 
 * @version $Revision: 1.1 $
 */
public class AImpl implements A {

}

将AImpl打成JAR包,放置于c:/下
测试类
/*
 * Copyright (c) 2008 Skyon Technology Ltd.
 * All rights reserved.
 *
 * project: ims
 * create: 2013-6-7
 * cvs: $Id: $
 */
package com.skyon.cl.test;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

/**
 * TODO (2013-6-7 上午10:27:06) 请添加 ClassloaderTest 类的注释。
 * @author dylan0514 
 * @version $Revision: 1.1 $
 */
public class ClassloaderTest {

	/**
	 * @param args
	 * @throws MalformedURLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public static void main(String[] args) throws MalformedURLException, ClassNotFoundException, InstantiationException, IllegalAccessException {
		// TODO (2013-6-7 上午10:27:06) 自动生成方法存根
		
		URLClassLoader url = new URLClassLoader(new URL[]{new URL("file:///c:/test.jar")},null);
	    Class azz = (Class) url.loadClass("com.skyon.cl.test.AImpl");
	    System.out.println(A.class.isAssignableFrom(AImpl.class));
	    System.out.println(A.class.isAssignableFrom(azz));
	    System.out.println(azz == AImpl.class);
	    A a = (A) azz.newInstance();
	    System.out.println("azz:"+azz.getClassLoader()+" A:" + A.class.getClassLoader() +" AImpl:"+AImpl.class.getClassLoader());
	}

}

运行结果:
true
false
false
Exception in thread "main" java.lang.ClassCastException: com.skyon.cl.test.AImpl cannot be cast to com.skyon.cl.test.A
at com.skyon.cl.test.ClassloaderTest.main(ClassloaderTest.java:37)

结果可证明接口引用与实现类处于不同ClassLoader不能兼容
0
4
分享到:
评论

相关推荐

    java classLoader 的全面讲解

    1. 类加载器的层次结构:在Java中,类加载器形成了一个树形结构,通常由Bootstrap ClassLoader(引导类加载器)、Extension ClassLoader(扩展类加载器)和App ClassLoader(应用程序类加载器)组成。Bootstrap加载...

    JVM底层原理课件PPT

    1. **启动类加载器(Bootstrap ClassLoader)**:负责加载存放在`<JAVA_HOME>\lib`目录中的,或者被`-Xbootclasspath`参数所指定的路径中的,并且能够被虚拟机识别的类库。 2. **扩展类加载器(Extension ...

    网易校园招聘笔试题目

    1. Java引用和对象:题目中,var1和var2都引用了Integer对象1,但在doSomething方法中,var2的引用被改变指向了新的Integer对象2,但var1未变。因此,最后输出为1true,对应选项A。 2. 内部类:内部类的声明应该...

    java词汇解释

    子类/派生类,是指在一个继承关系中继承其他类的类。子类继承了父类的特征,并可以扩展或重写父类的行为。 #### override 重写,是指子类中重新定义父类的方法,以实现不同的功能或行为。重写方法需要与父类的方法...

    Top 1000 Java Interview Questions

    - 组合是一种结构化设计模式,它允许将对象组合在一起形成树形结构来表示整体/部分层次结构。 - 组合使客户端能够一致地使用单个对象和组合对象。 26. **聚合与组合的不同之处:** - **组合:** 表示“整体拥有...

    java高级工程师-笔试题及答案.docx

    - **类加载器的层次结构:** Java 中存在多种类加载器,如`Bootstrap ClassLoader`、`Extension ClassLoader`和`Application ClassLoader`,它们形成了一个层次结构,用于加载不同类型的类。 #### 7. 堆内存与栈...

    JAVA面试题集

    2. 异常类层次结构: Java的异常都是从`java.lang.Throwable`类派生的,分为两种主要类型:`Error`和`Exception`。`Error`通常表示系统级的错误,如虚拟机错误,一般程序员无法恢复。`Exception`则代表程序运行时的...

    Java就业面试题264道(独家奉献)

    - 可以在一个`.java`文件中定义多个类,但是只能有一个公共类,并且该文件名必须与公共类的名字完全一致。 - 非公共类的数量则不受限制。 **3. Java有没有goto?** - Java中没有传统意义上的`goto`语句,但在某些...

    Java笔试题(含答案)

    - Java的ClassLoader有层次结构,用于加载类。 - `Class.forName()`可以动态加载类,不同ClassLoader加载同一类会产生不同的类对象。 14. **构造方法**: - 构造方法的名字必须与类名相同,无返回类型声明,可以...

    2012java面试题

    - 类加载器:Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader负责加载不同层次的类。 8. **设计模式** - 创建型模式:单例、工厂、抽象工厂、建造者、原型。 - 结构型模式:适配器、装饰器、...

    超级有影响力霸气的Java面试题大全文档

     声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,...

    方立勋JavaWeb ppt、代码

    - **导航操作**:如Ctrl + K 快速定位到某一行,Ctrl + T 查看类层次结构。 - **编辑操作**:例如Ctrl + C 复制选中的代码段,Ctrl + V 粘贴代码等。 #### JUnit 测试框架 **3.1 JUnit 简介** JUnit 是一个用于...

    java面试题题库详解

    - **异常类层次结构:** `Throwable` 是所有异常类的父类,包括 `Error` 和 `Exception`。 - **自定义异常:** 如何定义自己的异常类。 #### 4. Java中的访问修饰符(public, private, protected, 默认) **知识点...

Global site tag (gtag.js) - Google Analytics