zoukankan      html  css  js  c++  java
  • Android(java)学习笔记49:通过反射获取私有构造方法并且使用

    1. 反射获取私有构造方法并且使用:

    (1)获取字节码文件.class对象

             Class c = Class.forName("cn.itcast_01.Person");

    (2)获取私有构造方法对象

    //Constructor con = c.getConstructor(String.class);这个方法是获取公共构造器,而这是私有构造,所以报错:NoSuchMethodException

    //Constructor con = c.getDeclaredConstructor(String.class);这个方法是获取所有构造器(当然包括私有构造器),但是还是会报错如下:

    IllegalAccessException,异常说明是访问的构造器是私有的,我们不能访问。

    该怎么办呢?这里只有使用暴力访问

      Constructor con = c.getDeclaredConstructor(String.class);

      con.setAccessible(true);//true,则表示反射的对象正在使用时候,应该取消java语言的访问检查

      Object obj = con.newInstance("风清扬");

      System.out.println(obj);

     1 package cn.itcast_02;
     2 
     3 import java.lang.reflect.Constructor;
     4 
     5 /*
     6  * 需求:通过反射获取私有构造方法并使用
     7  * private Person(String name){}
     8  * 
     9  * Person p = new Person("风清扬");
    10  * System.out.println(p);
    11  */
    12 public class ReflectDemo3 {
    13     public static void main(String[] args) throws Exception {
    14         // 获取字节码文件对象
    15         Class c = Class.forName("cn.itcast_01.Person");
    16 
    17         // 获取私有构造方法对象
    18         // NoSuchMethodException:每个这个方法异常
    19         // 原因是一开始我们使用的方法只能获取公共的,下面这种方式就可以了。
    20         Constructor con = c.getDeclaredConstructor(String.class);
    21 
    22         // 用该私有构造方法创建对象
    23         // IllegalAccessException:非法的访问异常。
    24         // 暴力访问
    25         con.setAccessible(true);// 值为true则指示反射的对象在使用时应该取消Java语言访问检查。
    26         Object obj = con.newInstance("风清扬");
    27 
    28         System.out.println(obj);
    29     }
    30 }
  • 相关阅读:
    Ubuntu命令行快捷启动Matlab
    用xmanager6启动Linux上的图形界面程序
    Winscp远程连接Linux主机,上传和下载文件
    Xshell6连接Ubuntu18.04
    Windows10通过VNC远程连接Ubuntu18.04
    获取Linux ip
    关联Anaconda和最新Pycharm2018.3.2
    asp.net mvc 外网获取不到port问题解决
    js 毫秒换算成秒
    c# 监听文件夹动作
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4565748.html
Copyright © 2011-2022 走看看