zoukankan      html  css  js  c++  java
  • Java实现非法访问异常

    创建ExceptionTest类,在该类的main()方法中,使用反射获得String类的所有域,不要使用setAccessible方法修改这些域的可见性,然后通过反射获得私有域中与”hash”相匹配的int值,并使用try-catch语句块捕获非法访问异常。

    思路分析:

    1. 首先使用Class获得一个代表String类的类对象,然后使用Class类的getDeclaredFields()方法获得所有成员变量,并赋值给一个Field型数组,即得到String类的所有域。
    2. 使用foreach()循环遍历所有域,使用Field类的getName()方法获得该成员变量的名称,如果域的名字是hash,尝试使用Field类的getInt(Object obj)方法获得指定对象中类型为int的该成员变量的值。
    3. 依次捕获IllegalArgumentException异常和IllegalAccessException异常。

    代码如下:

    import java.lang.reflect.Field;
    
    public class ExceptionTest {
        public static void main(String[] args) {
            Class<?> clazz = String.class;						//获得代表String类的类对象
            Field[] fields = clazz.getDeclaredFields();	
            for (Field field : fields) {							//遍历所有域        	
            	System.out.println(field);
                if (field.getName().equals("hash")) {				//如果域的名字是hash
                    try {
                        System.out.println(field.getInt("hash"));	// 输出hash的值
                    } catch (IllegalArgumentException e) {		//捕获IllegalArgumentException异常
                        System.out.println(e);
                    } catch (IllegalAccessException e) {			//捕获IllegalAccessException异常
                    	System.out.println(e);
                    }
                }
            }
        }
    }
    

      效果如图:

  • 相关阅读:
    Python自动化开发-基础语法
    Python自动化开发-简介
    Hello World!
    Mongo导出数据文件导致错误 Got signal: 6 (Aborted)解决方法
    PHP快速排序及其时间复杂度
    PHP读某一个目录下所有文件和文件夹
    PHP获得两个绝对路径的相对路径
    awk神器
    PHP使用Mysql事务
    PHP使用session_set_save_handler陷阱
  • 原文地址:https://www.cnblogs.com/cysolo/p/3570191.html
Copyright © 2011-2022 走看看