final, finally, finalize的区别

[b]1.final[/b]
final修饰类,说明这个类不能被继承,是以个顶级类。
final修饰变量,说明这个变量是常量。
final修饰方法,表示这个方法不能被重写,不过可以冲在final方法。

比如有个基类Person,里面有一个public final void eat()方法,可以在Person类中重载同名方法,比如public void eat(String name,int age)。假如有一个子类Student,那么在Student中可以override父类的非final方法,但是不能override final方法。

Person


代码如下:


package test2;

public class Person {
private String name;
private int age;

public final void eat()
{
System.out.println("this is in person class");
}

public void eat(String name,int age)
{

}

}


Student

代码如下:


package test2;

public class Student extends Person {

@Override
public void eat(String name, int age) {
// TODO Auto-generated method stub
super.eat(name, age);
}
}


常见的final方法就是Object类累中的wait()和notify()方法。

[b]2.finally[/b]
finally是关键字,在异常处理中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally子句表示不管是否发生异常,都会执行。finally可有可无。但是try...catch必须成对出现。

[b]3.finalize() [/b]
finalize() 方法名,Object类的方法,Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象进行调用。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的子类覆盖 finalize() 方法以整理系统资源或者执行其他清理操作。

代码实例:

代码如下:


class Person
{
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

public String toString()
{
return "姓名:"+this.name+",年龄:"+this.age;
}

public void finalize() throws Throwable{//对象释放空间是默认调用此方法
System.out.println("对象被释放-->"+this);//直接输出次对象,调用toString()方法
}

}

public class SystemDemo {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Person per=new Person("zhangsan",30);
per=null;//断开引用,释放空间
//方法1:
System.gc();//强制性释放空间
//方法2:
// Runtime run=Runtime.getRuntime();
// run.gc();
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值