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

类:

Java代码

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;
	}
	
}


调用代码:
Java代码

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();   
    }   



结果显示:
Java代码  收藏代码
通过Constructor.newInstance()调用私有构造函数: 
不带参的构造函数    0   null 
带参的构造函数 1   诺基亚

猜你喜欢

转载自chimpp55.iteye.com/blog/2352488