Java反射代码 得到某类的所有字段 getxxx()与getDeclaredxxx()区别
* getFields()与getDeclaredFields()区别:
getFields()只能访问类中声明为公有的字段,私有的字段它无法访问.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关
* getMethods()与getDeclaredMethods()区别:
getMethods()只能访问类中声明为公有的方法,私有的方法它无法访问,能访问从其它类继承来的公有方法.getDeclaredFields()能访问类中所有的字段,与public,private,protect无关,不能访问从其它类继承来的方法
* getConstructors()与getDeclaredConstructors()区别:
getConstructors()只能访问类中声明为public的构造函数.getDeclaredConstructors()能访问类中所有的构造函数,与public,private,protect无关
test:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import sun.reflect.generics.tree.ClassTypeSignature;
public class DumpMethords {
private String info;
private String info1;
private int age;
public DumpMethords(){}
public DumpMethords(String info){ System.out.println(info);}
public void test1(){
}
public void test2(){
}
public void test3(){
}
public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException {
String str = "abc";
//四种获得classObject的方法
//Class classesType = str.getClass();
//Class classesType = Class.forName("java.lang.String");
//Class classesType = String.class;
//Class classesType = Integer.TYPE;
Class classesType = (new DumpMethords()).getClass();
Method methods[] = classesType.getDeclaredMethods();
for(Method m : methods)
System.out.println(m.toString());
Constructor<DumpMethords>[] cs = classesType.getConstructors();
System.out.println("----------------------");
for(Constructor<DumpMethords> c:cs){
System.out.println(c.toString());
}
System.out.println("----------------------");
Constructor<DumpMethords> c = classesType.getConstructor(new Class[]{String.class});
System.out.println(c.toString());
System.out.println("----------------------");
Field[] fields = classesType.getDeclaredFields();
for(Field f:fields){
System.out.println(f.toString());
}
System.out.println("----------------------");
Field[] field = classesType.getFields();
for(Field f:field){
System.out.println(f.toString());
}
System.out.println("--------获得特定方法-----------");
Method sAge = classesType.getMethod("setAge",new Class[]{Integer.TYPE});
Method gAge = classesType.getMethod("getAge",null);
Object[] args1 = new Object[]{new Integer(23)};
Object o = classesType.newInstance();
sAge.invoke(o, args1);
System.out.println(gAge.invoke(o, null));
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getInfo1() {
return info1;
}
public void setInfo1(String info1) {
this.info1 = info1;
}
}
object is not an instance of declaring class 反射异常的解决方法:
第一种:反射执行的方法 setAge() 、getAge() 改成静态的
第二种:在执行方法前先实例化类。m.invoke(classesType,null)改为m.invoke(classesType.newInstance(),null)或者m.invoke(new DumpMethords(),null)
reference:
http://blog.csdn.net/yeson6/archive/2011/01/14/6138963.aspx
http://hi.baidu.com/xfpsh/blog/item/9375da425757071b9313c69b.html
分享到:
相关推荐
下面我们将深入探讨如何利用Java反射API实现这些功能。 首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、...
java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....
10. **新的反射API**:改进了反射机制,提供了更强大的元数据访问能力,比如`MethodHandle`和`MethodType`。 这些只是Java 1.8 API中部分重要的更新,实际上还包括许多其他改进和优化。对于开发者来说,深入理解并...
#### Java反射API的功能 反射API提供了丰富的功能,使得开发者能够: - 决定对象的类。 - 获取类的修饰符、字段、方法、构造器和超类信息。 - 查找接口声明的方法或常量。 - 在运行时获取类的实例。 - 访问或设置...
#### Java反射基础 Java反射主要依赖于以下几类API: - `java.lang.Class`: 提供了获取类信息的方法。 - `java.lang.reflect.Field`: 允许访问和修改类的字段。 - `java.lang.reflect.Method`: 用于调用类的方法。 ...
以上只是Java 8 API中的一部分亮点,实际的API文档中还包含了大量关于集合、网络、I/O、多线程、反射等其他方面的详细信息。通过深入学习和熟练运用这些特性,开发者可以更好地利用Java 8进行高效开发。
#### 四、Java反射API概述 Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang....
**JDBC数据库访问**:Java Database Connectivity (JDBC) API提供了与多种数据库交互的能力,1.6.0版本中包括Connection、Statement、PreparedStatement、ResultSet等核心接口和类,是Java开发数据库应用的基础。...
一、Java反射API基础 1. 类与对象:`Class`类是反射的入口,它代表了运行时的类信息。通过`Class.forName()`可以获取到类的实例,然后可以通过该实例获取类的所有属性、方法和构造器。 2. 字段(Field):`Field`...
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。在“java 反射ppt 和 code 示例”中,我们可以深入理解这个强大的工具及其在实际开发中的应用。 首先,PPT部分...
### Java反射机制详解 #### 一、概述 Java反射机制是一种强大的编程技术,它允许运行时检查类的信息并操作对象的内部结构。本篇将基于Sun公司的官方文档《Java™ Core Reflection API and Specification》(1997年...
4. **动态代理**:增强了Java反射API,允许创建动态实现接口的代理类,方便AOP(面向切面编程)实现。 5. **JDBC 4.0**:改进了数据库连接池管理和自动类型转换,简化了数据库操作。 6. **改进的XML处理**:更新了...
一、Java反射的基础概念 Java反射源于Java.lang.Class类,它代表了Java运行时的类信息。通过Class对象,我们可以获取到类的构造器、方法、字段等信息,甚至可以动态地实例化对象和调用其成员。例如,`Class<?> ...
以上只是Java 8 API文档中的一部分重要特性,实际文档中还包括对反射、并发、网络编程等多个领域的详细说明,是开发者不可或缺的学习资料。通过深入学习和实践,可以更好地利用Java 8的新特性提高代码质量和效率。
反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和调用对象的方法。反射 API 主要包括 Class、Constructor、Method、Field 等类,它们提供了获取类的信息和...
1. **核心类库**:Java 1.8 API的核心类库包括了基础数据类型、集合框架、IO流、网络编程、多线程、反射等多个方面。例如,`java.lang`包中的`String`、`Integer`、`Object`等类是所有Java程序的基础;`java.util`包...
7. **反射**:`java.lang.reflect`包提供的反射API允许程序在运行时检查类、接口、字段和方法的信息,甚至可以在运行时动态调用方法和构造器。 8. **异常处理**:Java的异常处理机制基于`try-catch-finally`结构,`...
在JDK1.8中,`java.lang`包是最基础的包,包含了所有Java程序都会用到的类,如`Object`、`String`、`Integer`等。`String`类提供了丰富的字符串操作方法,如拼接、查找、替换、分割等。`Integer`类则是整型数值的...
7. **反射机制**:`java.lang.reflect`包提供了反射API,允许在运行时动态地获取类的信息并操作类的对象,增加了程序的灵活性。 8. **JDBC**:Java API 1.6包含了`java.sql`包,提供了Java Database Connectivity...