首页 > 其他分享 >final、finalize()、finally的区别和throw 与 throws 区别

final、finalize()、finally的区别和throw 与 throws 区别

时间:2024-10-18 19:51:02浏览次数:3  
标签:finalize 区别 final finally 修饰 异常 throw 赋值

final是关键字、finalize() 是方法、finally是用于try语句中的区块标志

一、final

1、修饰类:被修饰得类不能被继承

2、修饰方法:被修饰得方法不能被子类重写

3、修饰变量:

  • 对于基本数据类型:被修饰的变量称之为常量,变量值在初始化赋值完成之后不能被改变

    赋值方式:

            ① 可以定义变量时直接赋值

            ② 可以在代码块中进行赋值(静态代码块和构造代码块)

            ③ 可以再构造方法中进行赋值。

    总结起来,就是要在对象创建之前完成赋值的过程。

  • 对于引用类型:被final修饰的引用类型的变量(比如对象、String),一旦赋值了,那么他的地址也就确定下来了,不能再被修改了;但是它的内容可以被修改

二、finalize() 方法

1、概念

        在Java中,finalize()是一个方法,被定义在java.lang.Object类中。用于在对象被laj之前进行特定的清除操作。

2、作用

  1. 清除资源:可以用finalize()方法释放对象所持有的一些资源,比如关闭文件、释放网络连接等。可以在对象被回收之前进行必要的资源清理,避免资源泄露。
  2. 执行未完成的操作finalize()方法可以用于执行一些未完成的操作,例如取消未完成的任务或者回归事务。

3、注意事项

  1. 不建议过度依赖:因为垃圾回收的时间是不确定的,无法保证finalize()方法何时被调用。
  2. 执行代价高昂:由于finalize()方法的调用是由垃圾回收器负责的,并且可能会导致对象重新存活,所以它的执行会引入性能和内存开销。在现代的Java版本中,更推荐使用其他机制来进行资源清理,如使用try-with-resources语句块来自动关闭资源。

三、finally

try 关键字最后可以定义 finally 代码块。 finally 块中定义的代码,总是在 try 和任何 catch 块之后、方法完成之前运行。

正常情况下,不管是否抛出或捕获异常 finally 块都会执行。

四 throw throws 区别

不同点:

一:位置不同。throws用在函数上,后边跟的是异常类,可以跟多个异常类。throw用在函数内,后面跟的是异常对象。

二:功能不同。

①throws用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先得处理方式。throw抛出具体的问题对象,执行到throw。功能就已经结束了跳转到调用者,并将具体的问题对象抛给调用者,也就是说throw语句独立存在时,下面不要定义其他语句,因为执行不到。②throws表示出现异常的一种可能性,并不一定会发生这些异常,throw则是抛出了异常,执行throw则一定抛出了某种异常对象。

相同点:

两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

标签:finalize,区别,final,finally,修饰,异常,throw,赋值
From: https://blog.csdn.net/2301_79814793/article/details/143060730

相关文章

  • Maven与Gradle的区别
    Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。官网Maven官网: https://maven.apache.orgGradle官网: https://gradle.org一、Windows配置环境1.Maven......
  • script 标签中 defer 和 async 的区别
    https://www.cnblogs.com/huangtq/p/18422775 在 <script> 标签中,defer 和 async 是两个用于控制JavaScript脚本加载和执行行为的属性。它们的主要区别在于加载顺序和执行时机。具体如下:1. defer 属性加载方式:使用 defer 的脚本在HTML解析的同时异步加载。......
  • C++ 基础-面试题01(C和C++区别、C结构体和C++结构体区别、C和C++ static区别、a和&a区
    1.C和C++的区别特性CC++编程范式面向过程编程面向对象编程+面向过程编程+泛型编程类和对象不支持类和对象支持类和对象,封装、继承、多态等特性标准库标准库有限,如stdio.h、stdlib.h丰富的标准库,如STL(容器、算法)函数和运算符重载不支持支持内存管理手动管理,使用malloc......
  • C++ 基础-面试题02(final和override关键字、sizeof和strlen区别、strcpy、sprintf 与me
    1.final和override关键字在C++中,final和override关键字是在面向对象编程中用于处理类的继承和多态的。它们主要用于管理派生类和虚函数,提供额外的安全性和代码可读性,防止意外的函数重写或错误的重载行为。1.final关键字final关键字用于防止进一步的继承或函数重......
  • paper、essay、thesis和dissertation的区别
    paper、essay、thesis和dissertation都有论文的意思。paper和essay指与获取学位无关的相对较短的文章。essay通常结构简单,内容较少。而researchpaper则内容丰富全面,且对引用的内容的可信度有较高要求。但是单就essay和paper这俩词来说,区别还是要看具体语境。比如UPEI的网站上就......
  • Archi - 无单点原则 和 可水平扩展原则 的区别
    在系统设计中,无单点原则和可水平扩展原则是确保系统高可用性和灵活性的两个重要方面,它们之间存在明显的区别,具体如下:一、无单点原则定义:无单点原则是指在设计系统时,应避免存在单个点(组件、服务或设备)的故障导致整个系统不可用的情况。换句话说,系统应该具备冗余和容错能力,以确......
  • WebGIS、桌面GIS、移动GIS、三维GIS的区别
    GIS是一种基于计算机的工具,它可以对空间信息进行分析和处理(简而言之,是对地球上存在的现象和发生的事件进行成图和分析)。 GIS技术把地图这种独特的视觉化效果和地理分析功能与一般的数据库操作(例如查询和统计分析等)集成在一起。1  WebGISWebGIS是建立在Web技术上的一种......
  • 一文说清楚http、tcp、socket、websocket区别
    写在开头阅读本文,需要您对tcp/ip协议簇协议有一定的了解,本文旨在带你了解Socket到底是啥,他与tcp/ip协议簇、WebSocket、Http等协议之间的关系OSI网络七层模型第一层:应用层,定义了用于在网络中进行通信和传输数据的接口;(Http协议位于该层)第二层:表示层,定义不同系统中数......
  • P9351 [JOI 2023 Final] Maze 题解
    Description给定一张\(R\timesC\)的地图,其中.可以走,而#不能走。一次操作可以将\(N\timesN\)的正方形范围内所有点变成.,给定起点和终点,求最少需要几次操作使得起点和终点连通(只能上下左右移动)。\(R\timesC\le6\times10^6\),\(N\leR\leC\)。Solution先考虑怎么......
  • springmv的过滤器和拦截器的区别是什么
    一个请求进来的时候,先交给web服务器提供的过滤器,例如springboot项目,提供的服务器也就是内置的tomcat,过滤器处理完成以后,然后会来到servlet,有一个dispatcherServlet会调用拦截器,再由dispatcherServlet分发给对应的Controller,处理完请求后,会原路返回,再回到拦截器,再回到过滤器,最终响......