zoukankan      html  css  js  c++  java
  • luogg_java学习_10_异常_反射

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

    **转载请注明 出自 : luogg的博客园 ** 谢谢配合!

    异常_反射

    异常

    异常就是导致程序中断执行的一段指令流.
    在java中, 对于异常在API中也有明确的定义,叫做异常类.

    异常分类

    • Error : JVM的错误, 程序中不进行处理, 交给虚拟机.
    • Exception : 程序中出现的异常, 可以在程序中进行处理 . Exception 又分为编译时异常,运行时异常.
    • 编译时异常 : 代码编写完成之后编译无法通过. 例如:ParseException(转换异常),ClassCastException类型转换异常
    • 运行时异常 : 代码本身没有问题, 可以通过编译, 运行时候会出现错误.例如 : NullPointerException(空指针异常)、ArithmeticException(数学计算异常,0作被除数)、ArrayIndexOutOfBoundsException(数组角标越界异常)

    异常处理

    1.捕获异常 :try catch 直接处理可能出现的异常
    2.声明异常 : throws 声明告诉调用中可能的异常, 暴露问题, 调用者自己处理

    try{  
          //可能出现异常的代码  
    }catch(Exception1 e1){  
          //处理的方式1  
          e.printStaticTrace();  
    }[catch](Exception2 e2{   
          //处理的方式2
    }[finally]{  
          //一定要执行的代码  
    }  
    
    • finally : 异常的同意出口, 不管程序是否产生异常, finally语句块中的内容一定会被执行.
    • throws关键字 : 用来声明方法, 表示此方法不处理异常, 而是抛给调用处, 谁调用这个方法, 谁就去处理这个异常.
    • throw关键字 : 正常情况下,异常是由JVM抛出的,除了这种情况之外,我们还可以通过 throw 关键字人为的抛出一个异常。

    try,catch,finally 结合的几种方式:

    1. try,catch,finally
    2. try,catch
    3. try,finally

    反射

    简介

    反射机制主要是用来破解类文件的

    正常的文件执行:在源代码已知的情况下,导入类路径,通过 new 关键字实例化该类对象,通过对象名使用这个类
    反射的文件执行:在源代码未知的情况下,对类文件进行破解,然后再去使用这个类

    要想破解类, 就必须要对类进行了解, 类其实也是一种类型, 对于一个类来讲, 应该有属性, 普通方法, 构造方法.
    java提供了Class类, 用来对类本身进行操作, 通过Class类可以完整的得到一个类的结构,例如: 方法,属性等.

    Class类中的常用方法介绍 :

        获取属性相关:
    		getDeclaredFields(): //获取类自己定义的全部属性
    		getFields()://获取类自己定义的和父类继承来的 public 属性
    	获取构造方法: 
    		getConstructors()://获取公共的构造方法
    		getDeclaredConstructors(): //获取所有构造方法
    	获取一般方法:
    		getMethods()://获取自己类和父类的 public 方法
    		getDeclaredMethods()://获取自己类的所有方法
    getName();
        以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
    getModifiers();
        返回此类或接口以整数编码的 Java 语言修饰符。
    
    

    获取class类的三种方法:

    创建 Class 对象
    	Class 类没有构造方法,创建 Class 对象,有三种方法:
    	第一种:Class.forNama("完整包名.类名");		例如:Class.forName("com.weixin.Student");
    	第二种:通过对象名 .getClass();
    	第三种:类名 .class
    
            //第一种方法
    		Class<?> clazz = null;
    		try {
    			clazz = Class.forName("com.weixin.Teacher");
    		} catch (ClassNotFoundException e) {
    			e.printStackTrace();
    		}
    		
    		/*//第二种方法
    		Class clazz2 = Teacher.class;
    		
    		//第三种方法
    		Teacher teacher = new Teacher();
    		Class clazz3 = teacher.getClass();*/
    
            //获取属性
    		Field[] f = clazz.getDeclaredFields();
    		for(Field f1 : f) {
    			//获取属性的名字
    			System.out.println(f1.getName());
    			//获取属性的访问修饰符
    			System.out.println(Modifier.toString(f1.getModifiers()));
    			//获取属性的数据类型
    			System.out.println(f1.getType().getName());
    		}
    

    破解属性

    在API中,提供了表示属性的类 Field
    Field 类常用方法:
    getName():获取属性名
    getType().getName():获取属性类型
    Modifier.toString((f1.getModifiers()));获取属性修饰符private还是public
    

    破解方法:

    Method[] m = clazz.getDeclaredMethods();
    		for(Method m1:m) {
    			System.out.println(Modifier.toString(m1.getModifiers())+" ");
    			System.out.println(m1.getName()+" ");
    		}
    

    方法的运行:

    Class<?> clazz = null;
    		try {
    			clazz = Class.forName("com.weixin.Teacher");
    		} catch (ClassNotFoundException e) {			e.printStackTrace();
    		}
    		
    		Method[] m = clazz.getDeclaredMethods();
    		for(Method m1:m) {
    			System.out.println(m1);
    		}
    
  • 相关阅读:
    Nginx的proxy_cache缓存
    linux服务器优化
    LVS+keepalived负载均衡实战
    bash history(history命令)
    APACHE默认模块功能说明
    MySQL配置文件例子翻译
    Microsoft JET Database Engine (0x80004005) 未指定的错误的完美解决[转贴]
    entity framework 新增 修改 删除 查询
    Flash Builder 找不到所需的 Adobe Flash Player 调试器版本
    sql server 2008 远程连接
  • 原文地址:https://www.cnblogs.com/luogg/p/5932083.html
Copyright © 2011-2022 走看看