java常识

java关键字

类和接口

  abstract标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。

  class类,

  格式为:

  class类名 extends父类名称{

  属性声明及初始化;方法声明及方法体;

  }

  implements实现

  import导入

  interface接口。

  格式为:

  interface 接口名 [extends 父接口列表]{

  [public][static][final]属性类型属性名=常量值;

  [public][abstract]返回值类型方法名(参数列表);

  }

  package打包,声明仅仅指定了文件中所定义的类属于哪一个包。

  static静态属性,用来描述一个类下所有对象共享的属性。

  throws扔,一个方法中发生异常但没有捕获,在方法头声明,由方法调用者处理。//throw后不允许有其他的语句。

void空

 

Java的finally理解

1.为什么要用finally
先看一个没有finally的异常处理try-catch语句:
假设count为要使用到的资源,并且用完要求释放此资源。那么我们可以把释放资源的语句放到try-catch后执行,当前的程序不管是在执行完try语句块还是catch语句块,都会顺序执行到下面释放资源的语句。
int count = 0;  //
初始化资源
try{
  count++;
  if(count == 1) throw new Exception("Exception in try");
}catch(Exception e){
  System.out.println("catch block");
}
count = 0; //
释放资源

但是,如果在trycatch中有多条return语句,那么在每条return语句之前,都要先执行释放资源的语句:
public void f() throws Exception {
 int count = 0;  //
初始化资源
 try{
   doSomething;
   statementMayCauseException;  //
可能会抛出异常的语句,若异常没有被catch,则直接抛出,也不会执行到try-catch下面的语句
   doSomething;
   if(count == 1) throw new Exception1("E1 in try");
   if(count == 2) throw new Exception2("E2 in try");
 }catch(Exception1 e){
   count = 0; //
释放资源
   throw e;  //
再次把异常抛出,让上一级捕获。此时将不会执行catch外的语句,所以要先释放资源
 }catch(Exception2 e){
  count = 0; //
释放资源
  return; //
返回了,也不会执行catch外的语句,所以要先释放资源
 }
 count = 0; //
释放资源
}
这样,就需要在每一个可能返回的地方,以及每一个可能出现异常而导致程序跳转的地方,考虑如何释放资源,导致复杂和冗余。

所以,需要finally语句。
把资源释放或状态还原的代码放到finally块中,可以保证在trycatch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。
int count = 0;
try{
 count++;
 if(count == 1)throw new Exception();
}catch(Exception e){
}finally{
 count = 0;
}

2.finally什么时候执行
finally
return语句之后,跳转到上一级程序之前执行。
public class Test { 

 public static void main(String[] args) {  
  System.out .println(test ());  
 }   
 public static String test() {  
  try {  
   System.out .println("try block");  
   return test1 ();  
  } finally {  
   System.out .println("finally block");
   //return "finally";    
  }  
 }  
 public static String test1() {  
  System.out .println("return statement");  
  return "after return";  
 }  
}
结果:
try block
return statement
finally block
after return

分析:
1.try
语句块,return test1(),则调用test1方法
2.test1()
执行后返回"after return",返回值"after return"保存在一个临时区域里
3.
执行finally语句块。若finally语句有返回值,则此返回值将替换掉临时区域的返回值
4.
将临时区域的返回值送到上一级方法中。


参考:
thinking in Java
http://blog.csdn.net/jiasanshou/article/details/6996932


以上为个人理解,若有不对之处,望不吝指正。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值