import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * 反射就是把java类中各种成分映射成相应的java类 * @author lxf * */ public class ClsDemo { public static void main(String[] args) throws Exception { reflectField(); } private static void clazzTest() throws Exception{ String d = ""; //获取类字节码的三种方式 Class c1 = String.class; Class c2 = d.getClass(); Class c3 = Class.forName("java.lang.String"); System.out.println(c1 == c2); //true System.out.println(c2 == c3); //true System.out.println(c1); // class java.lang.String System.out.println(c1.isPrimitive()); // false System.out.println(int.class.isPrimitive()); // true System.out.println(int.class == Integer.class); // false System.out.println(int.class == Integer.TYPE); // true System.out.println(int[].class.isPrimitive()); // false System.out.println(int[].class.isArray()); // true //只要是在源程序中出现的类型,不管是void,还是int[],都有各自的class的实例对象 } /** * 构造方法的反射 */ private static void constructorTest() throws Exception{ //StringBuffer.class 指选择String类的那个构造函数 Constructor constr = String.class.getConstructor(StringBuffer.class); // String str1 = (String) constr.newInstance("abc"); //error String str2 = (String) constr.newInstance(new StringBuffer("abc")); System.out.println(str2); Class cls = Class.forName("java.lang.String"); String str3 = (String)cls.newInstance();//执行String类型不带参数的构造方法 System.out.println(str3); } /** * 数组的反射 */ private static void arrayTest() throws Exception{ int[] a1 = new int[]{3,4,5}; printObject(a1); } private static void printObject(Object o){ if(o.getClass().isArray()){ int length = Array.getLength(o); for(int i=0;i<=length-1;i++){ System.out.println(Array.get(o, i)); } }else{ System.out.println(o); } } /** * 成员变量的反射 * @throws Exception */ private static void reflectField() throws Exception{ ReflectPoint pt1 = new ReflectPoint(2, 5); //fieldY不是对象的身上的变量,而是类上的,要用它去某个对象上去取 Field fieldY = pt1.getClass().getField("y"); System.out.println(fieldY.get(pt1)); //私有成员变量不能直接取 // Field fieldX = pt1.getClass().getField("x"); //error Field fieldX = pt1.getClass().getDeclaredField("x"); fieldX.setAccessible(true); //不设这个取不到值 System.out.println(fieldX.get(pt1)); } /** * 方法的反射 * @throws Exception */ private static void reflectMethod() throws Exception{ ReflectMethod rm = new ReflectMethod(); Class cls = rm.getClass(); Method m1 = cls.getMethod("getNextInt", Integer.TYPE); System.out.println(m1.invoke(rm, 12)); Method m2 = cls.getMethod("getIntArrayString", int[].class); int[] a = new int[]{1,2,3,4}; // System.out.println(m2.invoke(rm, new int[]{1,2,3,4})); //error 为了保持jdk1.4兼容,数组会被解析成单个字符,需要外边在包一层数组 System.out.println(m2.invoke(rm, new Object[]{new int[]{1,2,3,4}})); } }
相关类
public class ReflectMethod { public int getNextInt(int a){ return a; } public String getIntArrayString(int[] a){ String sTemp = ""; for(int x:a){ sTemp += String.valueOf(x); } return sTemp; } }
public class ReflectPoint { private int x; public int y; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } }
相关推荐
【JAVA基础综合】知识点详解 Java作为一种广泛使用的编程语言,其基础知识涵盖了众多方面,包括语法、面向对象特性、集合框架、异常处理、IO流、多线程等。在这个主题下,我们将深入探讨这些核心概念。 1. **Java...
总的来说,这份“JAVA反射机制与动态代理综合资料”应该是一个全面的学习资源,涵盖了从基础概念到实际应用的多个方面,对于想要提升Java技能或深入理解J2EE开发的程序员来说,是非常宝贵的学习材料。通过学习和实践...
"Java基础 综合项目代码" 提供的可能是对初学者或有经验的开发者进行Java编程实践的一个综合性的项目,旨在巩固和应用Java基础知识。在这个项目中,你可能会遇到以下关键知识点: 1. **基本语法**:包括数据类型...
本文档是Java入门基础的学习资源,涵盖Java开发入门、Java编程基础、面向对象、多线程、集合框架、IO流、网络编程、安全加密、反射机制、新特性和内存管理等多方面的内容。 Java开发入门 * JDK、JRE、JVM的区别与...
本课程“Java基础精品课22-xml与反射”聚焦于两个关键概念:XML(可扩展标记语言)和Java反射。XML是用于存储和传输数据的标准格式,而反射则是Java提供的一种强大的动态类型功能。 XML,全称为eXtensible Markup ...
【Java技术】作为一门广泛使用的编程语言,涵盖了众多的知识领域,包括基础语法、面向对象编程、集合框架、异常处理、多线程、网络编程、I/O流、数据库操作、Swing图形界面、JavaFX、反射机制、注解、模块化系统、...
8. **反射机制**:Java的反射机制允许在运行时动态获取类的信息并操作类的对象,包括创建对象、调用方法、访问字段等。这对于实现元编程、插件化等高级功能很有用。 9. **泛型**:Java泛型提供了一种在编译时检查...
本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...
我们可以推断这门课程不仅覆盖了Java的基础知识,还可能涉及了一些进阶主题,比如面向对象编程的深入理解、异常处理、多线程、集合框架的高级用法、IO流和NIO、网络编程等,以提升学员对Java语言的综合运用能力。...
内容: 本章利用了IO流、JAVA反射机制、Properties类,综合讲解了JAVA工厂设计模式的主要应用 产品:JDK 1.5 技术:JAVA基础 难度: ★★★★★
- Java的反射机制,掌握动态加载类和调用方法的能力。 - Java的泛型,理解其在编写高效、类型安全代码中的作用。 3. **《Java程序设计大学教程》课件**:这通常是一本教材的配套资源,可能包括PPT、练习题和示例...
Java认证基础资料主要针对的是Java初学者或者准备参加Java认证考试的人员,如SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)考试。SCJP是Oracle公司推出的一种针对Java编程技能的官方...
在Java面试中,面试官通常会考察应聘者的语法基础、数据结构与算法、多线程、集合框架、异常处理、IO流、网络编程、设计模式等多个方面的能力。以下是一些重要的Java面试知识点: 1. **Java基础** - 关键字:了解...
Java作为一款广泛使用的编程语言,其基础知识和面试技巧对于开发者来说至关...通过这些综合练习,学习者不仅可以加深对Java语言的理解,还能掌握实际项目开发中常用的技术和解决策略,为面试和实际工作打下坚实的基础。
### Java基础到高级应用知识点概览 #### 一、Java基础知识 - **Java语言特性**: - 面向对象:封装、继承、多态。 - 平台无关性:通过Java虚拟机(JVM)实现了跨平台运行的能力。 - 自动垃圾回收:减少了内存...
Java反射机制允许程序在运行时访问和修改程序的行为。文档中介绍了类加载器、反射的使用、注解等高级概念,这些都是在编写动态、灵活的Java应用程序时不可或缺的知识点。 ### Java新特性 随着Java版本的不断更新,...
17. **Java反射机制的作用** - 用于在运行时获取类的信息和创建对象。 - 可以通过反射调用私有方法、字段等。 18. **Java泛型的理解** - 泛型允许在类、接口和方法中使用类型参数。 - 泛型提供了类型安全,并...
第2篇讲解了图形界面开发基础、Swing编程、事件处理、数字处理、异常处理、文件的输入与输出、反射、线程、正则表达式、封装类、容器、泛型、数据结构、数据库编程和Applet等高级技术;第3篇讲解了Socket、JSP、...
适彻分析反射的基础 Class类rar 理解反射的概念.rar 构造方法的反射应用.rar 成员变量的反射.rar 成员变量反射的综合案例.rar 成员方法的反射.rar 对接收数组参数的成员方法进行反射....数组与Object的关系及其反射...
【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。Java以其"一次编写,到处运行"的特性著称,具有高度的可移植性,可在不同的操作系统上运行。在...