下面我们先来说说final修饰符有何作用?方法又有哪些???final主要方法有以下几个。
第一:用来修饰数据。数据包括成员变量和局部变量,该变量只能被赋值一次且它的值是无法被改变。对于成员变量来讲,我们不须在声明时、构造方法或者初始化块中对他赋值。
public class FinaMemberVariables{
// 当final修饰的实例变量,必须在非静态初始化块、声明该实例变量或构造器中指定初始值。
//第一种。声明该实例变量并指定初始值
final int int_a=10;
//第二种。初始化块的时候指定初始值
final int int_B;
{
int_B=11;
}
//第三种。在构造器中指定初始值
final int int_c;
public FinalMemberVariables(){
int_c=13;
}
//当final修饰类变量的时候,必须在静态初始化块中指定初始值或声明该类变量是指定初始值
//第一种。在静态初始化块中指定初始值
final static String str_A=”12345”;
//第二种。声明该类变量是指定初始值
final static String str_B;
static{
str_B=”123456”;
}
}
第二:修饰局部变量。使用final来修饰局部变量的时候,既可以在定义时指定默认值,也可以不指定默认值。但值得注意的是,在变量的生存中它的值不能被改变。
public class FinalLocalVariable{
public static void main(String[] args){
//第一种。在定义时指定默认值,不能再后面的代码中为变量赋值
final int int_A=10;
//下面的赋值语句是非法
//int_A=13;
//第二种。在定义时不指定默认值,可以在后面的代码中赋值一次,也仅仅赋值一次。
final String Str_A;
str_A=”123456”;
//下面的赋值语句是非法
//str_A=”123456789”;
}
//第三。注意点,不能对final修饰的形参赋值
public void test(final int number){
// number=20;
}
}
第三:修饰方法。使用final方法的原因有两个,第一个原因是把方法锁定,以防任何继承类修改它的含义,通俗地说就是该方法无法被重写;第二个是提高效率。
public class FinalMethod{
public void pritnt(){
System.out.println(“这个FinalMethod 类里面的pritnt方法的输出”);
}
public final void finalPrint(){
System.out.println(“这个finalpritnt方法的输出”);
}
}
class FinalMethodTow extends FinalMethod{
public void print(){
System.out.println(“FinalMehtodTow类里面的print()的输出结果”);
}
//错误代码演示,无法重写final修饰的方法
public void finalPrint(){
System.out.println(“FinalMehtodTow类里面的finalPrint ()的输出结果”);
}
}
第四:修饰类。当用final修饰一个类时,表示这个类不能被继承。在使用final修饰类的时候,要慎重选择,除非这里类以后不会用来继承或者出于安全的考虑,尽量不要设置为final类。
public final class FinalClass{
Int age=10;
}
//classDemo2 无法继承FinalClass
//class classDemo2 extends FinalClass{
//}
那么finally又有何作用呢?一般作用在哪里??
finally块一般用来关闭物理资源(比如:数据库连接、网络连接、磁盘文件等),这些物理资源必须显示关闭。除非在try块、catch块中调用了退出虚拟机的方法。否则不管在try块、catch块中执行怎样的代码或者出现怎样的异常,异常处理的finally块一定会被执行。Finally结构使代码总会执行,而不管有无异常发生。使用finally可以维护对象的内部状态,并可以清理非内存资源。特别是在数据库连接这方面,如果程序程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。
public class FinallyDemo1 {
public static void main(String[] args){
RandomAccessFile accessFile=null;
try {
accessFile =new RandomAccessFile("E:\\Java资料\\20190420\\思考致富.txt","r");
accessFile.writeChars("123456");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(accessFile!=null){
System.out.println("我想跳来这里");
try{
accessFile.close();
}catch(IOException e){
// TODO Auto-generated catch block
}
}
}
}
}
执行结果如下:
到了我们今天要谈的主题啦!final和finally的主要区别和功能。
final是用来修饰数据、变量、方法和类;而finally只能用在try/cath语句中并且附带着一个语句块,表示这段语句最终总是被执行。