异常处理技巧

java的异常处理涉及到程序流程的跳转,所以,虚拟机需要保存程序的执行流程,以便异常发生时能正确的跳转,这也就导致了使用异常时会引起额外的开销,所以,要谨慎地使用异常。 使用异常有如下几个原则: 1、异常不能代替简单测试,使用异常会引起额外开销。 2、不要为每个可能会出现异常的语句都设置try和catch。 3、避免在方法中抛出(throw)或者捕获(catch)运行时异常RuntimeExcep…

枚举

为什么需要枚举 类常量不好用么?为什么要使用枚举。拿我之前的代码来做例子: 酒店订单的状态公有7种:已创建、支付超时、已取消、待商家确认、待入住、商家取消订单、已消费,我给它们都用一个类常量表示 class OrderStatus { public static final int CRETEA = 1; public static final int TIMEOUT = 10; public s…

注解

自JDK5.0开始,新增了注解的功能。注解是一种特殊的注释,注释会被编译器直接忽略,注解则可以被编译器打包进入class文件,因此,注解是一种用作标注的“元数据”。 Annotation其实就是代码里的特殊标记, 这些标记可以在编译, 类加载, 运行时被读取, 并执行相应的处理。通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息。代码分析工具、开发工具…

Class类

反射库提供了一个丰富且精巧的工具集,可以用来编写能够动态操控Java代码的程序。能够分析类能力的程序称为反射,反射机制功能强大。 Class类 在java运行期间,Java运行时系统始终为所有对象维护一个运行时类型标识。这个信息就会跟踪每个对象所属的类。保存这些信息的类名为Class,可以使用Object类中的getClass方法获取Class类实例。 获取Class类实例的方法 有三种方法可以获…

Modifier类

Class类以及后面将会讲的Field、Constructor、Method类都有一个getModifiers方法。该方法返回一个修饰符值,类型为int,不同的bit修饰符表示不同的含义。然后通过Modifier类的一些方法配合该修饰符可以获取到许多有用的信息。 下面展示Modifier类的一些常用方法(下面都是静态方法): String toString(int modifiers) 返回一个字…

创建运行时类的对象

通过Class类构造实例 如果有一个Class类型的对象,可以用它newInstance方法构造一个实例。 public static void main(String[] args) throws IllegalAccessException, InstantiationException { Class eClass = Employee.class; Employee employee = …

Field类

对任意的一个Object实例,只要我们获取了它的Class,就可以获取它的一切信息。 我们先看看如何通过Class实例获取字段信息。Class类提供了以下几个方法来获取字段: Field getField(name):根据字段名获取某个public的field(包括父类) Field getDeclaredField(name):根据字段名获取当前类的某个field(不包括父类) Field[] …

Method类

获取Method信息 我们已经能通过Class实例获取所有Field对象,同样的,可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method: Method getMethod(name, Class…):获取某个public的Method(包括父类) Method getDeclaredMethod(name, Class…):获取当前类的某个Met…

动态代理

代理模式(Proxy)为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。 代理分为静态代理以及动态代理,在学习完反射后,就可以完成动态代理。 动态对象 要想创建一个代理对象,需要使用Proxy类的newProxyInstance方…