java的反射机制很强大,可以访问任何对象的私有成员,方法,建立只有私有构造器的
类的对象,那么不是与面向对象的封装性相冲突了吗?呵呵,今天刚学到反射,有点想不通,希望大家解决我心中的疑惑,谢谢!

解决方案 »

  1.   

    偶这个例子不行,改成了公有的才正常:import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;class A {
    private A() {};
    }public class Test
    {
    public static void main(String args []) {
    Class c = null;
    try {
    c = Class.forName("A");
    Constructor ctr = c.getConstructor(new Class[0]);
    ctr.newInstance(new Object[0]);
    } catch(Exception e) {
    e.printStackTrace();
    return;
    }
            
    System.out.println("OK!");

    }
      

  2.   

    import java.util.*;
    import java.io.*;
    import java.lang.reflect.*;public class Reflection
    {
    public static void main(String[] args)throws Exception
    {
    Class cl = Class.forName("PriTest");
    Class[] c2 = {int.class,double.class};
    Constructor con = cl.getDeclaredConstructor(c2);
    con.setAccessible(true);
    Object o = con.newInstance(new Object[]{12,43.4});
    System.out.println(o);
    Class[] c = {int.class};
    Method m = cl.getDeclaredMethod("fsd", c);
    m.setAccessible(true);
    String s = (String)m.invoke(o, new Object[]{32});
    System.out.println(s);
    }
    }class PriTest
    {
    private int x;
    private double y;
    private PriTest(int x,double y)
    {
    this.x = x;
    this.y = y;
    }
    public String toString()
    {
    return this.x + "   " + this.y;

    }
    private String fsd(int x)
    {
    return "test!";
    }
    }我的例子代码
      

  3.   

    con.setAccessible(true);
    这个语句设置了可访问性可以自己配置 SecurityManager 安全管理器来管理权限
    反射 只是提供一种得到类运行时信息的手段