`
yxwang0615
  • 浏览: 559014 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

java反射基础API

    博客分类:
  • java
阅读更多

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的一个实例

    下面我们将深入探讨如何利用Java反射API实现这些功能。 首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、...

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    java1.8-api

    10. **新的反射API**:改进了反射机制,提供了更强大的元数据访问能力,比如`MethodHandle`和`MethodType`。 这些只是Java 1.8 API中部分重要的更新,实际上还包括许多其他改进和优化。对于开发者来说,深入理解并...

    JAVA反射详解

    #### Java反射API的功能 反射API提供了丰富的功能,使得开发者能够: - 决定对象的类。 - 获取类的修饰符、字段、方法、构造器和超类信息。 - 查找接口声明的方法或常量。 - 在运行时获取类的实例。 - 访问或设置...

    Java反射性能测试分析

    #### Java反射基础 Java反射主要依赖于以下几类API: - `java.lang.Class`: 提供了获取类信息的方法。 - `java.lang.reflect.Field`: 允许访问和修改类的字段。 - `java.lang.reflect.Method`: 用于调用类的方法。 ...

    java 8 的api

    以上只是Java 8 API中的一部分亮点,实际的API文档中还包含了大量关于集合、网络、I/O、多线程、反射等其他方面的详细信息。通过深入学习和熟练运用这些特性,开发者可以更好地利用Java 8进行高效开发。

    java面试题--反射机制

    #### 四、Java反射API概述 Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang....

    Java_1.6.0API中文参考文档

    **JDBC数据库访问**:Java Database Connectivity (JDBC) API提供了与多种数据库交互的能力,1.6.0版本中包括Connection、Statement、PreparedStatement、ResultSet等核心接口和类,是Java开发数据库应用的基础。...

    mirror,Java反射API上的简单DSL层.zip

    一、Java反射API基础 1. 类与对象:`Class`类是反射的入口,它代表了运行时的类信息。通过`Class.forName()`可以获取到类的实例,然后可以通过该实例获取类的所有属性、方法和构造器。 2. 字段(Field):`Field`...

    Java反射经典实例

    Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等信息,即使这些信息在编译时并未明确知晓。在Java中,反射通常通过`java.lang.Class`类和相关的API来实现。本实例将...

    java 反射ppt 和 code 示例

    Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。在“java 反射ppt 和 code 示例”中,我们可以深入理解这个强大的工具及其在实际开发中的应用。 首先,PPT部分...

    java api1.6、1.7

    4. **动态代理**:增强了Java反射API,允许创建动态实现接口的代理类,方便AOP(面向切面编程)实现。 5. **JDBC 4.0**:改进了数据库连接池管理和自动类型转换,简化了数据库操作。 6. **改进的XML处理**:更新了...

    java反射源代码

    一、Java反射的基础概念 Java反射源于Java.lang.Class类,它代表了Java运行时的类信息。通过Class对象,我们可以获取到类的构造器、方法、字段等信息,甚至可以动态地实例化对象和调用其成员。例如,`Class&lt;?&gt; ...

    java8 API 文档

    以上只是Java 8 API文档中的一部分重要特性,实际文档中还包括对反射、并发、网络编程等多个领域的详细说明,是开发者不可或缺的学习资料。通过深入学习和实践,可以更好地利用Java 8的新特性提高代码质量和效率。

    java反射全解(反射原理+反射API详解+反射与数组+反射与泛型+反射源码与性能开销+反射优缺点+反射与内省)

    反射 API 是 Java 语言提供的一组 Application Programming Interface(API),用于在运行时获取类的信息和调用对象的方法。反射 API 主要包括 Class、Constructor、Method、Field 等类,它们提供了获取类的信息和...

    java1.8api中文版

    1. **核心类库**:Java 1.8 API的核心类库包括了基础数据类型、集合框架、IO流、网络编程、多线程、反射等多个方面。例如,`java.lang`包中的`String`、`Integer`、`Object`等类是所有Java程序的基础;`java.util`包...

    Java1.6api

    7. **反射**:`java.lang.reflect`包提供的反射API允许程序在运行时检查类、接口、字段和方法的信息,甚至可以在运行时动态调用方法和构造器。 8. **异常处理**:Java的异常处理机制基于`try-catch-finally`结构,`...

    java开发手册 api文档(jdk1.8中文)

    在JDK1.8中,`java.lang`包是最基础的包,包含了所有Java程序都会用到的类,如`Object`、`String`、`Integer`等。`String`类提供了丰富的字符串操作方法,如拼接、查找、替换、分割等。`Integer`类则是整型数值的...

    利用java反射调用Android隐藏Api

    利用java的反射原理来调用 Android隐藏api 应用开发必备哦 详细描述: http://blog.csdn.net/y_haiyang/article/details/9924925 ====================关注小鱼=================== 新浪微博:...

Global site tag (gtag.js) - Google Analytics