Method 'initializationerror' not found.Opening the test classs JUnit4单元测试报错问题解决办法(图文详解)...

 

   不多说,直接上干货!

 

 

 

 

   问题现象

  今天使用JUnit 4进行单元测试时,测试程序一直运行不起来,报method initializationerror not found错误,如下:

 

 

 

 

 

 

 

 

  问题分析

  网上说版本不对,我试了试,还是有这个问题,后来才知道,缺少了jar包,除了引入junit-4.12.jar之外,还要引入2个依赖jar包:hamcrest-core-1.3.rc2.jar,hamcrest-library-1.3.rc2.jar,提供大家免费的下载链接:

 

  三个汇总下载:

https://download.youkuaiyun.com/download/u010106732/10378280

 

 

 

 

    变成            

 

 

  导入这些jar包之后,问题游刃而解,是的,我承认自己也是JUnit新手吐舌头

       至于JUnit的jar包和hamcrest的jar包关系,下边我引用一位网友的几段话来解释解释:

junit和hamcrest是两个不同的框架,不同的东西。只不过是junit使用了hamcrest框架而已。

在junit上下载的junit的包解压开见下图:

刚下载的JUnit的jar包解压开的文件。

junit-4.10.jar  :包含junit-dep-4.10.jar全部内容和必要的harmcres的包,

junit-4.10-src:是源代码,但不包含org.harmcres.*相关的源代码(在图中temp.hamcrest.source中)。

junit-dep-4.10.jar :是junit的包,不含harmcres的相关的类,import此包还需引入harmcres相关的包。

 

下载到关于hamcrest的相关的一系列的包(如果是java就下载jar的包)

hamcrest-all-1.3.ORC2.ajr:几乎包含所有的hamctest的类(没有验证过)。

hamcrest-core-1.3.ORC2.jar:hamcrest的核心包,使用hamcrest框架必须引入的包。(junit官方给的包就包含了该包)

hamcrest-library-1.3.ORC2.jar:包含各种断言,补充hamcrest core包中的断言。

 

使用是导入包的方案:junit.jar + hamcrest-core.jar + hamcrest-library.jar

或者是:junit-dep.ajr+hancrest-all.jar

这两种导入方法虽然尽量避免了导入重复的包,但使用时还是遇到了冲突。查看包中各类和文档后发现有些类(例如:断言is())同时出现在了org.hamcrest.Mathchers和org.hamcrest.core中,则在用到时候引入的时候需要注意。

 

 

 

 

 

 

 

 

欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑
 
 
 

同时,大家可以关注我的个人博客

   http://www.cnblogs.com/zlslch/   和     http://www.cnblogs.com/lchzls/      http://www.cnblogs.com/sunnyDream/   

   详情请见:http://www.cnblogs.com/zlslch/p/7473861.html

 

  人生苦短,我愿分享。本公众号将秉持活到老学到老学习无休止的交流分享开源精神,汇聚于互联网和个人学习工作的精华干货知识,一切来于互联网,反馈回互联网。
  目前研究领域:大数据、机器学习、深度学习、人工智能、数据挖掘、数据分析。 语言涉及:Java、Scala、Python、Shell、Linux等 。同时还涉及平常所使用的手机、电脑和互联网上的使用技巧、问题和实用软件。 只要你一直关注和呆在群里,每天必须有收获

 

      对应本平台的讨论和答疑QQ群:大数据和人工智能躺过的坑(总群)(161156071) 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/zlslch/p/8961587.html

