`

final finally finalize 之间的区别

 
阅读更多
/**
 * final finally finalize 之间的区别
 * @author 够潮
 * final 可以修饰变量(静态变量,非静态变量),方法的参数,方法,类
 * 被final修饰的静态变量不能再非静态代码块中初始化
 * 被final修饰的非静态变量不能在静态代码块当中初始化
 * 被final修饰的非静态变量可以在构造器当中初始化,但被final修饰的静态变量则不能在构造器当中初始化
 * 被final修饰的方法的参数,不能被修改,否则编译错误
 * 被final修饰的类不能被继承
 * 被final修饰的方法不能被重写
 * finally只能用在try/catch语句中,并且附带一个语句块,表示这段语句总是被执行
 * finalize,该方法是属于Object类的,所以所有类都拥有该方法,在垃圾收集器(garbage collector)删除对象的时候,调用该方法
 *
 */
public class Demo1 {

	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("执行了finalize()方法");
	}
	private final String str ="";
	private final static String str3;
	private final String str4;
	private final   String str5;
	//private final int a ;//被final修饰的变量在没有初始化的时候,则编译错误
	
	{
		str4="在非静态代码块中初始化";
		//str3="";//被final修饰的静态变量,不能再非静态代码块中初始化
		System.out.println("非静态代码块!");
	}
	static{
		str3 = "在静态代码块中初始化";
		//str = "";被final修饰的非静态变量,不能在静态代码块中初始化
		System.out.println("静态代码块");
	}
	public Demo1(){
		str5 = "";
		//str5 = "";//被final修饰的静态变量不能在构造器当中初始化,但是被final修饰的非静态变量则可以
		System.out.println("构造器");
	}
	public void say(){
		//final String str2;//被final修饰的变量,一定要初始化
		final String str2 = "gouchao";
		//str2 = "gouchao2";//被final修饰的变量,初始化过后,该变量不能被修改
		System.out.println(str2);
	}
	/**
	 * final修饰方法的参数
	 * @param str
	 */
	public  void sayHello( final String str){
		//str="";//被final修饰饿变量在进行第二次赋值的时候,则编译错误
		System.out.println(str);
	}
	/**
	 * 被final修饰的方法 不能被重写
	 */
	public final void hello(){
		
		System.out.println("被final修饰的方法");
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Demo1 demo = new Demo1();
		System.out.println("34");
		//System.gc();//在这个时候demo对象还有用,所以该对象不能被垃圾收集器回收
		demo.sayHello("够潮");
		demo = null;
		//System.gc();//等价于Runtime.getRuntime().gc();

	}

}

 

0
1
分享到:
评论
4 楼 walkingman_c 2011-07-25  
/**
 * final finally finalize 之间的区别
 * @author 够潮
 * final 可以修饰变量(静态变量,非静态变量),方法的参数,方法,类
 * 被final修饰的静态变量不能再非静态代码块中初始化
 * 被final修饰的非静态变量不能在静态代码块当中初始化
 * 被final修饰的非静态变量可以在构造器当中初始化,但被final修饰的静态变量则不能在构造器当中初始化
 * 被final修饰的方法的参数,不能被修改,否则编译错误
 * 被final修饰的类不能被继承
 * 被final修饰的方法不能被重写
 * finally只能用在try/catch语句中,并且附带一个语句块,表示这段语句总是被执行
 * finalize,该方法是属于Object类的,所以所有类都拥有该方法,在垃圾收集器(garbage collector)删除对象的时候,调用该方法
 *
 */
public class Demo1 {

	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("执行了finalize()方法");
	}
	private final String str ="";
	private final static String str3;
	private final String str4;
	private final   String str5;
	//private final int a ;//被final修饰的变量在没有初始化的时候,则编译错误
	
	{
		str4="在非静态代码块中初始化";
		//str3="";//被final修饰的静态变量,不能再非静态代码块中初始化
		System.out.println("非静态代码块!");
	}
	static{
		str3 = "在静态代码块中初始化";
		//str = "";被final修饰的非静态变量,不能在静态代码块中初始化
		System.out.println("静态代码块");
	}
	public Demo1(){
		str5 = "";
		//str5 = "";//被final修饰的静态变量不能在构造器当中初始化,但是被final修饰的非静态变量则可以
		System.out.println("构造器");
	}
	public void say(){
		//final String str2;//被final修饰的变量,一定要初始化
		final String str2 = "gouchao";
		//str2 = "gouchao2";//被final修饰的变量,初始化过后,该变量不能被修改
		System.out.println(str2);
	}
	/**
	 * final修饰方法的参数
	 * @param str
	 */
	public  void sayHello( final String str){
		//str="";//被final修饰饿变量在进行第二次赋值的时候,则编译错误
		System.out.println(str);
	}
	/**
	 * 被final修饰的方法 不能被重写
	 */
	public final void hello(){
		
		System.out.println("被final修饰的方法");
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Demo1 demo = new Demo1();
		System.out.println("34");
		//System.gc();//在这个时候demo对象还有用,所以该对象不能被垃圾收集器回收
		demo.sayHello("够潮");
		demo = null;
		//System.gc();//等价于Runtime.getRuntime().gc();

	}

}
3 楼 walkingman_c 2011-07-25  
123
2 楼 walkingman_c 2011-07-25  
引用
1
1 楼 walkingman_c 2011-07-25  
引用
不错哦
不错哦

相关推荐

Global site tag (gtag.js) - Google Analytics