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; } }
相关推荐
内容: 本章利用了IO流、JAVA反射机制、Properties类,综合讲解了JAVA工厂设计模式的主要应用 产品:JDK 1.5 技术:JAVA基础 难度: ★★★★★
Java基础精品课22-xml与反射.zip
Java基础笔记分为 Java基础篇 和 Java加强篇 Java基础篇包括: 1. Java环境搭建、Java快速入门、IDEA开发工具 2. Java基础语法、类型转换、运算符、Scanner 3. 分支结构、循环结构、随机数 4. 数组详解、Debug工具...
第2篇讲解了图形界面开发基础、Swing编程、事件处理、数字处理、异常处理、文件的输入与输出、反射、线程、正则表达式、封装类、容器、泛型、数据结构、数据库编程和Applet等高级技术;第3篇讲解了Socket、JSP、...
适彻分析反射的基础 Class类rar 理解反射的概念.rar 构造方法的反射应用.rar 成员变量的反射.rar 成员变量反射的综合案例.rar 成员方法的反射.rar 对接收数组参数的成员方法进行反射....数组与Object的关系及其反射...
1:单项链表、双向链表、哈希表/散列表和二叉数 数据结构的讲解。...6:使用反射创建对象,调用方法,访问字段的值讲的也相当的详细,尤其IO+Properties+Reflect的综合案例对后期理解jdbc相当有帮助。
首先,全书以Java开发环境搭建开篇,循序渐进地介绍了Java语法的方方面面,不仅包括变量、语句、字符串、数组、类、集合、面向对象等必备的基础语法,而且还涵盖异常处理与反射机制、I/O文件操作、线程、数据库操作...
15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...
第2 篇讲解了图形界面开发基础、Swing编程、事件处理、数字处理、异常处理、文件的输入与输出、反射、 线程、正则表达式、封装类、容器、泛型、数据结构、数据库编程和Applet等高级技术;第3篇讲解了 Socket、JSP、...
第8章 Java反射机制 第9章 数据结构与集合类 第3篇 图形用户界面 第10章 Java Swing(上) 第11章 Java Swing(下) 第12章 Applet网页小程序 第13章 图形编程 第14章 多媒体编程 第4篇 Java高级技术 第15章 字符串...
第一阶段:Java基础 大概用时:30天 重点知识点:数据类型、核心语法、面向对象、数组、集合、IO流、String/StringBuffer/StringBuilder、线程、并发、反射、泛型。 学习Java开发,首先要学习java基础知识,尤其是...
《Java程序员面试宝典》列举了各大IT公司的面试真题,详细分析了应聘Java程序员职位的常见考点,主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、...
第一篇 基础篇 第1章 Java简介(精彩视频:33分钟) 21 1.1 Java的平台简介 21 1.2 安装工具包 22 1.2.1 下载JDK 22 1.2.2 安装JDK 24 1.2.3 查看与设置环境变量 25 1.2.4 JDK常用命令 27 1.2.5 Java各个目录含义 28...
tetris:俄罗斯方块原始码,涉及IO操作,多线程,反射以及针对对象思想的综合应用,刚刚学完java se基础的同学可以参考下
本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...
本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...
一、实验目的 ★专题:核心专题技术★ ...7.[选做]反射和注解——一个综合应用 ★专题:接口基础和面向接口编程★ 1.字符串处理 2.数有关类:数学Math类、随机数类Random、大数类 3.时日API 4.Java
本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...