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

**转载请注明 出自 : 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);
}

luogg_java学习_10_异常_反射的更多相关文章

  1. luogg_java学习_09_泛型_集合

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 泛型 泛型介绍 1).类内部的属性的类型可以由外部决定: 2) ...

  2. luogg_java学习_07_抽象类_接口_多态学习总结

    这篇博客总结了半天,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 , 抽象 一种专门用来做父类,被继承的. (模板) 格式: abs ...

  3. JavaSE学习总结第27天_反射 & 设计模式 & JDK5、7、8新特性

      27.01  反射_类的加载概述和加载时机 类的加载:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 加载:就是指将class文件读 ...

  4. java学习一目了然——异常必知

    java学习一目了然--异常必知 我们只要学java,异常肯定非常熟悉,该抛的时候抛一下就行.但是这其中还有点小细节需要注意.就用这个小短篇来说一下异常处理中的小细节吧. 异常处理 RuntimeEx ...

  5. Laravel学习笔记之PHP反射(Reflection) (上)

    Laravel学习笔记之PHP反射(Reflection) (上) laravel php reflect 2.1k 次阅读  ·  读完需要 80 分钟 3 说明:Laravel中经常使用PHP的反 ...

  6. cc38b_demo_C++_异常_(2)txwtech在异常中使用虚函数-多态

    //cc38b_demo,21days_C++_异常_(2)txwtech20200121在异常中使用虚函数-多态 //--异常层次结构//*异常的类-创建自己的异常类//*异常派生-就是继承//*异 ...

  7. InvalidClassException异常_原理和解决方案和练习_序列化集合

    InvalidClassException异常_原理和解决方案 当JVM反序列化对象的时候,能找到class文件,但是class文件在序列化对象之后发生了修改,那么反序列化操作也会失败,抛出一个Inv ...

  8. pythond对象、异常、反射的学习笔记

    python多继承,刚开始我是表示惊讶的,毕竟学的php,哪来的多继承?顶多也就是利用接口模拟多继承后者使用反射机制实现.那么还是来看看python的强大吧 1 首先,Python的类继承了多个类,那 ...

  9. Java学习_反射

    什么是反射? 反射就是Reflection,Java的反射是指程序在运行期可以拿到一个对象的所有信息. 反射是为了解决在运行期,对某个实例一无所知的情况下,如何调用其方法. JAVA反射机制是在运行状 ...

随机推荐

  1. IE10,11下_doPostBack未定义错误的解决方法

    出现的原因 .NET2.0和.NET4.0一起发布的浏览器定义文件中有一个错误,它们保存相当一部分浏览器版本的定义.但是浏览器的有些版本(比如IE10,11)则不再在这个范围之内.因此,ASP.NET ...

  2. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  3. 开始用Word 2013来写博客

    第一步:如果从未发布过博客文章的话,需要在菜单里面选这里添加博客账号   第二步:选择正确的设置   第三步:写完博客之后,按这里就可以发布了!   如果以后需要写新的博客的话,还可以直接点这里:   ...

  4. jqGrid的autoencode参数设置为true在客户端可能引发的编码问题

    不久前使用jqGrid+MVC做过一段时间开发. 一开始,分页参数几乎都是默认值,jqGrid的分页功能很好用. 考虑到each input is evil,我们的系统对安全性又有较高要求,所以,为了 ...

  5. vs code插件记录

    最近一段时间一直在迷恋vs code,使用了一段时间,发现它即精简又快速,安装插件又快又稳定而且插件说明也很详细,是一款继sublime后少得的良心前端编辑器,配合上一些插件可以补全一些不足以更趋向于 ...

  6. C#实现二维码功能,winform 以及 asp.net均可以用

    二维码现在用途很多,怎么用C#编程生成呢? 准备 ThoughtWorks.QRCode.dll 需要 一个类 QRCode,这个类专门来生成二维码的 using System; using Syst ...

  7. OpenJDK 编译-Linux环境

    说明:笔者是在Ubuntu 16.04虚拟机中编译 OpenJDK 8 源码下载 http://download.java.net/openjdk/jdk8/ 推荐直接下载openjdk-8-src- ...

  8. 使用Ado.net执行SP很慢,而用SSMS执行很快

    今天遇到一个问题,有用户反应,在site上打开报表,一直loading,出不来结果. 遇到这种问题,我立刻simulate用户使用Filter Condition,问题repro,看来不是偶然事件,通 ...

  9. 自用迷你版的Deferred

    啥也不说贴代码,项目用 /** * 迷你版的deferred */ function Deferred(func) { if (this instanceof Deferred === false) ...

  10. JAVA基础代码分享--学生成绩管理

    问题描述: 从键盘读入学生成绩,找出最高分,并输出学生成绩等级. 成绩>=最高分-10  等级为’A’   成绩>=最高分-20  等级为’B’ 成绩>=最高分-30  等级为’C’ ...