`

java反射之使用Constructor调用私有构造函数

 
阅读更多

类:

 

public class Phone {
	int price;
	String brand;
	private Phone(){
		
	}
	private Phone(int price,String brand){
		this.price = price;
		this.brand = brand;
	}
	@Override
	public String toString() {
		return price + "\t"+brand;
	}
	
}

 

调用代码:

public class Test {
	/*通过Constructor.newInstance()创建新的类示例*/ 
	private void newInstanceByConstructor(){ 
		try {
			/*可以使用相对路径,同一个包中可以不用带包路径*/ 
			Class c = Class.forName("com.yang.Phone"); 
			/*以下调用无参的、私有构造函数*/ 
			
			Constructor c0=c.getDeclaredConstructor(); 
			c0.setAccessible(true); 
			
			Phone po=(Phone)c0.newInstance(); 
			System.out.println("不带参的构造函数\t"+po);
			
			/*以下调用带参的、私有构造函数*/ 
			Constructor c1=c.getDeclaredConstructor(new Class[]{int.class,String.class}); 
			c1.setAccessible(true); 
			Phone p1=(Phone)c1.newInstance(new Object[]{1,"诺基亚"}); 
			System.out.println("带参的构造函数\t"+p1);
		} catch (Exception e) { 
			e.printStackTrace(); 
		} 
	}
	public static void main(String[] args) throws Exception{ 
		Test b=new Test(); 
		System.out.println("通过Constructor.newInstance()调用私有构造函数:"); 
		b.newInstanceByConstructor(); 
	} 

 

结果显示:

通过Constructor.newInstance()调用私有构造函数:
不带参的构造函数	0	null
带参的构造函数	1	诺基亚

 

分享到:
评论
1 楼 myhand 2012-08-18  
谢谢分享,感谢。

相关推荐

    java私有构造函数

    ### Java中的私有构造函数:理解其特殊用途与设计模式应用 #### 一、引言 在Java编程语言中,构造函数(Constructor)是用于初始化新创建的对象的关键组成部分。默认情况下,构造函数的访问级别设置为`public`,...

    Java反射获取私有构造函数、属性、方法

    Java 反射机制获取私有构造函数的原理是通过获取类的 Constructor 对象,然后调用其 newInstance 方法来创建类的实例。例如,以下代码演示了如何获取私有构造函数: ```java Constructor[] cts = Class.forName(...

    C#私有构造函数使用示例

    私有构造函数(Private Constructor)是一种特殊类型的构造函数,其访问修饰符为`private`,这意味着它只能在定义它的同一个类内部被调用。这限制了外部类或其他对象直接创建该类的实例,从而实现单例模式、静态类...

    JAVA反射机制的入门代码

    这个特性使得Java具有了高度的灵活性和动态性,尤其是在处理元数据、创建对象、调用私有方法以及访问未导出的类等方面显得尤为有用。以下是对"JAVA反射机制的入门代码"的详细解释。 首先,我们要理解反射的基本概念...

    解析C#中的私有构造函数和静态构造函数

    3. **静态类的模拟**:当类中所有方法和字段都是静态的,但不能声明为`static`类(因为`static`类不能有实例成员),可以使用私有构造函数来防止实例化。 **静态构造函数** 静态构造函数是不带访问修饰符和参数的...

    包含构造函数和析构函数的C++程序

    ### 构造函数和析构函数在C++中的应用 #### 概述 构造函数与析构函数是C++编程语言中非常重要的概念...通过本篇文章的学习,我们应该能够掌握如何定义和使用构造函数与析构函数,并能在实际开发中灵活运用这些知识。

    重写重载构造函数

    私有构造函数可以阻止类被实例化。例如: C#复制代码 class NLog { // Private Constructor: private NLog() { } public static double e = System.Math.E; //2.71828... } 结构类型的构造函数与类的构造函数...

    Java反射性能测试分析

    - 动态创建对象:通过反射调用构造函数创建对象比直接使用new关键字慢得多,尤其是在高迭代次数下。 - 设置字段值:通过反射设置字段值相比直接赋值也明显更慢,这是因为反射需要查找并解析字段描述符。 - 获取字段...

    JAVA 反射机制应用

    - 访问类成员:获取Field、Method和Constructor对象,进而访问类的字段、调用方法或构造函数。 2. **Field类** - Field对象代表类的字段,包括public、private、protected和默认修饰符的字段。 - 使用getField()...

    JAVA反射知识总结

    - 获取私有构造函数:使用`getDeclaredConstructor(参数类型.class)`方法获取,然后通过调用`setAccessible(true)`使私有构造函数在外部可访问,并使用`newInstance(参数值)`进行实例化。 4. 普通方法的反射操作: ...

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

    通过这些类,我们可以实现对Java对象的深度控制,比如访问私有属性、调用私有方法、创建对象等。 首先,让我们了解什么是反射。在编译期间,Java代码被转换为字节码,而反射是在运行时解析这些字节码的能力。这使得...

    java反射机制详解与应用

    本文将深入探讨Java反射机制的原理、应用以及如何使用反射API。 首先,让我们了解如何生成Class对象,这是反射操作的基础。Class对象代表了Java中的类,可以通过以下四种方式获取: 1. 使用`getClass()`方法:每个...

    java 反射机制例子

    3. **可维护性**:过度使用反射会降低代码的可读性和可维护性。 #### 六、总结 Java反射机制是Java语言的一项重要特性,它使得程序能够在运行时获取和操作类的内部信息。虽然反射提供了强大的功能,但在使用时应...

    反射实例-JAVA反射机制

    在Java反射中,针对类的不同组成部分(构造函数、字段和方法),`java.lang.Class`类提供了多种反射调用方式来获取信息。以下是几种常用的反射调用: - **获取构造函数**:`Constructor getConstructor(Class[] ...

    Java反射案例

    使用`Class.newInstance()`方法可以无参构造函数创建对象,但如果有参数的构造函数,需要通过`Constructor`类的`getDeclaredConstructor()`或`getConstructor()`方法获取构造器,然后调用`newInstance()`创建对象。...

    Java反射机制

    4. **`java.lang.reflect.Constructor`**:用于获取并调用类的构造函数。 5. **`java.lang.reflect.Proxy`**:提供动态代理的功能,可以创建代理类和实例。 #### 三、Java反射机制提供的功能 1. **获取类的Class...

    java反射简单例子demo

    4. 测试工具:如JUnit,反射调用私有方法进行测试。 5. 反序列化:将对象从序列化的形式还原为原对象。 总之,Java反射是Java语言灵活性的重要体现,它允许程序在运行时探索和修改自身的结构和行为,极大地扩展了...

    java反射机制

    - `Constructor`类:提供类构造函数的信息和访问构造函数的接口。 - `Field`类:提供类字段的信息和访问字段的接口。 - `Method`类:提供类方法的信息和访问方法的接口。 - `Modifier`类:提供了用于解析类和...

    JAVA反射机制

    对于构造函数、字段和方法,`java.lang.Class`提供了多种反射调用以获取不同信息: - `getConstructor(Class<?>... parameterTypes)`: 获取具有特定参数类型的公共构造函数。 - `getDeclaredConstructor(Class<?>.....

    java 反射机制详解

    - **测试工具**:JUnit 等测试框架利用反射来调用私有方法或构造函数。 - **动态代理**:在不修改原有代码的情况下,为类添加额外的功能。 然而,反射也存在一定的性能开销,因为它打破了 Java 的封装性和安全性,...

Global site tag (gtag.js) - Google Analytics