`

Java反射机制学习(一)

    博客分类:
  • Java
阅读更多

首先先说以下反射使用的基本步骤(套路):

 

基本步骤:
1.获取目标类型相应的Class对象
2.调用Class对象内省方法获取目标类成员信息
3.访问目标类成员信息/操作目标类中的成员

 

//通过反射获取该类的field,method,constructor,interface,package and superClass informations
public class Car {
	private String brand;
	private int price;
	private static int count = 10;
	
	public Car(){
		
	}
	
	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}

	public static int getCount() {
		return count;
	}

	public static void setCount(int count) {
		Car.count = count;
	}

	public Car(String brand, int price)
	{
		this.brand = brand;
		this.price = price;
	}
	
	public String toString(){
		return "The brand of this car is "+ brand +". The price is "+ price +"The number of this car is " + count;
	}
}

  通过下面这个类,利用反生机制,来一步一步的获取类Car的信息,

 field 信息    method信息 superclass 信息 interface信息 以及 package等等

 使用的方法其实都很容易看懂,也很容易实现。

 

public class Reflection1 {

	public static void parseFiled(String className) throws ClassNotFoundException{
		Class c = Class.forName(className);
		
		//parse the field 
		Field[] fields = c.getDeclaredFields();
		for(Field field: fields ){
			System.out.println("***********************************************");
			System.out.println("\t field info    :  " + field.toString());
			System.out.println("\t data type     :  " + field.getType());
			System.out.println("\t field name    :  " + field.getName());
			System.out.println("\t modifier      :  " + Modifier.toString(field.getModifiers()));				
		}
	} 
	public static void parseMethod(String className) throws ClassNotFoundException{
		Class c = Class.forName(className); 
		Method[] methods = c.getDeclaredMethods();
		for(Method method:methods){
			System.out.println("***********************************************");
			System.out.println("\t method        :  " + method.toString());
			System.out.println("\t method name   :  " + method.getName());
			System.out.println("\t modifier      :  " + Modifier.toString(method.getModifiers()));
			Class parameters[] = method.getParameterTypes();
			System.out.print("\t parameters    :  ");
			for(int i =0; i < parameters.length; i++){
				Class clazz = parameters[i];
				if(i!=0) 
				{
					System.out.print(",");
				}
				System.out.print(clazz);
			}
			System.out.println();
			System.out.println("\t return values :  " + method.getReturnType());

		}
	}
	public static void parseConstructor(String className) throws ClassNotFoundException{
		 Class c = Class.forName(className);
		 Constructor[] constructors = c.getDeclaredConstructors();
		 for(Constructor constructor: constructors)
		 {
			System.out.println("***********************************************");
			System.out.println("\t constructor         :  " + constructor.toString());
			System.out.println("\t constructor name    :  " + constructor.getName());
			System.out.println("\t constructor modifier:  " + Modifier.toString(constructor.getModifiers()));
			System.out.print("\t paramenters         :  ");
			Class parameters[] = constructor.getParameterTypes();
			for(int i=0; i< parameters.length;i++)
			{
				Class clazz = parameters[i];
				if(i!=0)
				{
					System.out.print(",");
				}
				System.out.print(clazz);
			}
			System.out.println();
		 }
	}
	public static void getTheSuperClassInfo(String className) throws ClassNotFoundException{
		 Class c = Class.forName(className); 
		 Class superClass = c.getSuperclass();
		 System.out.println("***********************************************");
		 System.out.println( className + "'s super class is :  " + superClass.toString());
	}
	public static void getTheInterfaceInfo(String className) throws ClassNotFoundException{
		 Class c = Class.forName(className);
		 Class[] interfaces = c.getInterfaces();
		 System.out.println("Implement interfaces:");
		 for(Class interface1:interfaces)
		 {
			 System.out.println(interface1.toString());
		 }
	}
	public static void getThePackageInfo(String className) throws ClassNotFoundException{
		 Class c = Class.forName(className);
		 Package p =c.getPackage();
		 System.out.println("The package is    :  " + p.toString());
	}
	public static void main(String args[]) throws ClassNotFoundException
	{
		System.out.println("Please input the class name:");
		Scanner scan = new Scanner(System.in);
		String className = scan.next();
		System.out.println("Input class name       :  "+className);
		//Analysis the fields.
		System.out.println("Filed info:");
		parseFiled(className);
		//Analysis the method. Not include super class's info

		System.out.println("Method info:");
		parseMethod(className);
		//Analysis the constructor
		System.out.println("Constructor info:");
		parseConstructor(className);
		//Analysis the super class
		System.out.println("SuperClss info:");
		getTheSuperClassInfo(className);
		//Analysis the class's interfaces
		System.out.println("Implement interface info:");
		getTheInterfaceInfo(className);
		//get package info
		System.out.println("Package info:");
		getThePackageInfo(className);
		
	}
}

 End!

 

 

 

 

0
0
分享到:
评论

相关推荐

    Java反射机制学习(二)

    这篇博文"Java反射机制学习(二)"可能深入探讨了如何利用反射进行动态类型处理、访问私有成员以及创建对象等核心概念。在这里,我们将详细讨论Java反射的基本用法及其在实际开发中的应用。 1. **什么是反射**: ...

    java面试题--反射机制

    通过本文的学习,我们深入了解了Java反射机制的基本概念、原理以及应用。Java反射机制为Java程序提供了一种强大的动态处理能力,使得Java不仅仅局限于静态类型语言的功能限制。掌握Java反射机制对于开发者来说是非常...

    Java反射机制学习总结

    Java反射机制是Java编程语言中一个强大的工具,它允许程序在运行时动态地获取类的信息并操作类的对象。反射机制的核心在于java.lang.reflect包中的API,主要包括Class类、Constructor类、Method类和Field类。以下是...

    Java反射机制的使用和学习方法

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。这一机制对于理解和实现高级框架、动态代理、元数据处理等场景至关重要。以下是对Java反射机制的详细说明:...

    Java反射机制的学习

    Java反射机制是Java编程语言中的一项核心特性,它允许程序在运行时动态地获取类的信息并进行操作。这使得Java能够在编译后仍然能够灵活地处理类和对象,增强了代码的动态性。在Android应用开发中,反射机制尤其重要...

    JAVA反射机制学习

    在"JAVA反射机制学习"资料中,你将深入理解这一关键概念。 首先,我们要明白什么是反射。在Java中,反射是一种在运行时分析类、接口、字段和方法的能力。通过使用`java.lang.Class`对象,我们可以获取任何类的信息...

    JAVA反射机制的入门代码

    Java反射机制是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法...

    北大青鸟java反射机制

    在"北大青鸟java反射机制"的学习资料中,我们将会深入探讨这一核心特性。 首先,我们要理解反射的核心概念:在程序运行时,通过Class对象获取类的信息,包括类名、属性、方法等,并能够动态地创建对象和调用方法。...

    一个例子让你了解Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...

    java反射机制学习

    Java反射机制是Java编程语言中的一种强大功能,它允许程序在运行时检查和操作类、接口、字段和方法的信息,即使在编译时这些信息是未知的。这一特性使得Java在某种程度上具备了动态语言的特性,尽管Java本身是一种...

    java学习笔记(java 反射机制 流 内存管理)

    本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...

    java反射机制原理和反射机制总结

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这一机制的核心在于`java.lang.Class`类和相关的API,它们提供了对类元数据的访问,使得我们能够在运行时...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,...通过学习和实践Java反射机制,你可以更深入地理解Java的运行机制,并在需要动态性、灵活性的场景中发挥其强大的功能。不过,使用反射时也应注意潜在的风险和性能影响。

    java反射机制学习笔记+反射机制实操案例

    总结来说,Java反射机制是Java语言的一个重要特性,它使得程序能够在运行时动态地获取类的信息并进行操作,提高了代码的通用性和适应性。在实际开发中,反射机制常用于框架设计、插件系统、数据持久化等领域,但同时...

    java反射机制文档及代码

    Java反射机制是Java编程语言中一个...通过阅读"1139760298222java.pdf"这份文档,你可以更深入地理解Java反射机制,并结合实际示例学习如何在项目中有效利用这一特性。记得在实际操作中结合代码实践,以巩固理论知识。

    java反射机制学习笔记

    Java反射机制是Java编程语言的一项重要特性,它允许程序在运行时动态地获取类的信息,并且能够对类的属性和方法进行操作。反射机制的核心在于Java的`java.lang.reflect`包,其中包含了`Class`、`Constructor`、`...

    Java反射机制经典案例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至能够在不知道具体类名的情况下创建和调用对象的方法。这为程序员提供了高度的灵活性和动态性,使得Java...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时的程序动态地获取类的信息并操作类的对象。在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`...

    利用java反射机制的建议计算器源码

    通过这个例子,新手可以学习到如何使用Java反射机制来增强代码的动态性,以及如何设计可扩展的系统。反射在很多场景下都很有用,例如在插件系统、序列化、动态代理等领域都有广泛应用。然而,需要注意的是,反射也...

    java反射机制学习(四):通过反射执行方法、操作属性、操作数组中的数据

    Java反射机制是Java编程语言中一个强大的特性,它允许运行时动态地获取类的信息并进行操作,如创建对象、调用方法、访问属性以及处理数组等。在本篇讲解中,我们将深入理解如何通过反射来执行方法、操作属性以及处理...

Global site tag (gtag.js) - Google Analytics