- 浏览: 459724 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
syw19901001:
30多条mysql数据库优化方法,千万级数据库记录查询轻松解决 ...
MYSQL的全表扫描,主键索引(聚集索引、第一索引),非主键索引(非聚集索引、第二索引),覆盖索引四种不同查询的分析 -
gaoyuanyuan121:
直接改成root.war,根路径能访问,项目路径也能访问,赞 ...
jetty 中如何设置root app -
freezingsky:
翻出来,再看一次!
AOP 的简单入门 -
Shen.Yiyang:
inter12 写道Shen.Yiyang 写道我说的不是NI ...
ReentrantLock、sync、ReentrantReadWriteLock性能比较 -
inter12:
Shen.Yiyang 写道我说的不是NIO和BIO的区别,而 ...
ReentrantLock、sync、ReentrantReadWriteLock性能比较
Class类之主要方法简介
Class<?> cls = String.class;
一)类自身的信息
1. 包路径 cls.getPackage();
2. 类名 cls.getName();cls.getSimpleName();
3. 类修饰符 cls.getModifiers();
4. 类属性 cls.getFields();cls.getDeclaredFields();
5. 类方法 cls.getMethods();cls.getDeclaredMethods();
6. 类构造器 cls.getConstructors();
7. 标注信息 cls.getAnnotations();
8. 是否为基本类型数据 cls.isPrimitive();
9. 获得系统类的 getClassLoader(); 这个也较为常用,加载类的时候
获取资源信息
获取方法:
1.object.getClass().getDeclaredMethods() : 会方式所有定义的 public, protected, default private访问权限的方法,但是不会取父类的方法或继承之父类的方法
2.object.getClass().getMethods():会取得所有自身类及父类中所有定义的方法
从上面我们可以看出,一般在对于方法的操作我更多是采用第一个方法,做一些属性的COPY,或是方法的调用!较少用到第二个方法!
同理 getFields() && getDeclaredFields() 也是一样的原理.
二)获取资源的信息
cls.getResource("http://xx/xx");
cls.getResourceAsStream("xx.properties");
判断一个方法的修饰符
Modifier.isPublic(method.getModifiers());
Modifier.isAbstract(method.getModifiers());
Modifier.isInterface(method.getModifiers());
Modifier.isFinal(method.getModifiers());
Modifier.isNative(method.getModifiers());
Modifier.isPrivate(method.getModifiers());
那么在Class类操作过程中产生的Field Method 都可以通过这getModifiers()配合Modifier来得到属性或是方法的修饰符
Field :
1.获得修饰符 field.getModifiers();
2.获取基本的类型的值
field.getBoolean(obj);
field.getInt(obj);
field.getDouble(obj);
......
3.获得在属性中的标注 这个特性在1.5版本以后添加,CLASS,METHOD,FIELD 都存在 field.getAnnotations();
Method :
1.返回类型 method.getReturnType();
2.参数类型 method.getParameterTypes();
3.名字 method.getName();
4.修饰符 method.getModifiers();
5.标注 method.getAnnotations();
6.反射调用方法 method.invoke(obj, args);也是最为关键的一个方法
package com.inter12.test.myclass; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * TODO Comment of MyBeanUtil * * @author inter12 */ public class MyBeanUtil { private static final String SET = "set"; private static final String IS = "is"; private static final String GET = "get"; public Object beanCopy(Object sourceObject, Class<?> targetClass) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { // 将目标对象的所有SET方法组转成 name-method 的MAP Map<String, Method> targetMethodMap = getTargetMethodMap(targetClass); Object targetObject = targetClass.newInstance(); Method[] sourceMethods = sourceObject.getClass().getDeclaredMethods(); for (Method m : sourceMethods) { // 要求时PUBLIC 且无参的方法 if (Modifier.isPublic(m.getModifiers()) && m.getParameterTypes().length == 0) { // 根据源对象中的get方法,匹配目标对象中是否存在对应的SET方法之,若是无返回NULL String methodName = getMethodName(m); if (targetMethodMap.containsKey(methodName)) { // 源对象的值 Object sourceValue = m.invoke(sourceObject, (Object[]) null); // 设置到目标对象 Method targetMethod = targetMethodMap.get(methodName); targetMethod.invoke(targetObject, new Object[] { sourceValue }); } } } return targetObject; } private String getMethodName(Method m) { String methodName = null; if (m.getName().startsWith(GET)) { methodName = SET + m.getName().substring(3, m.getName().length()); } else if (m.getName().startsWith(IS)) { methodName = SET + m.getName().substring(2, m.getName().length()); } return methodName; } private Map<String, Method> getTargetMethodMap(Class<?> targetClass) { Map<String, Method> methodMap = new HashMap<String, Method>(); Method[] targetMethods = targetClass.getDeclaredMethods(); if (null != targetClass && 0 != targetMethods.length) { for (Method method : targetMethods) { if (method.getName().startsWith(SET)) { methodMap.put(method.getName(), method); } } } return methodMap; } public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { Student student = new Student("xzm", true, 27, new Address("hz")); student.setBirthDay(new Date(2011, 11, 1)); MyBeanUtil myBeanUtil = new MyBeanUtil(); Object beanCopy = myBeanUtil.beanCopy(student, BakStudent.class); System.out.println(beanCopy.toString()); } }
- classtest.zip (11.7 KB)
- 下载次数: 4
发表评论
-
if语句的写法之普通,文艺,2B青年写法
2011-12-08 21:21 1940最近这段时间在处理一个项目迁移,结果有大量的时间在写迁移代码。 ... -
Collections.EMPTY_LIST和Collections.emptyList()简单使用体会
2011-04-29 10:57 51011.背景 在某些情况下, ... -
JAVA SAX解析
2010-09-17 15:29 3910java sax 解析 JAVA 解析 XML 通常有两种方 ... -
多线程笔记--2
2010-07-30 17:19 107711, 在没有同步的情况下 , 编译器与处理器运行时的指令执行 ... -
JDK学习--java.util.concurrent.ConcurrentMap输出及输入
2010-07-30 17:14 2626新的 java.util.concurrent.Concurr ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:12 1004PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:11 1182PriorityBlockingQueue 是具有无界限容量的 ... -
JDK学习--java.util.concurrent阻塞队列--1
2010-07-30 17:10 2059Tiger提供的 java.util.concurrent 包 ... -
socket基本通信
2010-07-28 22:33 31851.服务端 while(true){ ... -
java.util.zip
2010-07-19 16:49 1352主要是三个类: ZipOutputStream ... -
java.util.LinkedHashMap (2)
2010-07-19 16:43 1359step 1:建立对象。采用最少访问次数排序。 ... -
java.util.LinkedHashMap (1)
2010-07-19 16:42 3047LinkedHashMap :具有可预知的迭代顺序。区别与Ha ... -
java比较器的两种实现
2010-07-19 14:48 18211 实现一个Comparator 接口 public cl ... -
java.util.IdentityHashMap
2010-07-19 14:47 1711Map<Object, String> map = ... -
java.util.Arrays
2010-07-19 14:47 1299一些基本常用的方法: 一. 数组中的查找: ... -
apache 处理目录
2010-07-19 10:22 992private static class MyWalk ... -
一些core java知识
2010-07-19 10:05 10751. 对于url中需要转化的# %符号,可以采用base64编 ... -
xstream基本使用
2010-07-19 10:03 1386一个配置文件 <?xml version ... -
java基本概念--对象序列化及反序列化
2010-07-19 09:43 1550序列化(一): readResolve()方法与序列化 在CJ ... -
java基本概念--集合选择
2010-07-19 09:38 1049Arrays和Collections类的设 ...
相关推荐
标题中的问题“scrcpy投屏 AssertionError: java.lang.reflect.InvocationTargetException”是用户在尝试使用Scrcpy时遇到的一个常见错误。这个错误通常意味着在执行某个方法时,Java运行时环境遇到了未预期的情况。...
然而,在运行此插件时,由于某些原因可能会抛出`java.lang.reflect.InvocationTargetException`,这是一个反射调用异常,通常表示在调用某个方法时发生了异常。 `InvocationTargetException`通常作为Java标准库中的...
`org.apache.commons.lang3.reflect.FieldUtils`类则是关于反射操作的工具类,它提供了一些安全且方便的方法来访问和修改对象的字段。这些方法包括但不限于: 1. `getField()`:安全地获取类或对象的字段,即使该...
java.lang.reflect 包提供了用于反射对象的工具,包括类、字段、方法和构造方法的反射。 6. java.awt.image 包 java.awt.image 包处理和操纵来自于网上的图片的Java工具类库,包括图像处理、图像resize和图像滤镜...
4. **`java.lang.reflect.Method`**:表示类的方法。 5. **`java.lang.reflect.Modifier`**:提供对成员的修饰符的访问。 ##### 基本使用方法 1. **获取成员方法信息**: - `Method[] getMethods()`:获取公开的...
这个异常属于`java.lang`包,通常在动态方法调用或反射操作时抛出。当我们试图通过对象实例或类来执行一个在编译时不可见或者不存在的方法时,就会遇到这个问题。下面我们将深入探讨`NoSuchMethodException`的产生...
Java反射(Reflect)是Java语言中的一个重要特性,它允许运行时的Java程序访问、操作类、接口、字段和方法的信息,甚至动态调用方法。在Java编程中,反射提供了强大的能力,可以用来实现一些高级功能,如元编程、...
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....
4. **配置检查**:检查Axis2的配置文件,如services.xml和服务类的部署描述符,确认它们正确无误,没有遗漏或错误的配置。 5. **依赖库版本**:确认所有依赖库的版本与Axis2版本兼容,不兼容的库可能会引发异常。 ...
Java反射机制的实现主要是依赖java.lang.reflect包所提供的类。其中最经常使用的是三个类:java.lang.reflect.Field类、java.lang.reflect.Method类和java.lang.reflect.Constructor类。 Java.lang.reflect.Field...
Java 反射机制的实现是通过 java.lang.Class 类和 java.lang.reflect 包来实现的。Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor ...
`java.lang.reflect` 允许程序在运行时检查类和对象的结构。 `java.math` 包提供高精度的数学运算,如 `BigInteger` 和 `BigDecimal`。 `java.net` 包提供了网络编程的类,如 `Socket`, `ServerSocket`, `URL`。 ...
4. 动态代理:Java的`java.lang.reflect.Proxy`类可以创建动态代理,用于在方法调用前后添加自定义逻辑,比如AOP(面向切面编程)。 5. 框架开发:Spring框架的依赖注入、Hibernate的数据持久化等都大量使用反射技术...
Java.util包包含了大量常用的工具类和集合框架,如List、Map、Set等,是日常开发中最常用的包之一。 #### Java.util.concurrent Java.util.concurrent包自J2SE5起新增,支持并行和并发编程,提供了线程池、锁、信号...
* java.lang.reflect 是 Java 2 Platform 的一部分,提供了类和接口,以获得关于类和对象的反射信息。 20、数学运算:java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类...
Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.Access...
9. **反射:** `java.lang.reflect` 包提供了一系列类和接口,用于获取类的信息,如类名、构造器、方法等,以及动态调用方法和访问属性。 10. **XML处理:** `javax.xml.parsers.DocumentBuilderFactory` 和 `org....
`java.lang.reflect`包是Java反射API的一部分,它允许程序在运行时检查类、接口、字段和方法的元数据。`Modifier`类就是这个包中的一员,它提供了一种方便的方式来处理和解释这些元数据中的访问修饰符,如`public`, ...
- `java.lang.String`:String类是Java中最基础也是最常用的数据类型之一,提供了大量的静态方法进行字符串操作,如`substring()`、`concat()`、`indexOf()`、`replace()`等。 - `java.util.regex`:这个包提供了...