`

java 反射(reflect)总结。

    博客分类:
  • java
阅读更多

/**
 * 获取一个Class类有三种方法:
 * @author Morgan
 */
public class GetClass {
	public static void main(String[] args) {
		
		//第一种获取方法,直接了当 
		Class<String> class1 = String.class;
		System.out.println(class1);
		
		//第二种获取方法,对实体类运用方法  
		String str = "just do it";  
		Class<?> class2 = str.getClass();
		System.out.println(class2);
		
		//第三种获取方法,直接传递一个类名,字符串形式  
		try {
			Class<?> class3 = Class.forName("java.lang.String");
			System.out.println(class3);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		
	}
}

 

/**
 * 获取一个Filed字段类的,有四种方法
 * @author Morgan
 *
 */
public class GetFiled {
	public static void main(String[] args) {
		Class<String> class1 = String.class;
		
		//1.获取所有申明的字段  
		Field[] fields1 = class1.getDeclaredFields(); 
		for (Field field : fields1) {
			System.out.println(field);
		}
		
		System.out.println("------------------------------------------------");
		//2.获取所有的公共类字段  
		Field[] fields2 = class1.getFields();  
		for (Field field : fields2) {
			System.out.println(field);
		}
		System.out.println("------------------------------------------------");		          
		//3.获取指定字段名(所有申明的字段都可获取)  
		try {
			Field field1 = class1.getDeclaredField("value");
			System.out.println(field1);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}  
		System.out.println("------------------------------------------------");		          
		//4.获取指定公共字段名  
		try {
			Field field2 = class1.getField("CASE_INSENSITIVE_ORDER");
			System.out.println(field2);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		}
	}
}
 

/**
 * Method类:同Field有四种方法
 * @author Morgan
 */
public class TestMethod {
	public static void main(String[] args) {
		Class<String> class1 = String.class;
		
		Method[] methods1 = class1.getDeclaredMethods();  
		for (Method method : methods1) {
			System.out.println(method);
		}
		System.out.println("------------------------------------------------");
		Method[] methods2 = class1.getMethods();  
		for (Method method : methods2) {
			System.out.println(method);
		}
		System.out.println("------------------------------------------------");
		
		try {
			Method method1 = class1.getDeclaredMethod("checkBounds",new Class[]{byte[].class,int.class,int.class});
			System.out.println(method1);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}  
		System.out.println("------------------------------------------------");	
		//如果方法中的无参数,则得到方法时,只需传一个方法名即可
		try {
			//Method method2 = class1.getDeclaredMethod("hashCode");
			//getMethod只获取public的方法
			Method method2 = class1.getMethod("hashCode");
			System.out.println(method2);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}  
	}
}
 

/**
 * Constructor类:同上有四种方法
 * @author Morgan
 *
 */
public class TestConstructor {
	public static void main(String[] args) {
		Class<String> class1 = String.class;
		
		Constructor<?>[] cons1 = class1.getDeclaredConstructors();  
		for (Constructor<?> constructor : cons1) {
			System.out.println(constructor);
		}
		System.out.println("------------------------------------------------");
		Constructor<?>[] cons2 = class1.getConstructors();  
		for (Constructor<?> constructor : cons2) {
			System.out.println(constructor);
		}    
		System.out.println("------------------------------------------------");
		try {
			Constructor<String> con1 = class1.getConstructor(char[].class);
			System.out.println(con1);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}  
		System.out.println("------------------------------------------------");
		try {
			Constructor<String> con2 = class1.getDeclaredConstructor(new Class[]{int.class,int.class,char[].class});
			System.out.println(con2);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}  
	}
}
 

 

/**
 * 由一个class得到一个类的实体
 * @author Morgan
 *
 */
public class TestGetInstance {
	public static void main(String[] args) {
		Class<String> class1 = String.class;
		try {
			//用此种方法,类必须有默认构造函数
			String obj  = (String) class1.newInstance();
			System.out.println(obj.length());
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		
		Constructor<String> con1 = null;
		try {
			con1 = class1.getConstructor(char[].class);
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		}
		
		try {
			String str2 =  (String) con1.newInstance(new char[]{'t','e','s','t'});
			System.out.println(str2);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}  
	}
}
 

/**
 * method方法执行
 * @author Morgan
 *
 */
public class TestMethodInvoke {
	public static void main(String[] args) {
		String testStr = "testStr";  
		Method method = null;
		try {
			method = String.class.getMethod("charAt", new Class[]{int.class});
		} catch (SecurityException e1) {
			e1.printStackTrace();
		} catch (NoSuchMethodException e1) {
			e1.printStackTrace();
		} 
		
		try {
			Object ch = method.invoke(testStr, 1);
			System.out.println(ch);
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		
		
	}
}
 

 

 

 

分享到:
评论

相关推荐

    Java反射机制总结

    ### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...

    java中的反射reflect

    以下我们将深入探讨Java反射的基本概念、主要API以及如何通过给定的代码示例来理解反射的应用。 首先,让我们了解什么是类的反射。在Java中,`java.lang.Class` 类代表了运行时的类信息。我们可以通过一个类的全名...

    java反射JAVA REFLECT (java 反射)

    JAVA REFLECT (java 反射) 取得类的继承结构 - 类所在的包; |- public Package getPackage() - 类的声明方式; |-取得全类名:public String getName() |-只取类名: public String getSimpleName() - 类所继承...

    9.3 Java反射reflect

    Java反射机制是Java编程语言中一个强大的特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。这个特性使得Java具备了高度的灵活性,能够在运行时动态地获取类的信息并调用对象的方法。Java...

    java反射(reflect)

    Java反射(Reflect)是...总结,Java反射是Java语言中的强大工具,虽然带来了一些便利和灵活性,但也需要注意其潜在的风险和性能影响。在实际开发中,应根据具体需求权衡是否使用反射,并确保代码的可读性和可维护性。

    最全面的java反射总结

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心在于`java.lang.Class`类以及相关的类和接口,如`java.lang.reflect`包下...

    Java反射机制总结(实例分析)

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并进行操作。通过反射,开发者可以在程序执行时发现并访问类的字段(fields)、方法(methods)以及构造器(constructors),...

    JAVA反射知识总结

    JAVA反射知识总结涉及到的主要知识点包括: 1. 反射的基本概念: 反射是Java语言中的一个特性,允许程序在运行期间动态地访问和操作类、方法、成员变量等组件。通过反射,可以突破访问控制,动态创建对象,调用方法...

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

    总结,Java反射机制是Java平台灵活性和动态性的体现,它极大地扩展了Java程序的能力,但同时也需要谨慎使用,平衡好其带来的便利和潜在问题。学习和理解反射机制对于深入理解Java以及开发复杂系统至关重要。

    java面试题--反射机制

    Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...

    Java反射性能测试分析

    - [Oracle官方文档](https://docs.oracle.com/javase/tutorial/reflect/):提供关于Java反射机制的详细解释和示例。 - [Effective Java](https://www.amazon.com/Effective-Java-3rd-Edition/dp/0134685997):由...

    java反射机制总结

    ### Java反射机制总结 #### 一、Java反射机制概述 Java反射机制是Java语言的一个重要特性,它允许程序在运行时获取类的信息以及操作类的对象。这种能力使得Java程序能够实现动态性,即在编译期不知道具体类型的...

    java中反射知识总结

    下面我们将深入探讨Java反射的核心知识点。 1. **Chp16** - 可能指的是某个教程或书籍中的第16章,专门讲解反射。在Java中,反射通常被视为高级主题,涉及JVM(Java虚拟机)和元数据的交互。通过Java.lang.Class类...

    Java中的reflect 反射的基本东西,

    Java中的反射机制是Java语言提供的一种强大的工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的...通过理解并熟练掌握Java反射机制,开发者可以更好地利用Java的动态性,提高代码的可扩展性和维护性。

    JAVA反射机制的入门代码

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

    Java反射机制学习总结

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

    java 反射-(reflect)

    总结,Java反射是一个强大的特性,它使得程序在运行时能够动态地获取和修改类的信息。然而,使用时需谨慎,平衡其带来的灵活性和可能的性能损失。对于开发者来说,深入理解反射机制并合理运用,能极大地提升代码的可...

    Java反射经典实例

    总结,Java反射机制提供了对运行时类信息的强大访问能力,虽然存在潜在的风险,但在许多场景下,如框架开发、动态代理、元编程等,它的优势是无可替代的。学习和熟练掌握Java反射,能够显著提升编程的灵活性和解决...

Global site tag (gtag.js) - Google Analytics