java final 、finally与finalize的区别

final在java中,final一般是指不可变的,是一个修饰符,可以修饰常量、方法、类

public class TestOne{
	final int MAX_ONE=1;
	public void test(){
		MAX_ONE=2;//在这里是错误的,变量被final修饰后不能再赋值
	}
	}

public class TestOne{
	final int MAX_ONE=1;
	public final void test(){
		String name="sdf";
	}
	
	
	}
class TestTwo extends TestOne{
	public final void test(){
		String name="sabc";//在这里是错误的,继承后final方法不能被重写
	}
	
}
public final class TestOne{
	final int MAX_ONE=1;
	public final void test(){
		String name="sdf";
	}
	
	
	}
class TestTwo extends TestOne{//在这是错误的,final类不能被继承

	
}

finally:finally是异常处理的一部分,

Java 中的 Finally 关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally块的内容一定会被执行 。

以下实例演示了如何使用 finally 通过 e.getMessage() 来捕获异常(非法参数异常)

public class ExceptionDemo2 {
   public static void main(String[] argv) {
      new ExceptionDemo2().doTheWork();
   }
   public void doTheWork() {
      Object o = null;
      for (int i=0; i<5; i++) {
         try {
            o = makeObj(i);
         }
         catch (IllegalArgumentException e) {
            System.err.println
            ("Error: ("+ e.getMessage()+").");
            return;   
         }
         finally {
            System.err.println("都已执行完毕");
            if (o==null)
            System.exit(0);
        }
        System.out.println(o); 
      }
   }
   public Object makeObj(int type) 
   throws IllegalArgumentException {
      if (type == 1)  
      throw new IllegalArgumentException
      ("不是指定的类型: " + type);
      return new Object();
   }
}

finalize:finalize-方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。

package Initialization;
class Tank{
        int howFull = 0;
        Tank() { this(0);}
        Tank(int fullness){
        howFull = fullness;
}
    void sayHowFull(){
        if(howFull == 0)
        System.out.println("Tank is empty!");
        else
        System.out.println("Tank filling status : " + howFull);
}
    void empty(){
    howFull = 0;
}
    protected void finalize(){
    if(howFull != 0){
    System.out.println("Error: Tank not empty." + this.howFull);
}
//Normally,you'll also do this:
//Super.finalize(); //call the base-class version
}
}
        public class TankTest {
    public static void main(String[] args) {
    Tank tank1 = new Tank();
    Tank tank2 = new Tank(3);
        Tank tank3 = new Tank(5);
    tank2.empty();
        //Drop the reference,forget to cleanup:
    new Tank(6);
        new Tank(7);
    System.out.println("Check tanks:");
        System.out.println("tank1:");
    tank1.sayHowFull();
        System.out.println("tank2:");
    tank2.sayHowFull();
    System.out.println("tank3");
    tank3.sayHowFull();
    System.out.println("first forced gc()");
    System.gc();
    System.out.println("try deprecated runFinalizerOnExit(true)");
    System.runFinalizersOnExit(true);
    System.out.println("last forced gc():");
    System.gc();
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: final 是一个修饰符,能够用于类、变量和方法,表示它们不能被修改或重写。finally是一个关键字,它在异常处理语句中使用,表示肯定会被执行的代码。finalize是一个Object类中的方法,在垃圾收集器准备回收对象时会调用该方法,用于清理资源。 ### 回答2: 在Java中,finalfinallyfinalize是三个不同的关键字,具有不同的用途和含义。 1. finalfinal是一个修饰符,用于声明一个不能被继承的类、一个不能被重写的方法、或者一个不能被修改的变量。当一个类被声明为final时,该类不能被其他类继承。当一个方法被声明为final时,该方法不能被子类重写。当一个变量被声明为final时,该变量的值不能被修改。 2. finallyfinally是一个关键字,用于定义在try-catch语句块中的一个代码块,无论是否发生异常,该代码块都会被执行。finally块通常用于释放资源,比如关闭文件、网络连接等。 3. finalizefinalize是一个方法,用于在Java对象被垃圾回收器销毁之前进行一些清理工作。finalize方法的定义在Object类中,可以被子类重写。finalize方法在垃圾回收器准备销毁对象时会被调用,但并不能保证一定会执行,因为垃圾回收是由垃圾回收器自行决定的。 总结: final用于修饰类、方法或变量,表示不可继承、重写或修改。finally用于定义在try-catch语句块中的一个代码块,无论是否发生异常,都会执行。finalize是一个方法,在Java对象被销毁之前执行一些清理工作,但不能保证一定会被执行。 ### 回答3: 在Java中,finalfinallyfinalize是三个不同的概念。 1. finalfinal是一个关键字,可以修饰变量、方法和类。当用final修饰变量时,表示该变量的值不可被更改。当用final修饰方法时,表示该方法不可被子类重写。当用final修饰类时,表示该类不可被继承。final主要用于限定对象的状态、行为或结构的不可改变性。 2. finallyfinally也是一个关键字,用于定义在try-catch结构中的一个代码块。无论try块中是否发生异常,finally块中的代码都会被执行。通常用finally来释放资源、关闭文件、数据库连接等必要的清理操作。 3. finalizefinalize()是一个方法名,属于Object类的一个方法,用于Java的垃圾回收机制。当一个对象变成垃圾,即没有任何引用指向该对象时,垃圾回收器会在适当的时机调用该对象的finalize()方法,进行资源释放和清理操作。但是,由于finalize()方法的执行时机不确定,并且Java8中已经不鼓励使用finalize()方法,因此一般不建议使用该方法。 总结:final表示不可改变性,finally表示无论是否发生异常都会执行的代码块,而finalize是垃圾回收器在释放对象时调用的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值