`

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开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    eclipse安卓开发必备工具

    "分享一个在Java中反射获取私有构造函数、属性、方法" 我一直以为类的私有构造函数、属性、方法除了类自身其他类是无法访问的,前几天正好学习Spring框架,在学习Spring框架基础 Bean包时,写了一个简单的例子,类似...

    java面试800题

    "构造函数(constructor )在对象创建时初始化。 构造函数是和类同名的函数,没有返回类型,构造函数不能在普通的程序里面调用,只有当这个类被应用new实例化的时候才会被运行。构造函数没有返回类型,实际上,构造...

    JAVA面试题最全集

    给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和...

    JS—ES6 class语法糖

    通过构造函数生成实例对象的特点:首字母大写,new运算符调用。同时私有的属性放在函数对象中,方法放在实例对象的原型下。 ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过...

    java 面试题 总结

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...

    新手学习C++入门资料

    上面例子中,第一次调用show()函数时,让编译器自动提供函数原型中指定的所有默认参数,第二次调用提供了第一个参数,而让编译器提供剩下的两个,第三次调用则提供了前面两个参数,编译器只需提供最后一个,最后一...

    超级有影响力霸气的Java面试题大全文档

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。  接口(interface...

    createClass:提供简单快速创建可维护、可扩展的(继承、重写)类的方法

    * @param Function `constructor` 类的构造体函数 * @param Object `prototype` 将会扩展到原型上的一组对象方法 * @param Function `parentConstructor` 要继承的父类,支持多继承(多继承情况下第一个出现的...

    JavaScript 私有成员分析

    对象 JavaScript操作都是关于对象的。数组(Array)是对象,函数(Function)是对象。... 对象可以通过构造器(constructor)生成,构造器是个初始化对象的函数。构造器在这里扮演了其他语言中“类”扮演的角色,也提

    javaSE代码实例

    10.4.1 构造器的调用流程及默认构造器 182 10.4.2 自定义构造器需要注意的问题 185 10.4.3 不能继承构造器 186 10.4.4 调用兄弟构造器 187 10.5 单列模式 189 10.6 Java程序的加载过程 190 10.7 小结 ...

    语言程序设计课后习题答案

    由于图形用户界面的应用,程序运行由顺序运行演变为事件驱动,使得软件使用起来越来越方便,但开发起来却越来越困难,对这种软件的功能很难用过程来描述和实现,使用面向过程的方法来开发和维护都将非常困难。...

    net学习笔记及其他代码应用

    抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。 41.构造器Constructor是否可被override? 答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被...

    C++第一次大作业

    这个作业将让你去练习建立一些简单的类和使用C++的基本功能,包括:封装,引用,动态内存开辟, 简单构造函数和析构函数和const。 下面给的程序片段未经过编译或调试. 做出合理的错误修正是你任务的一部分。 一般的,...

Global site tag (gtag.js) - Google Analytics