欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

面试题:私有构造方法类外部能访问吗,用什么方法?反射

程序员文章站 2022-04-18 21:44:07
反射的时候通过暴力破解是可以访问的 用反射的方法调用上面的类 对构造器进行暴力破解后,私有的构造也可以访问,这个构造器的获得要通过getDeclaredConstructor()方法 ......

反射的时候通过暴力破解是可以访问的

package com.swift.fanshe;

import java.util.List;

public class Fanshe {
    
    String name="swift";
    private Fanshe(List list) {
        System.out.println("list");
    }
}

用反射的方法调用上面的类

package com.swift.fanshe;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class TestFanshe {
    
    @Test
    public void test() throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
        
        Class clazz=Class.forName("com.swift.fanshe.Fanshe");
        Constructor c=clazz.getDeclaredConstructor(List.class);
        c.setAccessible(true);//暴力打开私有构造
        Fanshe fanshe=(Fanshe) c.newInstance(new ArrayList());
        System.out.println(fanshe.name);
        
    }
}

对构造器进行暴力破解后,私有的构造也可以访问,这个构造器的获得要通过getDeclaredConstructor()方法