手机网站开发看什么书/做一个网站
1 异常处理之(捕获异常)
(一般处理运行时异常)
(try-catch-finally子句)
(finally一般用于文件最后关闭)
(catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了,会报错)
(Exception是父类放在最后,如果前面没有捕获到,就让最大的类处理)
(e.printStackTrace();——>可以打印出异常位置信息,定位出来)
语法规则:
try{//放置程序可能出现问题的代码
}catch(异常类型 异常名称){//放置处理的代码
}finally{//释放资源
}//什么异常类型就放什么异常,运行异常就放指定的运行异常类,或者他们的父类RuntimeException,或者Exception
//声明捕获的类型要么和抛出来的相同,要么有父子关系
try多语句如果第一个抛异常,被捕获到之后,第一个之后的都不会执行了
catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了,会报错
try:
try
语句指定了一段代码,该段代码就是异常捕获并处理的范围。在执行过程中,当任意一条语句产生异常时,就会跳过该条语句中后面的代码。代码中可能会产生并抛出一种或几种类型的异常对象,它后面的catch
语句要分别对这些异常做相应的处理。
一个try语句必须带有至少一个catch
语句块或一个finally
语句块。
注意事项
- 当异常处理的代码执行结束以后,不会回到
try
语句去执行尚未执行的代码。
catch:
-
每个
try
语句块可以伴随一个或多个catch
语句,用于处理可能产生的不同类型的异常对象。 -
catch
捕获异常时的捕获顺序:如果异常类之间有继承关系,先捕获子类异常再捕获父类异常。
finally:
- 不管是否发生了异常,都必须要执行。
- 通常在
finally
中关闭已打开的资源,比如:关闭文件流、释放数据库连接等。
try-catch-finally
语句块的执行过程详细分析:
- 程序首先执行可能发生异常的
try
语句块。 - 如果
try
语句没有出现异常则执行完后跳至finally
语句块执行; - 如果
try
语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch
语句块执行处理。 catch
语句块可以有多个,分别捕获不同类型的异常。catch
语句块执行完后程序会继续执行finally
语句块。finally
语句是可选的,如果有的话,则不管是否发生异常,finally
语句都会被执行。
【示例】异常处理的典型代码(捕获异常)
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Test8 {public static void main(String[ ] args) {FileReader reader = null;try {reader = new FileReader("d:/a.txt");char c = (char) reader.read();char c2 = (char) reader.read();System.out.println("" + c + c2);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (reader != null) {reader.close();}} catch (Exception e) {e.printStackTrace();}}}
}
一些方法
常用开发环境中,自动增加try-catch代码块的快捷键:
- 将需要处理异常的代码选中。
- IDEA中,使用:ctrl+alt+t
- eclipse中,使用:ctrl+shift+z
2 异常处理之(抛出异常)
(一般处理编译时/检查时异常)
(throws关键字)
(异常一直被throws
关键字向上抛出,直到JVM层面,那么代码在编译时不会报错,因为编译器只关心是否有throws
声明来处理这些异常。
但是,当程序运行到抛出异常的那一点时,如果没有相应的try-catch
块来捕获处理这个异常,那么程序将无法正常运行,会因为未处理的异常而终止执行)
CheckedException产生时,不一定立刻处理它,可以把异常throws,由调用者处理。一个方法抛出多个已检查异常,就必须在方法的首部列出所有的异常。
谁调用还能抛,抛给Java虚拟机了,但程序中断没啥用
throws的使用格式
[修饰符]返回值类型 方法名(参数列表)[throws 异常类1,异常类2....]{
注意:
1.如果一个方法声明的是编译时异常,则在调用这个方法之处必须处置这个异常(谁调用谁处理)
2.重写一个方法的时候,它所声明的异常范围不能被扩大
throws作用:在定义一个方法的时候可以使用throws关键字声明,使用throws关键字声明的方法表示此方法不处异常,而交给方法的调用者进行处理
【示例】异常处理的典型代码(声明异常抛出throws)
package com.bjsxt;import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;public class Test9 {public static void main(String[ ] args) {try {readFile("joke.txt");} catch (FileNotFoundException e) {System.out.println("所需文件不存在!");} catch (IOException e) {System.out.println("文件读写错误!");}}public static void readFile(String fileName) throws FileNotFoundException,IOException {FileReader in = new FileReader(fileName);int tem = 0;try {tem = in.read();while (tem != -1) {System.out.print((char) tem);tem = in.read();}} finally {if(in!=null) {in.close();}}}
}
如果子类继承父类,那么只能抛出父类里面包含的异常
3 throw关键字
!!!面试题:介绍下 throw throws 和 Throwable的区别
1 Throwable是总类
2 throw和throws的区别
- throws用在方法名后面,跟的是异常类名,throw是用在方法体重,跟的异常对象
- throws可以跟多个异常类名,用逗号隔开,throw只能抛出一个异常对象
- throws表示抛出异常,由该方法的调用者来处理,throw表示抛出异常,由方法体内的语句处理
- throws表示出现异常的一种可能性,并不一定发生这些异常,throw则是抛出了具体的异常,真是的产生了一个Exception对象
3 throw:
-
throw
用于在代码中显式抛出一个异常实例。 -
它通常用在
try
块或者方法体内部,用来触发异常。 -
throw
后面跟的是一个异常对象,这个对象是Throwable
类或其子类的实例。 -
例子:
if (someCondition) {throw new IllegalArgumentException("参数不合法"); }
消极处理异常可能会导致程序终止,因为它将异常责任推卸给了JVM,如果最终没有处理这个异常,程序会因异常而被终止
try-catch
块中的代码时发生了异常,会执行异常处理程序。但是,如果异常处理程序执行完毕,程序不会自动终止,而是会继续执行catch后面的代码
4 try-with-resource声明
(自动关闭AutoClosable接口的资源)
(在编译时仍然会将try-with-resource转化为try-catch-finally 语句)
(底层代码还有finally,就是程序员清净了)
(是一种语法糖)
JAVA中,JVM的垃圾回收机制可以对内部资源实现自动回收,给开发者带来了极大的便利。
但是JVM对外部资源(调用了底层操作系统的资源)的引用却无法自动回收,例如数据库连接,网络连接以及输入输出IO流等。这些连接就需要我们手动去关闭,不然会导致外部资源泄露,连接池溢出以及文件被异常占用等
JDK7之后,新增了“try-with-resource”。它可以自动关闭实现了AutoClosable
接口的类,实现类需要实现close()
方法。
”try-with-resources “ 将try-catch-finally
简化为try-catch
,这其实是一种语法糖,在编译时仍然会进行转化为try-catch-finally
语句
package com.bjsxt;import java.io.FileReader;
public class Test8 {public static void main(String[ ] args) {//把声明放在try里面,就会自动生成语法把它关掉 try(FileReader reader = new FileReader("d:/a.txt");) {char c = (char) reader.read();char c2 = (char) reader.read();System.out.println("" + c + c2);}catch (Exception e) {e.printStackTrace();}}
}
5 自定义异常
(自定义异常类应该包含2个构造器:一个是默认的构造器,另一个是带有详细信息的构造器)
(因为Throwable类里面有两个构造器,所以自定义异常类之间super继承父类就行)
- 在程序中,可能会遇到JDK提供的任何标准异常类都无法充分描述清楚我们想要表达的问题,这种情况下可以创建自己的异常类,即自定义异常类。
- 自定义异常类只需从Exception类或者它的子类派生一个子类即可。
- 自定义异常类如果继承Exception类,则为CheckedException异常,必须对其进行处理;如果不想处理,可以让自定义异常类继承运行时异常RuntimeException类。
- 习惯上,自定义异常类应该包含2个构造器:一个是默认的构造器,另一个是带有详细信息的构造器。
【示例1】自定义异常类
/**IllegalAgeException:非法年龄异常,继承Exception类*/
public class IllegalAgeException extends Exception {//默认构造器public IllegalAgeException() {}//带有详细信息的构造器,信息存储在message中public IllegalAgeException(String message) {super(message);}
}
【示例】自定义异常类的使用
class Person {private String name;private int age;public void setName(String name) {this.name = name;}public void setAge(int age) throws IllegalAgeException {if (age < 0) {throw new IllegalAgeException("人的年龄不应该为负数");}this.age = age;}public String toString() {return "name is " + name + " and age is " + age;}
}public class TestMyException {public static void main(String[ ] args) {Person p = new Person();try {p.setName("Liu");p.setAge(-1);} catch (IllegalAgeException e) {e.printStackTrace();}System.out.println(p);}
}
使用异常机制的建议
- 要避免使用异常处理代替错误处理,这样会降低程序的清晰性,并且效率低下。
- 处理异常不可以代替简单测试—只在异常情况下使用异常机制。
- 不要进行小粒度的异常处理—应该将整个任务包装在一个try语句块中。
- 异常往往在高层处理(先了解!后面做项目会说!) 。
【示例2】
package textexception;import java.util.Scanner;public class Test_my_exception {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入密码:");String password = sc.next();checkPassword(password);}public static void checkPassword(String password){try{if(password.length()!=6){throw new CheckedPasswordException("密码必须是6位数!!!");}System.out.println("密码长度合法...");}catch (CheckedPasswordException e ){e.printStackTrace();System.out.println(e.getMessage());}}
}class CheckedPasswordException extends Exception{public CheckedPasswordException(){}public CheckedPasswordException(String message){super(message);}
}
(*)IDEA调试debug
调试的核心是断点。程序执行到断点时,暂时挂起,停止执行。就像看视频按下停止一样,我们可以详细的观看停止处的每一个细节。
1 断点breakpoint
程序运行到此处,暂时挂起,停止执行。我们可以详细在此时观察程序的运行情况,方便做出进一步的判断。
设置断点:
-
在行号后面单击即可增加断点
-
在断点上再单击即可取消断点
2 进入调试视图
我们通过如下两种方式都可以进入调试视图:
-
单击工具栏上的按钮:
-
右键单击编辑区,点击:debug
进入调试视图后,布局如下:
左侧为“浏览帧”:
调试器列出断点处,当前线程正在运行的方法,每个方法对应一个“栈帧”。最上面的是当前断点所处的方法。
变量值观察区:
调试器列出了断点处所在方法相关的变量值。我们可以通过它,查看变量的值的变化。
相关文章:

Java——异常机制(下)
1 异常处理之(捕获异常) (一般处理运行时异常) (try-catch-finally子句) (finally一般用于文件最后关闭) (catch捕获的子类在前父类在后——>不然父类在前面都让父类捕获掉了,会报错) (Exception是父类放在最后,如果前面没有捕获到,就…...

centos 手动安装libcurl4-openssl-dev库
下载源代码 curl downloadshttps://curl.se/download/ 选择需要下载的版本,我下载的是8.11.0 解压 tar -zxvf curl-8.11.0 查看安装命令 查找INSTALL.md,一般在docs文件夹下 –prefix :指定安装路径(默认安装在/usr/local&…...

JS学习(1)(基本概念与作用、与HTML、CSS区别)
目录 一、JavaScript是什么? (1)基本介绍 (2)简称:JS? 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 (1)html、css。 (2)JavaScript。 …...

代码随想录算法训练营day50|动态规划12
不同的子序列 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。、 编辑距离中的删除元素,其实就是直接变数字,其只删除原来的较长的数组里的元素 递推模拟,使用s的最后一个元素匹配,或者删除…...

JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)
目录 一、HTTP无状态。 (1)"记住我"? (2)HTTP无状态。 (3)信息存储客户端中。如何处理? 1、loaclStorage与sessionStorage。 2、Cookie。 二、Cookie。 (1&…...

java抽象类
目录 一.抽象类 1.什么是抽象类 2.抽象类特点 (1)抽象类不能直接实例化对象 (2)可以包含抽象方法和具体方法 (3)可以有构造方法 (4)抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修…...

minio集群部署–linux环境
原文地址:minio集群部署–linux环境 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 第一步:安装 有rpm、deb、和二进制文件安装方式。参考文档在:MinIO Object Storage for Linux — MinIO Object Storage …...

在vue3里使用scss实现简单的换肤功能
实现的换肤功能:主题色切换、亮色模式和暗黑模式切换、背景图切换 主题色就是网站主色,可以配置到组件库上面;亮色模式又分为两种风格:纯白风格和背景图风格,不需要背景图的话可以删掉这部分逻辑和相关定义;…...

JavaScript编写css自定义属性
一、自定义属性 是在 CSS 中定义的变量,以 --开头。它们可以存储颜色、尺寸、字体等任何 CSS 值,并且可以在整个文档中重复使用。 :root {--primary-color: #3498db;--font-size: 16px; }body {color: var(--primary-color);font-size: var(--font-siz…...

我们来学webservie - WSDL
WSDL 题记WSDL系列文章 题记 举个例子 酒桌上大领导们谈笑风生,把酒临风,其喜洋洋者矣老张说能签下xx项目,一来证明了集团在行业中的翘楚地位,二来感谢各位领导给予的大力支持接下来的一周,项目经理、业务顾问相继入场࿰…...

【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
在探索大语言模型的创意应用过程中,我们开发了一个基于多 Agent 的智能诗歌创作系统。本文将介绍如何通过多个专业化的 Agent 协同工作,实现根据地点和天气信息自动创作诗歌的功能。 GitHub Code 项目地址 核心架构设计 1. Agent 基类设计 from pydan…...

001 LVGL PC端模拟搭建
01 LVGL模拟器介绍 使用PC端软件模拟LVGL运行,而不需要任何嵌入式硬件 环境搭建:codeblocks-20.03mingw-setup 正常安装流程即可 工程获取:LVGL官网-> github仓库 本地安装包下载资源包 工程模版和软件安装包 补充:…...

AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报
一、XMLHttpRequest基本使用 XMLHttpRequest(XHR)对象用于与服务器交互。 二、XMLHttpRequest-查询参数 语法: 用 & 符号分隔的键/值对列表 三、XMLHttpRequest-数据提交 核心步骤 : 1. 请求头 设置 Content-Type 2. 请求体 携带 符合要求 的数…...

mybatis之数据统计与自定义异常处理
文章目录 需求描述定义实体方式一、mybatisPlus实现方式二、自定义SQL实现简单查询过滤查询 异常处理1、SQL拼写异常 在使用Mybatis或MybatisPlus进行数据统计,在【 SpringBoot的Mybatis-plus实战之基础知识】中对mybatisplus引入有介绍,本次要使用其进…...

qt creator使用taglib读取音频元信息,windows平台vcpkg安装
注意:qt creator用的构建组件是qt 6.2.3 MSVC2019 64bit 安装vcpkg // 我的安装位置C:\vcpkg git clone https://github.com/microsoft/vcpkg.git C:\vcpkg cd C:\vcpkg .\bootstrap-vcpkg.bat// 设置系统环境变量 VCPKG_ROOT C:/vcpkg用vcpkg安装taglib vcpkg …...

设计模式之生成器模式
目录 1.简介 2.结构 3.使用场景 4.实例 5.优缺点 6.与其他模式的关系 7.总结 1.简介 生成器模式(Builder Pattern)是一种创建型设计模式,它允许你通过一步一步构建复杂对象,而不是通过一个包含大量参数的构造函数或方法。该…...

python学opencv|读取图像(三)放大和缩小图像
【1】引言 前序已经学习了常规的图像读取操作和图像保存技巧,相关文章链接为: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(二)保存彩色图像-CSDN博客 今天我们更近一步,学习放大和缩小图像的技巧&…...

1 数据库(上):MySQL的概述和安装、SQL简介、IDEA连接数据库使用图形化界面
文章目录 前言一、数据库相关的概念二、MySQL概述1 MySQL的安装和配置2 MySQL登录、退出(1)mysql -uroot -p1234 或者mysql -uroot -p ---- 登录(2)exit或者quit ---- 退出 3 远程登录服务器上的MySQL命令mysql -hip地址 -P3306 -…...

C++初阶—类与对象(中篇)
第一章:类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现&a…...

Leetcode15. 三数之和(HOT100)
链接 一般这种三数之和,四数之和都使用双指针,复杂度最优,次一级可使用哈希表。前者要求有序,后者空间上有花费。 题目: 题目要求答案中不能出现重复vector,比如{-1 1 0}和{-1 0 1}; 这两个…...

Oracle数据库小白备忘
sqlplus相关 导入sql文件 在sqlplus中,导入一个sql文件,是使用或者start。 如当前目录下有一个hello.sql,则可以使用 hello.sql 或者 start hello.sql 来进行导入,功能类似于mysql里面的source。 退出编辑模式 当使用sqlplus…...

DDR4与DDR3服务器内存的关键区别有哪些?
内存作为服务器性能的关键组件之一,已经经历了从DDR3到DDR4的过渡。DDR4内存相较于DDR3在多个方面有所提升,包括速度、带宽、功耗以及数据传输效率等。然而,尽管DDR4内存在性能上占有优势,DDR3内存依然在一些特定场景中得到了广泛…...

Linux: shell: bash: set -x;调试使用
man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...

Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署
文章目录 前言一、Hbase伪分布式部署(手动部署)1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.jar…...

自定义指令,全局,局部,注册
让输入框自动获取焦点(每次刷新自动获取焦点) <template><div><h3>自定义指令</h3><input ref"inp" type"text"></div> </template><script> export default {mounted(){this.$refs.inp.focus…...

静坐修心.
文章目录 打坐的历史文化渊源东方的起源与传承西方的接受与演变现代生活中的打坐 盘腿坐对身体的影响促进脊椎健康改善呼吸系统功能增强消化系统机能改善血液循环调节神经系统错误姿势及其他潜在危害 盘腿坐对心理的作用促进内心平静与放松提升自我觉察与内在探索培养专注力与精…...

设计模式c++(一)
文章目录 一、面向对象设计原则二、模版方法三、策略模式四、观察者模式五、装饰模式六、桥模式七、工厂方法_Factory Method八、抽象工厂_Abstract Factory九、原型模式十、构建器_builder十一、单件模式_Singleton十二、享元模式_Flyweight 一、面向对象设计原则 设计模式的…...

核密度估计——从直方图到核密度(核函数)估计_带宽选择
参考 核密度估计(KDE)原理及实现-CSDN博客 机器学习算法(二十一):核密度估计 Kernel Density Estimation(KDE)_算法_意念回复-GitCode 开源社区 引言 在统计学中,概率密度估计是一种重要的方法࿰…...

Vant UI Axure移动端元件库:提升移动端原型设计效率
UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI,作为一款基于Vue.js的轻量、可靠的移动端组件库,自2017年开源以来,凭借其丰富的组件库、良好的性能以及广泛的兼容性,在移动端开发领域崭露头角,赢得了众多开…...

如何用 JavaScript 操作 DOM 元素?
如何用 JavaScript 操作 DOM 元素?——结合实际项目代码示例讲解 在前端开发中,DOM(文档对象模型)操作是与页面交互的核心。通过 DOM 操作,开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...