当前位置:网站首页>常用API类及异常体系
常用API类及异常体系
2022-07-06 00:17:00 【王小小鸭】
1. 常用API
1.1 Math(应用)
应用程序接口(英语:Application Programming Interface,简称:API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。
API主要目的是提供应用程序与开发人员以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。提供API所定义的功能的软件称作此API的实现。API是一种接口,故而是一种抽象。
1、Math类概述
- Math 包含执行基本数字运算的方法
2、Math中方法的调用方式
- Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用
3、Math类的常用方法
方法名 方法名 说明 public static int abs(int a) 返回参数的绝对值 public static double ceil(double a) 返回大于或等于参数的最小double值,等于一个整数 public static double floor(double a) 返回小于或等于参数的最大double值,等于一个整数 public static int round(float a) 按照四舍五入返回最接近参数的int public static int max(int a,int b) 返回两个int值中的较大值 public static int min(int a,int b) 返回两个int值中的较小值 public static double pow (double a,double b) 返回a的b次幂的值 public static double random() 返回值为double的正值,[0.0,1.0)
实例:
package com.com.object_11.MathTest_01;
//Math类常用方法
public class MathDemo {
public static void main(String[] args) {
//public static int abs(int a)返回参数的绝对值
System.out.println(Math.abs(66)); //66
System.out.println(Math.abs(-66)); //66
System.out.println("---------------");
// public static double ceil(double a)返回大于或等于参数的最小double值,等于一个整数
System.out.println(Math.ceil(6.18)); //7.0
System.out.println(Math.ceil(6.65)); //7.0
System.out.println("---------------");
// public static double floor(double a)返回小于或等于参数的最大double值,等于一个整数
System.out.println(Math.floor(6.18)); //6.0
System.out.println(Math.floor(6.65)); //6.0
System.out.println("---------------");
// public static int round(float a)按照四舍五入返回最接近参数的int
System.out.println(Math.round(6.18)); //6
System.out.println(Math.round(6.65)); //7
System.out.println("---------------");
// public static int max(int a,int b)返回两个int值中的较大值
System.out.println(Math.max(6,9)); //9
System.out.println("---------------");
// public static int min(int a,int b)返回两个int值中的较小值
System.out.println(Math.min(6,9)); //6
System.out.println("---------------");
// public static double pow (double a,double b)返回a的b次幂的值
System.out.println(Math.pow(2,7)); // 128 2^7
System.out.println("---------------");
// public static double random()返回值为double的正值,[0.0,1.0)
System.out.println(Math.random()); //0.14007993398889917 [0.0,1.0)随机取不到1
System.out.println(Math.random()*100); //55.15963738381813 [0.0,100.0)随机取不到100
System.out.println((int)(Math.random()*100)); //7 强制转化为int型 0-99随机
System.out.println((int)(Math.random()*100)+1); //27 强制转化为int型 加一后0-100随机
}
}
1.2 System(应用)
System中代表程序所在系统,提供了对应的一些系统属性信息,和系统操作。System类不能手动创建对象,因为构造方法被private修饰,阻止外界创建对象。System类中的都是static方法,类名访问即可。
- System类的常用方法
方法名 | 说明 |
---|---|
public static void exit(int status) | 终止当前运行的 Java 虚拟机,非零表示异常终止 |
public static long currentTimeMillis() | 返回当前时间(以毫秒为单位) 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值 |
- 示例代码
package com.com.object_11.APITest_01;
public class SystemDemo {
public static void main(String[] args) {
// System.out.println("开始");
public static void exit(int status):终止当前运行的Java虚拟机,非零表示异常终止
// System.exit(0); //原本应该输出 “开始 结束”,exit将其终止,所以只会输出“开始”
// System.out.println("结束");
// public static long currentTimeMillis():返回当前时间(以毫秒为单位)
// 获取当前系统时间与1970年01月01日00:00点之间的毫秒差值
System.out.println(System.currentTimeMillis()); // 2022/6028 17:48 1656409731638
System.out.println(System.currentTimeMillis() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
// 换算过来是52.524408030124306年 1000ms = 1 s
}
}
- 需求:在控制台输出1-10000,计算这段代码执行了多少毫秒
public class SystemDemo {
public static void main(String[] args) {
// 获取开始的时间节点
long start = System.currentTimeMillis();
for (int i = 1; i <= 10000; i++) {
System.out.println(i);
}
// 获取代码运行结束后的时间节点
long end = System.currentTimeMillis();
System.out.println("共耗时:" + (end - start) + "毫秒");
}
}
1.3 Object类的toString方法(应用)
Object类概述
- Object 是类层次结构的根,每个类都可以将 Object 作为超类。所有类都直接或者间接的继承自该类,换句话说,该类所具备的方法,所有类都会有一份
查看方法源码的方式
- 选中方法,按下Ctrl + B
重写toString方法的方式
- Alt + Insert 选择toString
- 在类的空白区域,右键 -> Generate -> 选择toString
toString方法的作用:
- 以良好的格式,更方便的展示对象中的属性值
示例代码:
package com.com.object_11.APITest_01;
//定义Student类
public class ObjectStudent extends Object {
//因为测试类使用了Object类的toString方法,所以相当于继承了Object
// 有4个属性:
private String name;
private int age;
private String school;
private String major;
// 空参构造
public ObjectStudent(){
}
// 有参构造
public ObjectStudent(String name,int age){
this.name = name;
this.age = age;
}
public ObjectStudent(String name,int age,String school){
this.name = name;
this.age = age;
this.school = school;
}
public ObjectStudent(String name,int age,String school,String major){
this.name = name;
this.age = age;
this.school = school;
this.major = major;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
//打印
public void show(){
System.out.println("学生"+name+"年龄"+age+"岁,就读于"+school+major+"专业");
}
@Override //toString方法重写Alt+Insert,toString方法
public String toString() {
return "ObjectStudent{" +
"name='" + name + '\'' +
", age=" + age +
", school='" + school + '\'' +
", major='" + major + '\'' +
'}';
}
}
package com.com.object_11.APITest_01;
public class ObjectDemo {
public static void main(String[] args) {
ObjectStudent s = new ObjectStudent();
s.setName("李小狼");
s.setAge(10);
s.setSchool("友枝中学");
s.setMajor("魔法专业");
System.out.println(s); //[email protected]
System.out.println(s.toString()); //[email protected]
// ObjectStudent{name='李小狼', age=10, school='友枝中学', major='魔法专业'}
// ObjectStudent{name='李小狼', age=10, school='友枝中学', major='魔法专业'}
/* public void println(Object x) { String s = String.valueOf(x); synchronized(this) { this.print(s); this.newLine(); } } */
/* public static String valueOf(Object obj) { return obj == null ? "null" : obj.toString(); }*/
/* public String toString() { return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode()); }*/
}
}
- 运行结果:
ObjectStudent{
name='李小狼', age=10, school='友枝中学', major='魔法专业'}
ObjectStudent{
name='李小狼', age=10, school='友枝中学', major='魔法专业'}
1.4 Object类的equals方法(应用)
equals方法的作用
- 用于对象之间的比较,返回true和false的结果
- 举例:s1.equals(s2); s1和s2是两个对象
重写equals方法的场景
- 不希望比较对象的地址值,想要结合对象属性进行比较的时候。
重写equals方法的方式
- alt + insert 选择equals() and hashCode(),IntelliJ Default,一路next,finish即可
- 在类的空白区域,右键 -> Generate -> 选择equals() and hashCode(),后面的同上。
示例代码:
class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
//this -- s1
//o -- s2
比较地址是否相同,如果相同,直接返回true
if (this == o) return true;
```java
//判断参数是否为null
//判断两个对象是否来自于同一个类
if (o == null || getClass() != o.getClass()) return false;
// 向下转型
Student student = (Student) o; //student -- s2
//比较年龄是否相等
if (age != student.age) return false;
//比较姓名是否相等
return name != null ? name.equals(student.name) : student.name == null;
}
}
public class ObjectDemo {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("林青霞");
s1.setAge(30);
Student s2 = new Student();
s2.setName("林青霞");
s2.setAge(30);
//需求:比较两个对象的内容是否相同
System.out.println(s1.equals(s2));
}
}
1.5 冒泡排序原理(理解)
- 冒泡排序概述
- 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序
- 如果有n个数据进行排序,总共需要比较n-1次
- 每一次比较完毕,下一次的比较就会少一个数据参与
1.6 冒泡排序代码实现(理解)
- 代码实现
/* 冒泡排序: 一种排序的方式,对要进行排序的数据中相邻的数据进行两两比较,将较大的数据放在后面, 依次对所有的数据进行操作,直至所有数据按要求完成排序 */
public class ArrayDemo {
public static void main(String[] args) {
//定义一个数组
int[] arr = {
24, 69, 80, 57, 13};
System.out.println("排序前:" + arrayToString(arr));
// 这里减1,是控制每轮比较的次数
for (int x = 0; x < arr.length - 1; x++) {
// -1是为了避免索引越界,-x是为了调高比较效率
for (int i = 0; i < arr.length - 1 - x; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
System.out.println("排序后:" + arrayToString(arr));
}
//把数组中的元素按照指定的规则组成一个字符串:[元素1, 元素2, ...]
public static String arrayToString(int[] arr) {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
} else {
sb.append(arr[i]).append(", ");
}
}
sb.append("]");
String s = sb.toString();
return s;
}
}
1.7 Arrays(应用)
Arrays的常用方法
方法名 说明 public static String toString(int[] a) 返回指定数组的内容的字符串表示形式 public static void sort(int[] a) 按照数字顺序排列指定的数组 工具类设计思想
1、构造方法用 private 修饰
为了防止外界创建对象2、成员用 public static 修饰
为了使用类名来访问该成员方法
package com.com.object_11.APITest_01.Arrays;
import java.util.Arrays;
//public static String toString(int[] a) 返回指定数组的内容的字符串表示形式 |
//public static void sort(int[] a) 按照数字顺序排列指定的数组 |
public class ArraysDemo {
public static void main( String[] args) {
//定义一个数组
int[] arr = {
24,69,80,57,13};
System.out.println("排序前:" + Arrays.toString(arr));
//排序前:[24, 69, 80, 57, 13]
Arrays.sort(arr) ;
System.out.println("排序后:" + Arrays.toString(arr));
//排序后:[13, 24, 57, 69, 80]
}
}
2.日期类
2.1 Date类(应用)
Date类概述
Date 代表了一个特定的时间,精确到毫秒
Date类构造方法
方法名 说明 public Date() 分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒 public Date(long date) 分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数 示例代码
package com.com.object_11.APITest_01.Date;
import java.util.Date;
public class DateDemo001 {
public static void main(String[] args) {
// public Date()分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date d1 = new Date(); //用的是java.util创建的Date
System.out.println(d1);
//public Date(long date)分配一个 Date对象,
// 并将其初始化为表示从标准基准时间起指定的毫秒数
// 如果给定的毫秒值包含时间信息,则驱动程序将将时间组件设置为对应于零GMT的默认时区(运行应用程序的Java虚拟机的时区)。
//date - 1970年1月1日以来的毫秒数,00:00:00 GMT不超过8099年的毫秒表示。负数表示1970年1月1日00:00:00 GMT之前的毫秒数。
long date = 1000*60*60; //小时,所以是整时,1970年1月1日1:00,带时区
Date d2 = new Date(date);
System.out.println(d2);
}
}
//Wed Jun 29 09:35:17 CST 2022
//Thu Jan 01 09:00:00 CST 1970
2.2Date类常用方法(应用)
常用方法
方法名 说明 public long getTime() 获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值 public void setTime(long time) 设置时间,给的是毫秒值
public void setTime(long time) 如果给定的毫秒值包含时间信息,则驱动程序将将时间组件设置为对应于零GMT的默认时区(运行应用程序的Java虚拟机的时区)。
date - 1970年1月1日以来的毫秒数,00:00:00 GMT不超过8099年的毫秒表示。负数表示1970年1月1日00:00:00 GMT之前的毫秒数。
- 示例代码
package com.com.object_11.APITest_01.Date;
import java.util.Date;
public class DateDemo002 {
public static void main(String[] args) {
//创建日期对象
Date d = new Date();
//public long getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
System.out.println(d.getTime());
System.out.println(d.getTime() * 1.0 / 1000 / 60 / 60 / 24 / 365 + "年");
//1656469559780
//52.5263051680619年
// public void setTime(long time); 设置时间,给的是毫秒值
// long time = 1000 * 60 * 60;
long time = System.currentTimeMillis();
d.setTime(time);
System.out.println(d);
// Wed Jun 29 10:21:40 CST 2022
}
}
2.3SimpleDateFormat类(应用)
SimpleDateFormat类概述
SimpleDateFormat是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。
我们重点学习日期格式化和解析
SimpleDateFormat类构造方法
方法名 说明 public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式 public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 SimpleDateFormat类的常用方法
- 格式化(从Date到String)
- public final String format(Date date):将日期格式化成日期/时间字符串
- 解析(从String到Date)
- public Date parse(String source):从给定字符串的开始解析文本以生成日期
- 格式化(从Date到String)
代码
package com.com.object_11.APITest_01.Date;
//有毒毒
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/*SimpleDateFormat类构造方法 public SimpleDateFormat() 构造一个SimpleDateFormat,使用默认模式和日期格式 public SimpleDateFormat(String pattern) 构造一个SimpleDateFormat使用给定的模式和默认的日期格式 - SimpleDateFormat类的常用方法 - 格式化(从Date到String) - public final String format(Date date):将日期格式化成日期/时间字符串 - 解析(从String到Date) - public Date parse(String source):从给定字符串的开始解析文本以生成日期*/
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
// 格式化(从Date到String)
// 无参构造创建对象
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(); //无参构造
//创造方法 sdf.format(d);然后Ctrl+Alt+v自动生成
String s = sdf.format(d);
// 输出这个字符串
System.out.println(s);
//2022/6/29 上午11:03 (默认的模式)
System.out.println("-----------");
//格式化(从Date到String)
// 无参构造创建对象
Date d1 = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat();
// 去掉无参构造,自己写
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss"); //年月日时分秒
//创造方法 sdf.format(d1);然后Ctrl+Alt+v自动生成
String s1 = sdf.format(d1);
// 输出这个字符串
System.out.println(s1);
// (默认的模式)
System.out.println("-----------");
// (从String到Date)
String ss = "2025-06-29 11:20:00";
//ParseException 报错,解析异常
// SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
}
}
2.4日期工具类案例(应用)
案例需求
定义一个日期工具类(DateUtils),包含两个方法:把日期转换为指定格式的字符串;把字符串解析为指定格式的日期,然后定义一个测试类(DateDemo),测试日期工具类的方法
代码实现
- 工具类
package com.com.object_11.APITest_01.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateUtils {
// 构造方法私有(外界无法创建对象)
private DateUtils() {
}
// 成员方法静态(将来通过类名来调用)
// 把日期转换为指定格式的字符串
// 返回值类型:String
//参数:Date date,String format
public static String dataToString(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String s = sdf.format(date);
return s;
}
/*把字符串解析为指定格式的日期 返回值类型:Date 参数:string s, String format*/
public static Date stringToDate(String s, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(s);
return d;
}
}
- 测试类
package com.com.object_11.APITest_01.Date;
import java.text.ParseException;
import java.util.Date;
//测试类
public class DateUtilsDemo {
public static void main(String[] args) throws ParseException {
// 创建日期对象
Date d = new Date();
String s1 = DateUtils.dataToString(d, "yyyy年MM月dd日 HH:mm:ss");
System.out.println(s1);
String s2 = DateUtils.dataToString(d, "yyyy年MM月dd日");
System.out.println(s2);
String s3 = DateUtils.dataToString(d, "HH:mm:ss");
System.out.println(s3);
System.out.println("------------");
String s = "2025-06-29 11:20:00";
Date dd = DateUtils.stringToDate(s, "yyyy-MM-dd HH:mm:ss");
System.out.println(dd);
}
}
2.5Calendar类(应用)
Calendar类概述
Calendar 为特定瞬间与一组日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法
Calendar 提供了一个类方法 getInstance 用于获取这种类型的一般有用的对象。
该方法返回一个Calendar 对象。
其日历字段已使用当前日期和时间初始化:Calendar rightNow = Calendar.getInstance();
Calendar类常用方法
方法名 说明 public int get(int field) 返回给定日历字段的值 public abstract void add(int field, int amount) 根据日历的规则,将指定的时间量添加或减去给定的日历字段 public final void set(int year,int month,int date) 设置当前日历的年月日 示例代码
public class CalendarDemo { public static void main(String[] args) { //获取日历类对象 Calendar c = Calendar.getInstance(); //public int get(int field):返回给定日历字段的值 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH) + 1; //因为月份是从0开始,所以计算第几月要+1 int date = c.get(Calendar.DATE); System.out.println(year + "年" + month + "月" + date + "日"); //public abstract void add(int field, int amount):根据日历的规则,将指定的时间量添加或减去给定的日历字段 //需求1:3年前的今天 // c.add(Calendar.YEAR,-3); // year = c.get(Calendar.YEAR); // month = c.get(Calendar.MONTH) + 1; // date = c.get(Calendar.DATE); // System.out.println(year + "年" + month + "月" + date + "日"); //需求2:10年后的10天前 // c.add(Calendar.YEAR,10); // c.add(Calendar.DATE,-10); // year = c.get(Calendar.YEAR); // month = c.get(Calendar.MONTH) + 1; // date = c.get(Calendar.DATE); // System.out.println(year + "年" + month + "月" + date + "日"); //public final void set(int year,int month,int date):设置当前日历的年月日 c.set(2050,10,10); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH) + 1; date = c.get(Calendar.DATE); System.out.println(year + "年" + month + "月" + date + "日"); } }
2.6二月天案例(应用)
案例需求
获取任意一年的二月有多少天
代码实现
public class CalendarTest { public static void main(String[] args) { //键盘录入任意的年份 Scanner sc = new Scanner(System.in); System.out.println("请输入年:"); int year = sc.nextInt(); //设置日历对象的年、月、日 Calendar c = Calendar.getInstance(); c.set(year, 2, 1); //3月1日往前推一天,就是2月的最后一天 c.add(Calendar.DATE, -1); //获取这一天输出即可 int date = c.get(Calendar.DATE); System.out.println(year + "年的2月份有" + date + "天"); } }
3.异常
3.1异常(记忆)
异常的概述
异常就是程序出现了不正常的情况
异常的体系结构
3.2JVM默认处理异常的方式(理解)
如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:
把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
程序停止执行
3.3try-catch方式处理异常(应用)
定义格式
try { 可能出现异常的代码; } catch(异常类名 变量名) { 异常的处理代码; }
执行流程
- 程序从 try 里面的代码开始执行
- 出现异常,就会跳转到对应的 catch 里面去执行
- 执行完毕之后,程序还可以继续往下执行
示例代码
public class ExceptionDemo01 { public static void main(String[] args) { System.out.println("开始"); method(); System.out.println("结束"); } public static void method() { try { int[] arr = { 1, 2, 3}; System.out.println(arr[3]); System.out.println("这里能够访问到吗"); } catch (ArrayIndexOutOfBoundsException e) { // System.out.println("你访问的数组索引不存在,请回去修改为正确的索引"); e.printStackTrace(); } } }
3.4Throwable成员方法(应用)
常用方法
方法名 说明 public String getMessage() 返回此 throwable 的详细消息字符串 public String toString() 返回此可抛出的简短描述 public void printStackTrace() 把异常的错误信息输出在控制台 示例代码
public class ExceptionDemo02 { public static void main(String[] args) { System.out.println("开始"); method(); System.out.println("结束"); } public static void method() { try { int[] arr = { 1, 2, 3}; System.out.println(arr[3]); //new ArrayIndexOutOfBoundsException(); System.out.println("这里能够访问到吗"); } catch (ArrayIndexOutOfBoundsException e) { //new ArrayIndexOutOfBoundsException(); // e.printStackTrace(); //public String getMessage():返回此 throwable 的详细消息字符串 // System.out.println(e.getMessage()); //Index 3 out of bounds for length 3 //public String toString():返回此可抛出的简短描述 // System.out.println(e.toString()); //java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 //public void printStackTrace():把异常的错误信息输出在控制台 e.printStackTrace(); // java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3 // at com.itheima_02.ExceptionDemo02.method(ExceptionDemo02.java:18) // at com.itheima_02.ExceptionDemo02.main(ExceptionDemo02.java:11) } } }
3.5编译时异常和运行时异常的区别(记忆)
编译时异常
- 都是Exception类及其子类
- 必须显示处理,否则程序就会发生错误,无法通过编译
运行时异常
- 都是RuntimeException类及其子类
- 无需显示处理,也可以和编译时异常一样处理
3.6throws方式处理异常(应用)
定义格式
public void 方法() throws 异常类名 { }
示例代码
public class ExceptionDemo { public static void main(String[] args) { System.out.println("开始"); // method(); try { method2(); }catch (ParseException e) { e.printStackTrace(); } System.out.println("结束"); } //编译时异常 public static void method2() throws ParseException { String s = "2048-08-09"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date d = sdf.parse(s); System.out.println(d); } //运行时异常 public static void method() throws ArrayIndexOutOfBoundsException { int[] arr = { 1, 2, 3}; System.out.println(arr[3]); } }
注意事项
- 这个throws格式是跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try…catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理
- 运行时异常可以不处理,出现问题后,需要我们回来修改代码
3.7throws和throw的区别(记忆)
throws
用在方法声明后面,跟的是异常类名
表示抛出异常,由该方法的调用者来处理
表示出现异常的一种可能性,并不一定会发生这些异常
throw
用在方法体内,跟的是异常对象名
表示抛出异常,由方法体内的语句处理
执行throw一定抛出了某种异常
3.8自定义异常(应用)
如果 Java 提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。实现自定义异常类需要继承 Exception 类或其子类,如果自定义运行时异常类需继承 RuntimeException 类或其子类。
自定义异常的语法形式为:
<自定义异常名>
在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
例如,以下代码创建一个名称为 IntegerRangeException 的自定义异常类:
class IntegerRangeException extends Exception {
public IntegerRangeException() {
super();
}
public IntegerRangeException(String s) {
super(s);
}
}
以上代码创建的自定义异常类 IntegerRangeException 类继承自 Exception 类,在该类中包含两个构造方法。
自定义异常类
public class ScoreException extends Exception { public ScoreException() { } public ScoreException(String message) { super(message); } }
老师类
public class Teacher { public void checkScore(int score) throws ScoreException { if(score<0 || score>100) { // throw new ScoreException(); throw new ScoreException("你给的分数有误,分数应该在0-100之间"); } else { System.out.println("成绩正常"); } } }
测试类
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入分数:");
int score = sc.nextInt();
Teacher t = new Teacher();
try {
t.checkScore(score);
} catch (ScoreException e) {
e.printStackTrace();
//或者是e.getMessage();
}
}
}
边栏推荐
- Hardware and interface learning summary
- China Jinmao online electronic signature, accelerating the digitization of real estate business
- Wechat applet -- wxml template syntax (with notes)
- MySql——CRUD
- Chapter 16 oauth2authorizationrequestredirectwebfilter source code analysis
- Huawei equipment configuration ospf-bgp linkage
- Gavin teacher's perception of transformer live class - rasa project actual combat e-commerce retail customer service intelligent business dialogue robot system behavior analysis and project summary (4
- [designmode] Decorator Pattern
- After summarizing more than 800 kubectl aliases, I'm no longer afraid that I can't remember commands!
- MySql——CRUD
猜你喜欢
Qt QPushButton详解
XML配置文件(DTD详细讲解)
【DesignMode】装饰者模式(Decorator pattern)
MySql——CRUD
FFmpeg学习——核心模块
[day39 literature extensive reading] a Bayesian perspective on magnetic estimation
LeetCode 1598. Folder operation log collector
18. (ArcGIS API for JS) ArcGIS API for JS point collection (sketchviewmodel)
选择致敬持续奋斗背后的精神——对话威尔价值观【第四期】
Detailed explanation of APP functions of door-to-door appointment service
随机推荐
Search (DFS and BFS)
转:未来,这样的组织才能扛住风险
Teach you to run uni app with simulator on hbuilderx, conscience teaching!!!
Global and Chinese market of valve institutions 2022-2028: Research Report on technology, participants, trends, market size and share
云呐|公司固定资产管理系统有哪些?
[noi simulation] Anaid's tree (Mobius inversion, exponential generating function, Ehrlich sieve, virtual tree)
云呐|固定资产管理系统主要操作流程有哪些
行列式学习笔记(一)
时区的区别及go语言的time库
wx. Getlocation (object object) application method, latest version
Yunna | what are the main operating processes of the fixed assets management system
After summarizing more than 800 kubectl aliases, I'm no longer afraid that I can't remember commands!
PV static creation and dynamic creation
如何解决ecology9.0执行导入流程流程产生的问题
Senparc. Weixin. Sample. MP source code analysis
Codeforces round 804 (Div. 2) [competition record]
Mathematical model Lotka Volterra
LeetCode 6004. Get operands of 0
认识提取与显示梅尔谱图的小实验(观察不同y_axis和x_axis的区别)
硬件及接口学习总结