简单给你个例子:
import java.lang.reflect.Method;
public class CallMethod {
public static void main(String[] args) {
CallMethod call=new CallMethod();
try {
Method method=CallMethod.class.getMethod("sunvins",(Class[])null);
method.invoke(call, (Object[])null);
Method method1=CallMethod.class.getMethod("sunvins1",String.class,int.class);
method1.invoke(call, "smile",7);
Method method2=CallMethod.class.getMethod("sunvins2",(Class[])null);
String s=(String)method2.invoke(call, (Object[])null);
System.out.println(s);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 无参无返回值
*/
public void sunvins(){
System.out.println("---haha");
}
/**
* 带参数
* @param s
* @param i
*/
public void sunvins1(String s,int i){
System.out.println("--s="+s);
System.out.println("--i="+i);
}
/**
* 带返回值的
* @return
*/
public String sunvins2(){
return "well";
}
}
可以选择三种方法来进行异常处理
1对代码块用try..catch进行异常捕获处理;
2在 该代码的方法体外用throws进行抛出声明,告知此方法的调用者这段代码可能会出现这些异常,你需要谨慎处理。此时有两种情况:
如果声明抛出的异常是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果声明抛出的异常是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
3在代码块用throw手动抛出一个异常对象,此时也有两种情况,跟2)中的类似:
如果抛出的异常对象是非运行时异常,此方法的调用者必须显示地用try..catch块进行捕获或者继续向上层抛出异常。
如果抛出的异常对象是运行时异常,此方法的调用者可以选择地进行异常捕获处理。
(如果最终将异常抛给main方法,则相当于交给jvm自动处理,此时jvm会简单地打印异常信息)
常处理和设计的建议
1. 只在必要使用异常的地方才使用异常,不要用异常去控制程序的流程
2. 切忌使用空catch块
3. 检查异常和非检查异常的选择
4. 注意catch块的顺序
5. 不要将提供给用户看的信息放在异常信息里
6. 避免多次在日志信息中记录同一个异常
7. 异常处理尽量放在高层进行
8. 在finally中释放资源
有两中方式:1.捕获异常,自己处理.
2.throw出去,让别人处理.
举个例子:
public class A{
try{
可能放生异常的语句。
}catch(Exception e){
e.getMessage();//自己处理
}
}
public class A throws Exception{
可能放生异常的语句。
}//throw出去,让别人处理
注意这里用的是throws
如果在方法里面则用throw
举例:
public class A{
try{
可能放生异常的语句。
}catch(Exception e){
e.getMessage();//自己处理
throw new Exception ("");
}
}
SampleModel 取样模型
Databuffer 数据缓冲区
Raster 光栅
Sample 样本
band 带
SampleModel是java awt中的一个抽象类,它定义了一个接口,用于提取一幅图像中的像素(pixel)的样本(Sample)。
一幅图像包含了许多数据,而所有的数据是以像素为基本单位来表达的(像素的集合),其中每个像素又由若干样本来构成。
样本(Sample),是指对一幅图像取样得到的属于某个带的单体数据,
而带(band),是一副图像中的特定类型的样本的全体。
例如,1个像素可包含3个样本、分别代表红、绿、蓝这三个基色。于是就说以三基色来定义的一幅图像包含了3个带:第一个带含来自图像中的所有像素的红色样本,第二个带含所有的绿色样本,第三个带含所有的蓝色样本。
内存存放方式:像素可用不同方式来进行存储。如,把一个带的所有像素按顺序进行存放的方式、和把单个像素所含的样本组(例如三基色的三个样本)的各个样本逐组顺序存放的方式,等等。
SampleModel的子类用来指定样本的表达类型(如,是非负的8比特类型byte还是整数类型的16比特short,等),以及样本在内存的存放格式。Java 2D(tm)提供的图像处理内置API不可能支持所有的样品类型,但通常都会支持16比特无符号整数类型(0 -65535)或更低的类型,其中,有些API支持的数据类型会有很多。
1组像素可表示为1个光栅(Raster。例如一个扫描行)。光栅含1个DataBuffer和1个SampleModel。使用SampleModel可以对DataBuffer中的样本进行存取,有些还可能提供机器级别的信息,帮助编程者直接操作DataBuffer中的样品和像素。
SampleModel处理图像通常是后退法。高效的编程是,把SampleModel 转换(cast)到适当的子类,从中提取出直接操作DataBuffer中的像素所需的信息。 请参考
Atomic原子性、Consistency一致性、Isolation隔离性和Durability持久性。
原子性:指整个事务是不可以分割的工作单元。只有事务中所有的操作执行成功,才算整个事务成功,事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该回到执行事务前的状态。
一致性:指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对于银行转账事务,不管事务成功还是失败,应该保证事务结束后两个转账账户的存款总额是与转账前一致的。
隔离性:指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。
持久性:指的是只要事务成功结束إ它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
本文并不讨论应该采用何种事务处理方式,主要目的是讨论如何更为优雅地设计事务服务。仅以JDBC事务处理为例。涉及到的DAO,Factory,Proxy,Decorator等模式概念,请阅读相关资料
Java语言提供两种异常处理机制:捕获异常和声明抛弃异常。
1、捕获异常:
(1)在Java程序运行过程中系统得到一个异常对象是,它将会沿着方法的调用栈逐层回溯,寻找处理这一异常的代码。
(2)找到能够处理这种类型异常的方法后,运行时系统把当前异常交给这个方法处理;如果找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
(3)捕获异常是通过try-catch-finally语句实现的。语法为:
try{
}catch(ExceptionName1 e){
}catch(ExceptionName2 e){
}
}finally{
}
2、声明抛弃异常:
(1)当Java程序运行时系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃异常。
(2)声明抛弃异常是在一个方法声明中的throws子句中指明的。如:
public int read() throws IOException{
}
其中throws IOException就是声明抛弃异常,throws后可以跟多个异常类型。
扩展资料:
程序设计语言的异常机制:
1、多数语言的异常机制的语法是类似的:用throw或raise抛出一个异常对象(Java或C++等)或一个特殊可扩展的枚举类型的值(如Ada语言);
2、异常处理代码的作用范围用标记子句(try或begin开始的语言作用域)标示其起始,以第一个异常处理子句(catch, except, resuce等)标示其结束;可连续出现若干个异常处理子句,每个处理特定类型的异常。
3、某些语言允许else子句,用于无异常出现的情况。更多见的是finally, ensure子句,无论是否出现异常它都将执行,用于释放异常处理所需的一些资源。
(1)C++异常处理是资源获取即初始化(Resource-Acquisition-Is-Initialization)的基础。
(2)C语言一般认为是不支持异常处理的。Perl语言可选择支持结构化异常处理(structured exception handling)。
(3)Python语言对异常处理机制是非常普遍深入的,所以想写出不含try, except的程序非常困难。
参考资料来源:
百度百科-异常处理
Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。
这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。
Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。Class没有公共构造方法。
Class对象是在加载类时由Java虚拟机以及通过调用类加载器中的defineClass方法自动构造的,因此不能显式地声明一个Class对象。虚拟机为每种类型管理一个独一无二的Class对象。
也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。
如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。基本的Java类型(boolean、byte、char、short、int、long、float和double)和关键字void也都对应一个Class对象。
每个数组属于被映射为Class对象的一个类,所有具有相同元素类型和维数的数组都共享该Class对象。一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:2.714秒