`
xq328220454
  • 浏览: 3597 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

反射知识1-访问构造方法

阅读更多
今天在家,突然想到了老师讲课没有讲到过反射机制,这是JDK1.5加入的新功能,通过反射,可以在程序中访问已经装载到JVM里的java对象描述,实现访问、检测和修改java对象本身信息的功能.
先列出来我下面写的这个小例子用到的方法
getClass():返回此 类 的运行时类
getDeclaredConstructors():获得构造方法,返回Constructor[]
isVarArgs():构造方法是否含有可变数量的参数
getParameterTypes():构造方法的入口参数类型,返回Class[]
getExceptionTypes():可能抛出的异常,返回Class[]
newInstance():表示的构造方法来创建该构造方法的声明类的新实例,我觉得这个可以想成构造方法的代替。

Example_01 Code:
public class Example_01 {
	String s;
	int i, i2, i3;
	
	private Example_01() {
	}
	
	protected Example_01(String s, int i) {
		this.s = s;
		this.i = i;
	}
	
	public Example_01(String...strings) {
		if(0 < strings.length) {
			i = Integer.valueOf(strings[0]);
		}
		if(1 < strings.length) {
			i2 = Integer.valueOf(strings[1]);
		}
		if(2 < strings.length) {
			i3 = Integer.valueOf(strings[2]);
		}
	}
	
	public void print() {
		System.out.println("s = " + s);
		System.out.println("i = " + i);
		System.out.println("i2 = " + i2);
		System.out.println("i3 = " + i3);
	}
}


Main_01 Code:
import java.lang.reflect.Constructor;

/**
 * 测试类,通过反射访问Example_01类中的所有构造方法,并将该构造方法
 * 是否允许带有可变数量的参数、入口参数类型和可能抛出的异常类型输出
 * @author Xue
 *
 */
public class Main_01 {
	public static void main(String[] args) {
		Example_01 example = new Example_01("10", "20", "30");
		Class exampleC = example.getClass();//返回此 类 的运行时类
		//获得所有构造方法
		Constructor[] declaredConstructors = exampleC.getDeclaredConstructors();
		for(int i = 0; i <declaredConstructors.length; i++) {
			//遍历构造方法
			Constructor constructor = declaredConstructors[i];
			System.out.println("查看是否允许带有可变数量的参数:" + constructor.isVarArgs());
			System.out.println("该构造方法的入口参数依次是:");
			//获取所有参数类型
			Class[] parameterTypes = constructor.getParameterTypes();
			for(int j = 0; j < parameterTypes.length; j++) {
				System.out.println("" + parameterTypes[j]);
			}
			System.out.println("该构造方法可能抛出的异常类型为:");
			//获取所有可能抛出的异常
			Class[] exceptionTypes = constructor.getExceptionTypes();
			for(int j = 0; j < exceptionTypes.length; j++) {
				System.out.println("" + exceptionTypes[j]);
			}
			Example_01 example2 = null;
			while(example2 == null) {
				//如果访问权限是private,则抛出异常,既不允许访问
				try {
					if(i == 0) {//通过执行默认没有参数的构造方法创建对象
						example2 = (Example_01) constructor.newInstance();
					} else if(i ==1) {//通过执行有两个参数的构造方法创建对象
						example2 = (Example_01) constructor.newInstance("7" ,5);
					} else {//通过执行可变参数的构造方法来创建对象
						Object[] parameter = new Object[]{new String[]{"100", "200", "300"}};
						example2 = (Example_01) constructor.newInstance(parameter);
					}
				} catch (Exception e) {
					System.out.println("在创建对象的时候抛出异常,下面执行setAccessibl()方法");
					constructor.setAccessible(true);	//更改为可访问
				} 
			}
		}
	}
}

0
1
分享到:
评论

相关推荐

    JAVA反射知识总结

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

    Android-注解与反射注解知识点反射知识点注解java反射

    1. **基本概念**:反射是Java提供的一种能力,允许程序在运行时动态地获取类的信息(如类名、属性、方法等)并操作这些信息。 2. **获取Class对象**:`Class.forName()`或对象的`getClass()`方法可以获取到对应的...

    java中反射知识总结

    在Java编程中,反射扮演着重要角色,尤其在动态加载类、创建对象、调用方法以及访问私有成员等方面。下面我们将深入探讨Java反射的核心知识点。 1. **Chp16** - 可能指的是某个教程或书籍中的第16章,专门讲解反射...

    java反射知识总结

    ### Java反射知识总结 #### 一、反射的概念与意义 反射是Java中一项非常重要的特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象、调用方法等。这种能力使得Java程序具有了极大的灵活性,特别...

    java反射机制知识点

    1. Class类:在Java中,每一个类都有一个对应的Class对象,它包含了该类的所有信息,如类名、包名、父类、接口、构造器、方法、字段等。我们可以通过Class.forName()方法或者对象的getClass()方法获取到Class对象。...

    Java反射机制知识

    通过反射,开发者可以实现动态加载类、创建对象、调用方法以及访问和修改字段,极大地增强了程序的灵活性和可扩展性。 一、Class类的初始化 当Java程序首次遇到以下情况之一时,会触发类的初始化: 1. 遇到`new`...

    反射案例-仅供查考

    反射机制是Java提供的一种动态类型能力,它使得我们能够在运行时分析类和对象,甚至能够调用私有方法和访问私有变量。这个“反射案例-仅供查考”可能包含了一系列关于如何使用反射进行实际操作的例子。 1. **反射的...

    java反射机制知识点【精通JAVA必知必会】

    - `Class`对象提供了多种方法来获取类的详细信息,如`getModifiers()`获取访问修饰符,`getConstructors()`获取构造方法,`getMethods()`获取公共方法,`getDeclaredMethods()`获取包括私有方法在内的所有方法,`...

    java反射 java反射 java反射java反射

    3. 测试构造方法: - `Constructor[] getConstructors()`: 获取所有公共构造器。 - `Constructor&lt;T&gt; getConstructor(Class&lt;?&gt;... parameterTypes)`: 获取具有指定参数类型的公共构造器。 - `Constructor[] ...

    C#提高知识-001:反射的应用和原理

    在C#编程中,反射是一项强大的工具,它允许我们在运行时检查类型信息并动态地创建对象实例、调用方法或访问字段。本文将深入探讨反射的应用和原理,以帮助你提升C#技能。 首先,我们要理解什么是反射。反射是.NET...

    C#反射简单入门实例

    4. 访问构造函数 我们可以使用Type的GetConstructors方法获取类的所有构造函数,然后根据需要选择合适的构造函数实例化对象。例如: ```csharp ConstructorInfo constructor = myType.GetConstructor(new Type[] { ...

    java 反射的使用

    通过反射,我们可以动态地创建对象、调用方法、访问字段,甚至在运行时发现和修改类的行为。以下是对Java反射使用及相关知识点的详细阐述: 1. **获取Class对象** - `Class.forName(String className)`: 通过全...

    JAVA基础知识精华总结

    - 从最高超类到当前类,静态成员按顺序初始化,然后调用默认构造方法,每次调用构造方法前先初始化非静态对象,最后是当前类的非静态成员初始化和构造方法调用。 4. **构造方法** - 类可以没有构造方法,但有多个...

    653.651.JAVA基础教程_反射-获取运行时类的构造器结构(653).rar

    1. 反射操作通常比直接调用方法或构造器慢,因此在性能敏感的代码中应谨慎使用。 2. 不要滥用反射来访问私有成员,这可能破坏封装原则,导致难以预料的行为。 3. 使用反射时,需要处理可能抛出的异常,如`...

    java_经典Socket编程_反射

    ### Java经典Socket编程与反射知识点详解 #### 一、Java Socket编程 ##### 1.1 Socket编程_TCP服务器端 **知识点描述**: 掌握Java Socket编程的基础知识,并能够编写简单的TCP服务器端程序。 **详细说明**: - *...

    java面试题--反射机制

    ### Java反射机制详解 #### 一、引言 在Java面试中,经常会出现与反射...以上内容不仅解释了Java反射机制的相关知识点,还通过示例代码进行了实践演示,希望能够帮助你在Java面试中更好地理解和运用这一重要特性。

    Java基础知识面试题(2022最新版).docx

    * 类和对象的概念、类的组成部分:成员变量、构造方法、普通方法。 * 抽象类和接口的概念、抽象类和接口的区别。 继承和多态 -------------- * 继承的概念、继承的实现、继承的特点。 * 多态的概念、多态的实现、...

    Java核心知识体系:反射机制详解.pdf

    1. **反射的概念** 反射机制使得Java程序能够在运行时动态地获取类的信息,包括类名、包信息、属性、方法、注解等,并能够动态地调用对象的方法和访问其属性,即使这些方法或属性是私有的。在Java中,反射主要涉及`...

    反射小例子

    代码中使用了`getDeclaredConstructor`方法来获取一个指定类型的构造器,并且设置访问权限以便可以调用私有构造器。 知识点: - `getDeclaredConstructor`方法用于获取指定类型的构造器。 - 使用`setAccessible...

    反射&动态代理(核心知识点讲解)

    3. 获取构造方法:利用反射可以获取类的构造方法,这包括获取类的所有构造方法,获取指定的构造方法,获取公有的构造方法,以及获取包括私有在内的所有构造方法。获取之后,可以通过Constructor对象的newInstance()...

Global site tag (gtag.js) - Google Analytics