<think>好的,用户现在想了解Java.lang.Class类的元素组成或结构。首先,我需要回顾一下之前提供的引用内容。引用[1]提到Class类的实例表示正在运行的Java应用程序中的类和接口,包括枚举、注释、数组以及基本类型和void。引用[2]涉及Element接口,表示程序元素如包、类或方法,属于语言级别结构。引用[3]是一个测试类的例子,包含注解和方法。 用户之前的问题是关于使用JVisualVM或Arthas监控哈希表性能,现在转向了Java类的结构,特别是Class类。这可能是因为他们在进行性能监控或代码分析时,需要更深入理解类结构的信息。因此,用户可能是一位Java开发者,涉及底层原理或工具使用,比如诊断工具或反射机制。 接下来,我需要确定Java.lang.Class的结构组成。根据Java文档,Class类提供了类名、修饰符、字段、方法、构造器、父类、接口、注解等信息。这些都是反射的关键部分。引用[1]提到Class对象代表各种类型,包括基本类型和数组,这可能与Class类中的元素相关。 用户可能需要这些信息来理解如何通过反射获取类信息,或者在进行动态分析、监控时,如何利用Class类的方法。结合之前的Arthas和JVisualVM的使用,用户可能想通过工具获取类的内部结构,比如监控某个类的字段变化或方法调用。 需要确保回答结构清晰,分点说明Class类的组成,并结合反射API示例,帮助用户理解如何实际操作。还要注意引用之前的引用内容,比如引用[1]中提到的Class对象涵盖的类型,以增强回答的相关性。 最后,生成的相关问题需要引导用户深入理解Class类的应用,比如反射机制、动态代理或与JVM监控工具的结合使用,这样能够延续用户之前的问题脉络,提供连贯的学习路径。</think>### Java.lang.Class 类的元素组成与结构分析 Java 的 `java.lang.Class` 类是反射机制的核心,其结构包含类的元数据信息。以下是其核心组成要素的详细说明: --- #### **1. 基础元数据** - **类名与修饰符** 通过以下方法获取: ```java String className = clazz.getName(); // 全限定类名(如 "java.util.HashMap") int modifiers = clazz.getModifiers(); // 修饰符(public/private/static等) boolean isInterface = clazz.isInterface();// 是否为接口 ``` 修饰符可通过 `Modifier.toString(modifiers)` 解析为可读字符串[^1]。 --- #### **2. 类结构信息** - **字段(Field)** 表示类的成员变量(包括继承的公共字段): ```java Field[] fields = clazz.getDeclaredFields(); // 获取所有声明字段(包括私有) Field publicField = clazz.getField("fieldName"); // 获取特定公共字段 ``` - **方法(Method)** 包含类定义的所有方法(包括继承的公共方法): ```java Method[] methods = clazz.getDeclaredMethods(); // 所有声明方法(包括私有) Method publicMethod = clazz.getMethod("methodName", ParameterTypes.class); ``` - **构造器(Constructor)** 描述类的实例化方式: ```java Constructor<?>[] constructors = clazz.getDeclaredConstructors(); ``` --- #### **3. 继承与实现关系** - **父类与接口** ```java Class<?> superClass = clazz.getSuperclass(); // 直接父类 Class<?>[] interfaces = clazz.getInterfaces(); // 实现的接口 ``` 通过递归遍历可获取完整继承链[^1]。 --- #### **4. 注解信息** - **类/方法/字段注解** 通过反射获取注解元数据(如示例中的 `@Yts` 和 `@HelloWorld`)[^3]: ```java Annotation[] annotations = clazz.getAnnotations(); // 类级别注解 Annotation methodAnnotation = method.getAnnotation(HelloWorld.class); // 方法注解 ``` --- #### **5. 类型与泛型** - **类型参数** 支持泛型类型的解析: ```java TypeVariable<Class<?>>[] typeParams = clazz.getTypeParameters(); // 泛型参数(如 List<T> 中的 T) ``` --- #### **6. 特殊类型支持** - **数组与基本类型** `Class` 对象可表示数组和基本类型(如 `int.class`),通过以下方法判断: ```java boolean isArray = clazz.isArray(); // 是否为数组 boolean isPrimitive = clazz.isPrimitive(); // 是否为基本类型(如 int) ``` 例如,`int[].class` 表示整型数组的 `Class` 对象[^1]。 --- ### **结构示意图** ``` java.lang.Class ├── 元数据(名称、修饰符、包路径) ├── 字段(Field[]) ├── 方法(Method[]) ├── 构造器(Constructor[]) ├── 继承关系(父类、接口) ├── 注解(Annotation[]) └── 类型信息(泛型、数组、基本类型) ``` --- ### **实际应用示例** 通过反射遍历类的结构(结合引用[3]中的 `SayHell` 类): ```java Class<?> clazz = SayHell.class; System.out.println("类名:" + clazz.getName()); System.out.println("注解:" + Arrays.toString(clazz.getAnnotations())); Arrays.stream(clazz.getDeclaredMethods()) .forEach(method -> System.out.println("方法:" + method.getName())); ``` --- #### **相关问题** 1. 如何通过反射动态修改类的私有字段值? 2. Java 泛型类型擦除对 `Class` 对象有什么影响? 3. 如何利用 `ClassLoader` 加载自定义类并获取其结构信息?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值