final、finally的区别和用法

  下面我们先来说说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语句中并且附带着一个语句块,表示这段语句最终总是被执行。

发布了37 篇原创文章 · 获赞 8 · 访问量 5961

猜你喜欢

转载自blog.csdn.net/weixin_43741599/article/details/89919822