当前位置: 首页 > news >正文

(1-5)Java 常用工具类、

解决的问题:

1. Java常用工具类(难度:1)

2. 如何应用异常处理程序中的问题(1)

3. 如何通过包装器类实现基本数据类型的对象化处理(1)

4. String、StringBuilder是如何进行字符串信息操作的(1)

5. 常用集合框架及实现类使用(3)

6. 如何使用Java输入输出流文件进行读写(5)

7.  如何使用多线程实现数据并发通信(10)

1. 异常

(1)什么是异常?

(2)如何处理异常?

  1.  try-catch-finally
  2. throw
  3. throws
  4. 自定义异常
  5. 异常链
 1.1 什么是异常?
  • 异常本质上是程序上的错误。
  • 在程序运行过程中,意外发生的情况,背离程序本身意图的表现

(1)编译期间的异常

(2)运行期间的异常

1.2 异常的分类

1.3 异常处理机制

异常处理机制可分为抛出异常 &  puzuo异常

1.4 try-catch-finally

 

异常案例:

public class TryDemoOne {public static void main(String[] args) {//要求:定义两个整数,接受用户的键盘输入,输出两数之商Scanner sc = new Scanner(System.in);int x1 = sc.nextInt();int x2 = sc.nextInt();System.out.println("result is " + x1/x2);/*  正常结果194result is 4*//*  异常1:除0190Exception in thread "main" java.lang.ArithmeticException: / by zeroat com.vb.exception.TryDemoOne.main(TryDemoOne.java:11)*//*  异常2: 出入格式错误异常wException in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at com.vb.exception.TryDemoOne.main(TryDemoOne.java:9)*/}
}

try-catch-finally处理案例:

public class TryDemoOne {public static void main(String[] args) {//要求:定义两个整数,接受用户的键盘输入,输出两数之商Scanner sc = new Scanner(System.in);try{// 编写可能出现异常的代码  -->铺货异常int x1 = sc.nextInt();int x2 = sc.nextInt();System.out.println("result is " + x1/x2);}catch(Exception e){// 打印错误的堆栈信息     -->抛出异常e.printStackTrace();System.out.println("程序出错了");}finally {// 无论catch中的内容执行与否,finally中的内容都会执行System.out.println("运行结束");}/*** 89* 0* java.lang.ArithmeticException: / by zero* 	at com.vb.exception.TryDemoOne.main(TryDemoOne.java:41)* 程序出错了* 运行结束*//*** 90* s* java.util.InputMismatchException* 	at java.util.Scanner.throwFor(Scanner.java:864)* 	at java.util.Scanner.next(Scanner.java:1485)* 	at java.util.Scanner.nextInt(Scanner.java:2117)* 	at java.util.Scanner.nextInt(Scanner.java:2076)* 	at com.vb.exception.TryDemoOne.main(TryDemoOne.java:40)* 程序出错了* 运行结束*/}
}

具体多类型异常抛出

//        catch模块改进try{// 编写可能出现异常的代码  -->铺货异常int x1 = sc.nextInt();int x2 = sc.nextInt();System.out.println("result is " + x1/x2);}catch(ArithmeticException e){// 打印错误的堆栈信息     -->抛出异常System.out.println("Arithmetic exception,除数不允许为0!");e.printStackTrace();}catch(InputMismatchException e){// 打印错误的堆栈信息     -->抛出异常System.out.println("请输入整数");e.printStackTrace();}catch(Exception e){e.printStackTrace();} finally {// 无论catch中的内容执行与否,finally中的内容都会执行System.out.println("运行结束");}/*900Arithmetic exception,除数不允许为0!运行结束java.lang.ArithmeticException: / by zeroat com.vb.exception.TryDemoOne.main(TryDemoOne.java:79)*//*90e请输入整数运行结束java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at com.vb.exception.TryDemoOne.main(TryDemoOne.java:78)*/}

System.exit();

try{// 编写可能出现异常的代码  -->铺货异常int x1 = sc.nextInt();int x2 = sc.nextInt();System.out.println("result is " + x1/x2);}catch(ArithmeticException e){// 打印错误的堆栈信息     -->抛出异常System.exit(1);     // 中止程序运行//12//0System.out.println("Arithmetic exception,除数不允许为0!");e.printStackTrace();}

不建议finally中编写return

public class TryDemoTwo {public static int test(){Scanner sc = new Scanner(System.in);try{// 编写可能出现异常的代码  -->铺货异常int x1 = sc.nextInt();int x2 = sc.nextInt();return x1/x2;}catch(ArithmeticException e){// 打印错误的堆栈信息     -->抛出异常System.out.println("Arithmetic exception,除数不允许为0!");return 0;} finally {// 无论catch中的内容执行与否,finally中的内容都会执行System.out.println("运行结束");return -100;}}public static void main(String[] args) {int result = test();System.out.println("x1和x2的商为:"+ result);       // 7}/*不建议finally  中写return*//*235运行结束x1和x2的商为:-100*//*120Arithmetic exception,除数不允许为0!运行结束x1和x2的商为:-100*/
}
1.5 throw & throws

可以通过throws声明将要抛出何种类型的异常,通过throw将产生的异常抛出

throws:

        如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处调用throws子句来声明抛出异常。

1.5.1 throws
public class TryDemoThrows {/*通过throws 抛出异常时,正对可能出现的多种异常情况,解决方案1. throws 后边接入多个异常类型2. throws 后边直接写Exception*//***  测试接受数据相除结果结果的方法* @return 两个接受数据的商* @throws ArithmeticException* @throws InputMismatchException*/public static int test() throws ArithmeticException, InputMismatchException {Scanner sc = new Scanner(System.in);int x1 = sc.nextInt();int x2 = sc.nextInt();System.out.println("运行结束");return x1/x2;}//    public static int test() throws Exception {
//        Scanner sc = new Scanner(System.in);
//        int x1 = sc.nextInt();
//        int x2 = sc.nextInt();
//        System.out.println("运行结束");
//        return x1/x2;
//    }public static void main(String[] args) {try{int result = test();System.out.println("x1和x2的商为:"+ result);}catch (ArithmeticException e){System.out.println("除数不允许为0");e.printStackTrace();}catch (InputMismatchException e){System.out.println("输入应为zhengshu");e.printStackTrace();}catch (Exception e){e.printStackTrace();}}/*re输入应为zhengshujava.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at com.vb.exception.TryDemoThrows.test(TryDemoThrows.java:10)at com.vb.exception.TryDemoThrows.main(TryDemoThrows.java:18)*//*450运行结束除数不允许为0java.lang.ArithmeticException: / by zeroat com.vb.exception.TryDemoThrows.test(TryDemoThrows.java:13)at com.vb.exception.TryDemoThrows.main(TryDemoThrows.java:18)*/
}
1.5.2 throw

  • throw用来抛出一个异常
    • 例如: throw new IOException();
  • throw抛出的只能够是可抛出Throwable  或者其子类的实例对象
    • 例如: throw new String("出错了");错误编写。
  • throw可以规避可能出现的风险,完成一些程序的逻辑

案例代码:

/***  需求: 酒店入住规则*       限定年龄,18岁以下\80岁以上的住客必须有亲友陪同**       throw 抛出异常对象的处理方案*       1. 通过try..catch 包含throw语句  --  自己抛出,自己处理*       2. 通过throws在方法声明处抛出异常  -- 谁调用谁处理-- 调用者可以自己处理,可以继续向上抛出2-2 可以抛出与throw对象相同的类型或者让父类*/

方案一:通过try..catch 包含throw语句 -- 自己抛出,自己处理

 public static void testAge() {try {System.out.println("请输入住客年龄");Scanner sc = new Scanner(System.in);int age = sc.nextInt();if (age < 18 || age > 80) {throw new Exception("18岁以下\\80岁以上的住客必须有亲友陪同");} else {System.out.println("可以入住");}} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {testAge();/*请输入住客年龄89java.lang.Exception: 18岁以下\80岁以上的住客必须有亲友陪同at com.vb.exception.ThrowDemo.testAge(ThrowDemo.java:18)at com.vb.exception.ThrowDemo.main(ThrowDemo.java:29)*/}

方案2: 通过throws在方法声明处抛出异常 -- 谁调用谁处理

    // 方案2: 2. 通过throws在方法声明处抛出异常  -- 谁调用谁处理public static void testAge() throws Exception{System.out.println("请输入住客年龄");Scanner sc = new Scanner(System.in);int age = sc.nextInt();if (age < 18 || age > 80) {throw new Exception("18岁以下\\80岁以上的住客必须有亲友陪同");} else {System.out.println("可以入住");}}public static void main(String[] args) {try {testAge();} catch (Exception e) {e.printStackTrace();}/*请输入住客年龄90java.lang.Exception: 18岁以下\80岁以上的住客必须有亲友陪同at com.vb.exception.ThrowDemo.testAge(ThrowDemo.java:41)at com.vb.exception.ThrowDemo.main(ThrowDemo.java:63)*/}

方案2-2:throws: Throwable

//方案2-2public static void testAge() throws Throwable{System.out.println("请输入住客年龄");Scanner sc = new Scanner(System.in);int age = sc.nextInt();if (age < 18 || age > 80) {throw new Exception("18岁以下\\80岁以上的住客必须有亲友陪同");} else {System.out.println("可以入住");}}public static void main(String[] args) {try {testAge();
//        } catch (Exception e) {} catch (Throwable e) {e.printStackTrace();}/*请输入住客年龄90java.lang.Exception: 18岁以下\80岁以上的住客必须有亲友陪同at com.vb.exception.ThrowDemo.testAge(ThrowDemo.java:41)at com.vb.exception.ThrowDemo.main(ThrowDemo.java:63)*/}
1.6 自定义异常


自定义异常类:

public class HotelAgeException extends Exception{public HotelAgeException(){super("18岁以下\\80岁以上的住客必须有亲友陪同");}
}

测试类

public class HotelExceptionTest {public static void testAge() throws HotelAgeException{System.out.println("请输入住客年龄");Scanner sc = new Scanner(System.in);int age = sc.nextInt();if (age < 18 || age > 80) {throw new HotelAgeException();} else {System.out.println("可以入住");}}public static void main(String[] args) {try{testAge();}catch (HotelAgeException e){System.out.println(e.getMessage());System.out.println("酒店人员不能办理入住");}catch (Exception e){e.printStackTrace();}/*01请输入住客年龄23可以入住*//*02请输入住客年龄ujava.util.InputMismatchExceptionat java.util.Scanner.throwFor(Scanner.java:864)at java.util.Scanner.next(Scanner.java:1485)at java.util.Scanner.nextInt(Scanner.java:2117)at java.util.Scanner.nextInt(Scanner.java:2076)at com.vb.exception.HotelExceptionTest.testAge(HotelExceptionTest.java:10)at com.vb.exception.HotelExceptionTest.main(HotelExceptionTest.java:20)*//*03请输入住客年龄9818岁以下\80岁以上的住客必须有亲友陪同酒店人员不能办理入住*/}
}
1.7 异常链

public class ExceptionLine {public static void main(String[] args){try {testThree();} catch (Exception e) {e.printStackTrace();/*  (正常的异常链中只保留了最后一个异常信息,可以通过配置将所有的异常堆栈信息保留下来)java.lang.Exception: testThree 新产生的异常at com.vb.exception.ExceptionLine.testThree(ExceptionLine.java:29)at com.vb.exception.ExceptionLine.main(ExceptionLine.java:7)*//*  通过方式1&2保留完整的异常堆栈信息java.lang.Exception: testThree 新产生的异常at com.vb.exception.ExceptionLine.testThree(ExceptionLine.java:43)at com.vb.exception.ExceptionLine.main(ExceptionLine.java:7)Caused by: java.lang.Exception: testTwo 新产生的异常at com.vb.exception.ExceptionLine.testTwo(ExceptionLine.java:31)at com.vb.exception.ExceptionLine.testThree(ExceptionLine.java:38)... 1 moreCaused by: com.vb.exception.HotelAgeException: 18岁以下\80岁以上的住客必须有亲友陪同at com.vb.exception.ExceptionLine.testOne(ExceptionLine.java:21)at com.vb.exception.ExceptionLine.testTwo(ExceptionLine.java:26)... 2 more*/}}public static void testOne() throws HotelAgeException{throw new HotelAgeException();}public static void testTwo() throws Exception{try{testOne();}catch(HotelAgeException e){
//            throw new Exception("testTwo 新产生的异常");// 保留异常链之前的异常信息// 方式一: 抛出的异常加上异常参数throw new Exception("testTwo 新产生的异常", e);}}public static void testThree()throws Exception{try{testTwo();}catch(Exception e){
//            throw new Exception("testThree 新产生的异常");
//            throw new Exception("testThree 新产生的异常", e);// 方式2: 在构造方法中描述字符串信息Exception e1 =  new Exception("testThree 新产生的异常");e1.initCause(e);throw e1;}}
}
1.8 异常总结

2. 包装类

  1. 什么是包装类
  2. 包装类基本数据类型之间的对应关系
  3. 包装类的常用方法
2.1 概述       
  •        由于基本数据类型没有属性方法无法和对象进行交互
  •        包装类是拥有属性、方法,以及可以和对象进行交互
  •        基本上数据类型和包装类的对应关系

2.2 基本数据类型包装类之间的转换(装箱&拆箱

装箱& 拆箱Code

public class WrapProj {public static void main(String[] args) {// 1.装箱: 把基本数据类型转换成包装类// 1.1 自动装箱int t1 = 6;Integer t2 = t1;// 1.2 手动装箱Integer t3 = new Integer(t1);// testSystem.out.println("int类型变量t1= " + t1);          //  int类型变量t1= 6System.out.println("Integer类型对象t2= " + t2);      //  Integer类型对象t2= 6System.out.println("Integer类型对象t3= " + t3 );     //  Integer类型对象t3= 6// 2,拆箱 :把包装类转换成基本数据类型// 2.1 自动拆箱int t4 = t2;// 2.2 手动拆箱int t5 = t2.intValue();// testSystem.out.println("Integer 类型对象t2= "+t2);          //Integer 类型对象t2= 6System.out.println("自动拆箱后, int类型变量 t4=" +t4);    //自动拆箱后, int类型变量 t4=6System.out.println("手动拆箱后,int类型变量 t5 =" +t5);   //手动拆箱后,int类型变量 t5 =6}
2.3 基本数据类型和字符串之间的转换
  • String t2 = Integer.toString(t1);
  • int t3 = Integer.parseInt(t2);
  • int t4 = Integer.valueOf(t2);

代码演示:

public class WrapDemo02 {public static void main(String[] args) {// 01 .将基本上数据类型转换成字符串int t1 = 2;String t2 = Integer.toString(t1);// testSystem.out.println("int类型转换为String类型对象t2= " + t2); // int类型转换为String类型对象t2= 2System.out.println("========================");// 02. 字符串转换成基本数据类型// 2.1 包装类的parseint t3 = Integer.parseInt(t2);// 2.2 包装类的valueOf 先将字符串转换为包装类, 再通过自动拆箱完成基本类型转换int t4 = Integer.valueOf(t2);// testSystem.out.println("String类型转换为int类型变量t3= "+ t3); //String类型转换为int类型变量t3= 2System.out.println("String类型转换为int类型变量t4= "+ t4); //String类型转换为int类型变量t4= 2}
}
2.4 包装类&基本数据类型的初始值

包装类的数据初始值为null

代码演示:

public class Cat {private String name;private Integer month;private Double weight;public static void main(String[] args) {Cat cat = new Cat();System.out.println("String name: "+ cat.name);       //String name: nullSystem.out.println("int month: "+ cat.month);        //int month: 0System.out.println("double weight: "+ cat.weight);   //double weight: 0.0System.out.println("Integer month: "+ cat.month);        //Integer month: nullSystem.out.println("Double weight: "+ cat.weight);   //Double weight: null}
}
 2.5 包装类对象之间的比较

http://www.xdnf.cn/news/527851.html

相关文章:

  • 用 CodeBuddy 实现「IdeaSpark 每日灵感卡」:一场 UI 与灵感的极简之旅
  • 【Linux】守护进程
  • 数据中心 智慧机房解决方案
  • 力扣560.和为K的子数组
  • FLASHDB API分析
  • 爬虫攻防战:从入门到放弃的完整对抗史与实战解决方案
  • MacOS安装软件后无法启动报错:“已损坏,无法打开,你应该将它移到废纸篓“
  • MySQL企业版免费开启,强先体验
  • 如何使用VCS+XA加密verilog和spice网表
  • JVM的垃圾回收机制
  • 猎板PCB多层层压工艺能力及流程
  • Word2Vec 模型的工作原理
  • c#基础01(.Net介绍)
  • 图漾相机错误码解析(待补充)
  • 51单片机实现流水灯
  • 大数据hadoop小文件处理方案
  • 解锁MySQL性能调优:高级SQL技巧实战指南
  • visual studio code中的插件都是怎么开发的?用的什么编程语言?
  • 深度解析3D模型生成器:基于StyleGAN3与PyTorch3D的多风格生成工具开发实战
  • stm32week16
  • PyMOL结构对齐方式
  • 我的食物信使女友
  • 操作符的详解
  • Google机器学习实践指南(训练与损失函数篇)
  • 避开封禁陷阱:动态IP在爬虫、跨境电商中的落地实践
  • 网络安全之大模型隐私攻击技术
  • 使用 OpenCV 实现 ArUco 码识别与坐标轴绘制
  • OpenCV CUDA 模块中的矩阵算术运算-----在频域中执行两个复数频谱的逐元素乘法的函数mulSpectrums()
  • 耗时十分钟,做了一个 uniapp 灵感泡泡机
  • 【QT】一个界面中嵌入其它界面(三)