`

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基础综合】知识点详解 Java作为一种广泛使用的编程语言,其基础知识涵盖了众多方面,包括语法、面向对象特性、集合框架、异常处理、IO流、多线程等。在这个主题下,我们将深入探讨这些核心概念。 1. **Java...

    JAVA反射机制与动态代理综合资料

    总的来说,这份“JAVA反射机制与动态代理综合资料”应该是一个全面的学习资源,涵盖了从基础概念到实际应用的多个方面,对于想要提升Java技能或深入理解J2EE开发的程序员来说,是非常宝贵的学习材料。通过学习和实践...

    java基础 综合项目代码

    "Java基础 综合项目代码" 提供的可能是对初学者或有经验的开发者进行Java编程实践的一个综合性的项目,旨在巩固和应用Java基础知识。在这个项目中,你可能会遇到以下关键知识点: 1. **基本语法**:包括数据类型...

    Java入门基础.pdf

    本文档是Java入门基础的学习资源,涵盖Java开发入门、Java编程基础、面向对象、多线程、集合框架、IO流、网络编程、安全加密、反射机制、新特性和内存管理等多方面的内容。 Java开发入门 * JDK、JRE、JVM的区别与...

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

    本课程“Java基础精品课22-xml与反射”聚焦于两个关键概念:XML(可扩展标记语言)和Java反射。XML是用于存储和传输数据的标准格式,而反射则是Java提供的一种强大的动态类型功能。 XML,全称为eXtensible Markup ...

    《Java技术》综合练习题

    【Java技术】作为一门广泛使用的编程语言,涵盖了众多的知识领域,包括基础语法、面向对象编程、集合框架、异常处理、多线程、网络编程、I/O流、数据库操作、Swing图形界面、JavaFX、反射机制、注解、模块化系统、...

    Java综合经典实例大全

    8. **反射机制**:Java的反射机制允许在运行时动态获取类的信息并操作类的对象,包括创建对象、调用方法、访问字段等。这对于实现元编程、插件化等高级功能很有用。 9. **泛型**:Java泛型提供了一种在编译时检查...

    文件写入,项目相对路径,java反射,模板数据写入

    本项目涉及的关键知识点主要包括文件写入、项目相对路径、Java反射以及模板数据写入。这些技术都是构建复杂应用时不可或缺的部分。 首先,我们要了解文件写入。在Java中,我们可以使用`java.io`包下的`FileWriter`...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    我们可以推断这门课程不仅覆盖了Java的基础知识,还可能涉及了一些进阶主题,比如面向对象编程的深入理解、异常处理、多线程、集合框架的高级用法、IO流和NIO、网络编程等,以提升学员对Java语言的综合运用能力。...

    JAVA基础java工厂模式.part0007

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

    java电子教案综合

    - Java的反射机制,掌握动态加载类和调用方法的能力。 - Java的泛型,理解其在编写高效、类型安全代码中的作用。 3. **《Java程序设计大学教程》课件**:这通常是一本教材的配套资源,可能包括PPT、练习题和示例...

    Java认证基础资料

    Java认证基础资料主要针对的是Java初学者或者准备参加Java认证考试的人员,如SCJP(Sun Certified Programmer for the Java 2 Platform, Standard Edition)考试。SCJP是Oracle公司推出的一种针对Java编程技能的官方...

    JAVA面试题综合java面试知识

    在Java面试中,面试官通常会考察应聘者的语法基础、数据结构与算法、多线程、集合框架、异常处理、IO流、网络编程、设计模式等多个方面的能力。以下是一些重要的Java面试知识点: 1. **Java基础** - 关键字:了解...

    Java基础、面试等综合练习

    Java作为一款广泛使用的编程语言,其基础知识和面试技巧对于开发者来说至关...通过这些综合练习,学习者不仅可以加深对Java语言的理解,还能掌握实际项目开发中常用的技术和解决策略,为面试和实际工作打下坚实的基础。

    java 基础到高级应用

    ### Java基础到高级应用知识点概览 #### 一、Java基础知识 - **Java语言特性**: - 面向对象:封装、继承、多态。 - 平台无关性:通过Java虚拟机(JVM)实现了跨平台运行的能力。 - 自动垃圾回收:减少了内存...

    java入门笔记.pdf

    Java反射机制允许程序在运行时访问和修改程序的行为。文档中介绍了类加载器、反射的使用、注解等高级概念,这些都是在编写动态、灵活的Java应用程序时不可或缺的知识点。 ### Java新特性 随着Java版本的不断更新,...

    Java全阶段综合笔试面试题(含答案).docx

    17. **Java反射机制的作用** - 用于在运行时获取类的信息和创建对象。 - 可以通过反射调用私有方法、字段等。 18. **Java泛型的理解** - 泛型允许在类、接口和方法中使用类型参数。 - 泛型提供了类型安全,并...

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

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

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

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

    达内Java基础.zip

    【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。Java以其"一次编写,到处运行"的特性著称,具有高度的可移植性,可在不同的操作系统上运行。在...

Global site tag (gtag.js) - Google Analytics