`
yuyiming1986
  • 浏览: 62238 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

final&finally&finalize

阅读更多
1.final关键字可以用来修饰类,成员方法,方法的参数,成员变量(静态和非静态的)

  (1).final修饰类表示类为终类,不能被继承,String就是这样的一个类.

  (2).final修饰一个成员方法时,此方法在子类中不能被覆盖.

  (3).final修饰成员变量,如果final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,即是个常量;如果final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,而所引用的对象的成员属性是可以改变的.

  (4).由关键字abstract定义的抽象类含有必须由继承自它的子类实现的抽象方法,因此无法同时使用final和abstract来修饰同一个类.同样final也不能用来修饰接口,final修饰的类其成员方法都是不能够被重写的。


2.finally块,try{}块中有return,continue, break中并不会影响finally块的执行,finally块会在return之前执行.同样,finally语句块是在循环被跳过(continue)和中断(break)之前被执行.

(1).return-finally测试代码:

public class Main {
	
	public static void main(String[] args) {
		
		int i = 0;
		
		try{
			if(i == 0){
				System.out.println("before return");
				return ;	
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			System.out.println("call finally block");
		}
	}
}


输出:
before return
call finally block

(2).break-finally测试代码:
public class Main {
	
	public static void main(String[] args) {
		
		
		for(int i = 0; i < 2; i++){			
			try{
				if(i == 1){
				   break;
				}
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				System.out.println("call finally block-"+i);
			}
	    }
	}
}


输出:
call finally block-0
call finally block-1


(3).continue-finally测试代码:
public class Main {
	
	public static void main(String[] args) {
		
		
		for(int i = 0; i < 2; i++){			
			try{
				if(i == 1){
					continue;
				}
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				System.out.println("call finally block-"+i);
			}
	    }
	}
}


输出:
call finally block-0
call finally block-1


3.finalize方法

  finalize方法属于java.lang.Object类,它的定义如下:
  protected void finalize()throws Throwable{}

  finalize()方法是GC运行机制的一部分,finalize方法是在GC清理它所从属的对象时被调用,通常被用来释放资源,如果在执行它的过程中抛出无法捕获的异常,GC将终止对此对象的清理,并且此异常会被忽略.

  程序调用System的gc()方法,引起GC的执行,GC在清理对象时会调用它的finalize()方法.

  测试代码:


 
class Test{
	protected void finalize()throws Throwable{
		System.out.println("call finalize()");
	}
}


public class Main {
	
    public static void main(String[] args) {
		
		Test t = new Test();
		t = null;
		System.gc();
	}
  }


  输出:
  call finalize()
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics