`

java 反射基础综合

 
阅读更多
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工厂模式.part0007

    内容: 本章利用了IO流、JAVA反射机制、Properties类,综合讲解了JAVA工厂设计模式的主要应用 产品:JDK 1.5 技术:JAVA基础 难度: ★★★★★

    Java基础精品课22-xml与反射.zip

    Java基础精品课22-xml与反射.zip

    Java基础最全笔记文档

    Java基础笔记分为 Java基础篇 和 Java加强篇 Java基础篇包括: 1. Java环境搭建、Java快速入门、IDEA开发工具 2. Java基础语法、类型转换、运算符、Scanner 3. 分支结构、循环结构、随机数 4. 数组详解、Debug工具...

    由浅入深学Java—基础、进阶与必做260题 高清pdf版

    第2篇讲解了图形界面开发基础、Swing编程、事件处理、数字处理、异常处理、文件的输入与输出、反射、线程、正则表达式、封装类、容器、泛型、数据结构、数据库编程和Applet等高级技术;第3篇讲解了Socket、JSP、...

    Java基础学习教程(附PPT和源代码)

    适彻分析反射的基础 Class类rar 理解反射的概念.rar 构造方法的反射应用.rar 成员变量的反射.rar 成员变量反射的综合案例.rar 成员方法的反射.rar 对接收数组参数的成员方法进行反射....数组与Object的关系及其反射...

    动力节点Java基础301集_史上最全的Java基础教程

    1:单项链表、双向链表、哈希表/散列表和二叉数 数据结构的讲解。...6:使用反射创建对象,调用方法,访问字段的值讲的也相当的详细,尤其IO+Properties+Reflect的综合案例对后期理解jdbc相当有帮助。

    Java范例大全 源码

    首先,全书以Java开发环境搭建开篇,循序渐进地介绍了Java语法的方方面面,不仅包括变量、语句、字符串、数组、类、集合、面向对象等必备的基础语法,而且还涵盖异常处理与反射机制、I/O文件操作、线程、数据库操作...

    java基础案例与开发详解案例源码全

    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 本...

    由浅入深学Java—基础、进阶与必做260题.pdf

    第2 篇讲解了图形界面开发基础、Swing编程、事件处理、数字处理、异常处理、文件的输入与输出、反射、 线程、正则表达式、封装类、容器、泛型、数据结构、数据库编程和Applet等高级技术;第3篇讲解了 Socket、JSP、...

    精通Java:JDK、数据库系统开发Web开发(实例代码)

    第8章 Java反射机制 第9章 数据结构与集合类 第3篇 图形用户界面 第10章 Java Swing(上) 第11章 Java Swing(下) 第12章 Applet网页小程序 第13章 图形编程 第14章 多媒体编程 第4篇 Java高级技术 第15章 字符串...

    Java后端学习路线 (详细路线)

    第一阶段:Java基础 大概用时:30天 重点知识点:数据类型、核心语法、面向对象、数组、集合、IO流、String/StringBuffer/StringBuilder、线程、并发、反射、泛型。 学习Java开发,首先要学习java基础知识,尤其是...

    Java程序员面试宝典

    《Java程序员面试宝典》列举了各大IT公司的面试真题,详细分析了应聘Java程序员职位的常见考点,主要内容包括面试流程及求职准备、Java语言基础、数据类型、集合框架、图形用户界面、输入与输出、多线程、反射机制、...

    21天学通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基础的同学可以参考下

    tetris:俄罗斯方块原始码,涉及IO操作,多线程,反射以及针对对象思想的综合应用,刚刚学完java se基础的同学可以参考下

    Java面向对象程序设计(清华版)压缩卷3

    本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...

    Java面向对象程序设计(清华版)压缩卷2

    本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...

    实验项目D、Java应用专题编程

    一、实验目的 ★专题:核心专题技术★ ...7.[选做]反射和注解——一个综合应用 ★专题:接口基础和面向接口编程★ 1.字符串处理 2.数有关类:数学Math类、随机数类Random、大数类 3.时日API 4.Java

    Java面向对象程序设计(清华版)压缩卷1

    本书综合介绍了Java语言编程技术和面向对象程序设计两部分内容,在讲授Internet上最流行的编程语言Java的同时,还介绍了它所采用的面向对象技术的基础理论、主要原则和思维方法。本书内容翔实全面,涵盖了从基本概念...

Global site tag (gtag.js) - Google Analytics