- 浏览: 123550 次
- 性别:
- 来自: 地球
文章分类
最新评论
-
754731046:
很适合对初学者适用,谢谢
Oracle存储过程详解 -
天明破晓:
我测试了,不好用
Java中的正则表达式验证各种电话号码 -
OracleX:
otom31 写道从来不用标签库,几乎不用struts,除了最 ...
标签库的优点、缺点大辩论 -
otom31:
从来不用标签库,几乎不用struts,除了最早公司要使用以外; ...
标签库的优点、缺点大辩论
package com.reflection; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射调用一般分为3个步骤: * * 1.得到要调用类的class * 2.得到要调用的类中的方法(Method) * 3.方法调用(invoke) * * 一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。 * 从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。 */ public class MainRefelection { public static void main(String args[]) { User user = new User(); try { new MainRefelection().showRefelection(user); } catch (Exception e) { e.printStackTrace(); } } @SuppressWarnings("rawtypes") public void showRefelection(Object object) throws Exception { //-------------生成class-------------- // Class cls = object.getClass(); Class cls =Class.forName("com.reflection.User"); //二者都可以 System.out.println("该对象的类型是:" + cls.toString()); // com.reflection.User //----------调用方法----------------- Method m = cls.getDeclaredMethod("hello", new Class[] { String.class,int.class }); // 调用方法 参数类型保持一致 //----------方法调用---------------- m.invoke(cls, "spark", 20); //name:spark,age:20 // m.invoke(cls.newInstance(), "spark",20); // 静态方法调用不需要newInstance() /** * 向成员变量赋值 */ //1.直接操作成员变量,需要设置访问权限 Object user = cls.newInstance(); Field field = cls.getDeclaredField("age"); field.setAccessible(true); // 向private成员变量赋值时 不加这句话会抛异常 Class // com.reflection.MainRefelection can not // access a member of class // com.reflection.User with modifiers // "private" field.set(user, 21); System.out.println("age:" + field.get(user)); //age:21 //2.操作成员变量对应的方法,不需要设置访问权限 Method setMethod = cls.getDeclaredMethod("setAge", int.class); //不是Integer.class setMethod.invoke(user, 23); // 调用set方法 Method getMethod = cls.getDeclaredMethod("getAge"); System.out.println("age:" + getMethod.invoke(user)); //age:23 调用get方法 //-----------获得所有的方法-------------- Method[] methods=cls.getDeclaredMethods(); System.out.println("方法有:"); for(int i=0;i<methods.length;i++){ System.out.print(methods[i].getName()+" "); } //--------获得所有的变量 Field[] fields=cls.getDeclaredFields(); //cls.getFields() 不对 System.out.println("变量有:"); for(int j=0;j<fields.length;j++){ System.out.print(fields[j].getName()+" "); } // -----生成对象实体------ // 一种是针对无参数的构造方法,直接cls.newInstance() // 另一种是针对有参数的构造方法,比较麻烦。需要先调用cls.getConstructor()获得一个专属的Costructor对象 // 然后调用Constructor类中的newInstance() // 只有两个类拥有newInstance()方法,分别是Class类和Constructor类 // Class类中的newInstance()方法是不带参数的,而Constructro类中的newInstance()方法是带参数的 Class clsb = Class.forName("com.reflection.User"); Class[] prams = new Class[] { int.class, int.class }; // 作为Constructor的参数类型 Constructor cons = clsb.getConstructor(prams); Object[] obj = new Object[] { 11, 22 }; Object objb = cons.newInstance(obj); System.out.println(objb); // com.reflection.User@d9f9c3 } /** * JAVA反射机制主要提供了以下功能: * 注:前提都是在运行时,而不是在编译时! * 1.在运行时判断任意一个对象所属的类 * 2.在运行时构造任意一个类的对象 * 3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法) * 4.在运行时调用任意一个对象的方法 */ }
public class User { private String name; private int age; private int id; public User(){ } public User(int id,int age){ this.id=id; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public static void hello(String name, int age) { //参数类型必须保持一致 是Integer都是Integer System.out.println("name:" + name + ",age:" + age); } }
发表评论
-
AOP的实现(JDK动态代理)
2011-11-29 16:21 1004转自:http://www.blogjava.net/D ... -
Java 枚举7常见种用法
2011-11-27 22:54 890转自:http://helloyesyes.itey ... -
一个Java程序员应该掌握的10项技能
2011-11-18 11:57 10161、语法:必须比 ... -
Java回调函数使用
2011-08-16 16:14 718正常情况下开发人员使用已经定义好的API,这个过程叫 ... -
为什么要设置Java环境变量(详解)
2011-08-17 21:40 681从大二开始接触Java,之后是断断续续的学习。大三真正开始 ... -
很长空格的String转换成Array数组
2011-08-23 14:40 1298开发中碰到了一个需求,需要把键值对字符串分隔,但键值之 ... -
不同格式的日期字符串转换
2011-08-23 14:44 956先把字符串日期转换成对应的格式,然后再转换成日期 p ... -
用序列化(Serializable)保存、读取对象
2011-08-23 15:33 869实现Serializable借口的对象可以被转换成一系列 ... -
JUint测试
2011-08-23 15:36 658ClassA.java public class Cla ... -
解决Join方法的疑惑
2011-08-23 20:57 1011很长时间对join方法感到疑惑,不明白到底是谁要阻塞,谁要继 ... -
线程学习笔记【1】----进程、线程概念及创建线程
2011-08-27 22:33 8051.进程与线程 每个进程都独享一块内存空间,一个应用程 ... -
线程学习笔记【2】---Timer(定时器)
2011-08-28 09:15 781入门 public class Time01 { ... -
线程学习笔记【3】---互斥技术
2011-08-29 15:10 752第一个示例更多的是运用了内部类的特性: 内部类重要特点:可以 ... -
线程学习笔记【4】---线程之间通信
2011-08-29 17:31 751子线程先循环10次,然后主线程循环100次,再子线程循环10次 ... -
线程学习笔记【5】--ThreadLocal应用
2011-09-05 15:31 803基本的ThreadLocal使用 public clas ... -
各种创建单例模式的优缺点
2011-09-05 21:54 830单例模式应用于一个类只有一个实例的情况,并且为其实例提供一个全 ... -
格式化简单例子
2011-11-04 16:35 821参考:http://android.blog.51cto.co ... -
图片上传源码(commons-fileupload-1.2.2)分析
2011-11-03 11:20 2060题记:文章是供自己查看方便,所以没有进行格式化,请见谅 ... -
用序列化(Serializable)保存、读取对象
2011-08-23 15:56 922实现Serializable借口的对象可以被转换成一系 ... -
IO各种流使用清晰区别
2011-08-10 11:39 844引用:http://www.iteye.com/topic/1 ...
相关推荐
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。...提供的"Java反射示例代码.rar"资源正好可以帮助初学者通过实践来理解这些概念。
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查类、接口、字段和方法的信息,并能动态地创建对象和调用方法。在Java中,反射主要用于以下场景:代码生成、元数据访问、插件系统、框架设计等。...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够在运行时动态地创建对象和调用方法。这个特性为Java提供了强大的元数据访问能力,使得代码更加灵活,适用于...
以下是一个简单的Java反射示例,展示了如何使用反射来获取类的信息: ```java import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.for...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段和方法等对象。在“java 反射ppt 和 code 示例”中,我们可以深入理解这个强大的工具及其在实际开发中的应用。 首先,PPT部分...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射机制提供了强大的能力,包括在运行时检查类的结构、创建对象实例、调用方法以及访问和修改字段值。...
以下是对这个“最简单Java反射原理示例”的详细解释。 一、Java反射的概念 Java反射机制允许我们在运行时动态地获取类的信息(如类名、方法名、参数类型等)并调用这些方法。这是通过`java.lang.Class`类和相关API...
- [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/):提供关于Java反射机制的详细解释和示例。 - [Effective Java](https://www.amazon.com/Effective-Java-3rd-Edition/dp/0134685997):由...
Java反射机制是Java编程语言中...通过实际的代码示例,学习和理解Java反射机制将变得更加直观和深入。在实际开发中,反射常用于框架、插件系统、序列化/反序列化、测试等方面,但也需要谨慎使用,避免过度依赖和滥用。
在提供的"java反射实例代码"中,应该包含了如何使用上述方法的实际示例,这些示例有助于加深对Java反射机制的理解。通过阅读和运行这些代码,开发者可以更直观地学习如何在程序运行时动态地操作类、方法和字段,从而...
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得动态性、灵活性和元编程成为可能,从而极大地扩展了Java开发者的工具箱。在Java中,...
在本示例中,我们将深入探讨Java反射的概念、用途以及如何通过PPT展示的代码示例来理解这个主题。 首先,我们要明白反射的核心是`java.lang.reflect`包,它包含了一些类和接口,如`Class`、`Constructor`、`Method`...
### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射...以上内容不仅解释了Java反射机制的相关知识点,还通过示例代码进行了实践演示,希望能够帮助你在Java面试中更好地理解和运用这一重要特性。
在"java类反射示例源码"中,我们可以深入理解这个概念并学习如何在实际开发中应用。 反射的使用通常涉及到以下关键知识点: 1. **Class类**: 在Java中,`java.lang.Class`类是所有类的通用表示,每个类都有一个与...
Java反射是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。在Java中,反射API提供了对类、接口、字段和方法等元数据的访问,使得我们可以“看穿”类的封装性,实现一些在编译...
接下来,我们将通过一个简单的Java反射示例来进一步理解反射的使用: ```java import java.lang.reflect.*; public class DumpMethods { public static void main(String[] args) { try { Class<?> c = Class....
下面通过一个简单的示例来展示Java反射机制的工作流程: ```java import java.lang.reflect.*; public class DumpMethods { public static void main(String args[]) { try { Class c = Class.forName(args[0])...
在提供的"Java反射经典实例.htm"文件中,可能会包含具体的代码示例,演示如何使用反射创建对象、访问字段、调用方法等。结合文件中的内容,读者可以更深入理解反射的实际应用。 总结,Java反射机制提供了对运行时类...
#### 三、Java反射示例代码分析 下面是一些具体的Java反射使用示例代码片段及其解释: 1. **获取并调用对象的属性**: ```java public Object getProperty(Object owner, String fieldName) throws Exception { ...
11. **反射与注解**:Java反射机制允许在运行时检查类的信息,而注解提供了一种元数据的方式来影响编译过程或运行时行为。示例将解释如何使用这两个高级特性。 12. **单元测试**:JUnit是Java的主要单元测试框架,...