一 final, 修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能在子类中重载。
声明类:
final class duck
{
public String name="kyle";
}
class Dahuangya extends duck //error:the Dahuangya can not subclass final calss duck
{
}
声明变量:初始化,且只能读取,不能修改
class duck
{
public final String name;//error writing
public final String na="hello";//right writing
}
public class Finaltest
{
public static void main(String[] argv)
{
duck du=new duck();
/**
du.na="kyle";//error writing
*/
System.out.println(du.na);
}
}
class duck
{
public final String na="hello";//right writing
}
声明方法,
class duck
{
protected String name;
private String color;
public duck(String name,String color)
{
this.name=name;
this.color=color;
}
public final String getName()
{
return this.name;
}
public String getName(String s)
{
return this.name+s;
}
}
class dahuangya extends duck
{
public dahuangya(String name, String color) {
super(name, color);
// TODO Auto-generated constructor stub
}
/**
public String getName() //error-writing
{
return this.name;
}
*/
public String getName(String s)
{
return null;
}
}
因为在超类中方法声明了final 所以子类中不能重载
二:finally
再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。也就是说无论如何都会执行finally语句
try {
Scanner in=new Scanner(new File("D:\\myfile.txt"));
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//双反斜杠,第一个为转义
finally{
System.out.println("hello world");
}
上面finally语句一定会执行