7-23学习笔记

一、异常

        即程序中一些程序处理不了的特殊情况

        Exception 能被程序本身处理( try-catch )Error 是无法处理的(只能尽量避免)

1、异常类   Exception

见过的异常  NullPointerException  ArrayIndexoutOfBoundException等
        String str=null;System.out.println(str.length());//NullPointerException异常String name="张三";boolean bool=str.equals(name);//NullPointerException异常System.out.println(bool);int i=12;int a=0;System.out.println(i/a);//ArithmeticException异常

 2、异常的分类

        当程序中出现异常,就会中断程序,代码不会继续运行
(1)检查型异常(编译异常)

        在编译时就会抛出的异常(代码上会报错),需要在代码中编写处理方式  (和程序之外的资源访问)  直接继承Exception

        File file=new File("D:\\easy.text");//检查性异常   编译异常FileInputStream fis=new FileInputStream(file);//FileNotFoundException

(2) 运行时异常

        在代码运行时可能会出现的异常,可以不用明文处理,而通过代码避免异常的发生 继承RunTimeException

        String str=null;//System.out.println(str.length());//NullPointerException异常if(str!=null){System.out.println(str.length());}else{System.out.println("str是null值");}String name="张三";//boolean bool=str.equals(name);//NullPointerException异常boolean bool=name.equals(str);System.out.println(bool);int i=12;int a=0;//System.out.println(i/a);//ArithmeticException异常if(a!=0){System.out.println(i/a);}else {System.out.println("a==0不能做除数");}

3、处理异常

        try...catch...finally
        File file=new File("D:\\easy.text");//检查型异常   编译异常//FileInputStream fis=new FileInputStream(file);//FileNotFoundExceptionFileInputStream fis=null;try{//try块尝试捕捉异常   其中是可能会抛出异常的代码fis=new FileInputStream(file);//fis.close();}catch (FileNotFoundException e){//捕捉到异常后要处理的代码e.printStackTrace();//打印异常日志}finally {//无论是否出现异常都会执行的代码块//一般用在关闭资源if(fis!=null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}}

4、处理多种异常

(1)try处理
        try {System.out.println(12/0);Object strA="";System.out.println((Integer)strA);fis=new FileInputStream(file);}catch (ArithmeticException e){//出现ArithmeticException要执行的代码System.out.println("出现ArithmeticException");}catch (ClassCastException e){System.out.println("出现ClassCastException");}catch (FileNotFoundException e){System.out.println("出现FileNotFoundException");}finally {if (fis!=null){try {fis.close();}catch (IOException e){e.printStackTrace();}}}
(2)合并处理方案 一个catch块捕捉多种异常
        使用 | 声明多种异常
        try {System.out.println(12/0);Object strA="";System.out.println((Integer)strA);fis=new FileInputStream(file);}catch (ArithmeticException | ClassCastException | FileNotFoundException e){}
(3)catch块声明父类异常,捕捉所有子类异常
        try {System.out.println(12/0);Object strA="";System.out.println((Integer)strA);fis=new FileInputStream(file);}catch (Exception e){}

5、catch 异常捕捉的顺序

        子类异常优先处理,父类异常后置处理
        try{List list=new ArrayList();list.remove(8);//Indexoutint[] arr=new int[2];arr[8]=22;//ArrayIndexString strA="abc";strA.charAt(8);//StringIndex}catch (ArrayIndexOutOfBoundsException e){}catch (StringIndexOutOfBoundsException e){}catch (IndexOutOfBoundsException e){e.printStackTrace();}

 6、注意

        如果catch块抛出了异常,没有finally就会中断程序
        执行try 或者catch中的return语句之后,在返回之前,如果有finally,就会运行finally,如果finally中有return语句,那么程序就按finally中return,所以finally中的return是一定会被return的
 public class EasyException {public static void main(String[] args) {System.out.println(test());//3}public static int test(){try{System.out.println(12/0);return 1;}catch (Exception e){return 2;}finally {//System.out.println(12/0);return 3;}//只返回最后一次执行的返回值//若finally中没有return 且try中有异常,那么返回catch中的return//若finally中没有return 且try中没有异常,那么返回try中的return}
}
      try不能单独编写 必须有其他语句块
      try块中没有检查性异常,不能在catch块中随意捕捉
 try...catch
    public static void testA(){try{System.out.println(12/0);}catch (Exception e){}}
try...finally
    public static void testA(){File file=null;FileInputStream fis=null;try{System.out.println(12/0);//不能出现检查型异常 该类异常必须用catch捕捉//fis=new FileInputStream(file);}finally {}}

7、自定义异常 

//自定义一个检查型异常   是Exception的直接子类
class StudentNameIsNullException extends Exception{public StudentNameIsNullException(){}public StudentNameIsNullException(String msg){super((msg));}
}

8、throws、throw   

throws 声明方法可能要抛出哪种异常   声明抛出多个异常(用','连接)
throw 在方法体中抛出一个具体的异常对象  没有解决异常,只是抛给使用这段代码的人
运行时异常不用必须声明要抛出哪种异常  检查型异常则不行
    public void infoA(){if(name==null){throw new NullPointerException("name is null");//throw new RuntimeException(".....");//throw new Exception();}}

方法重写:子类对父类中继承过来的方法进行重新定义
约束:  返回值类型  方法名  参数列表不能变
访问权限只能更开放
抛出的异常只能更精确 范围应该更小,不能扩大(指检查型异常)
class BigStudent extends Student{@Overridepublic void info() throws StudentNameIsNullException {}
}
class Student{String name;public void info() throws StudentNameIsNullException,NullPointerException{//name==null是一个特殊情况   不符合业务需求if(name==null){throw new StudentNameIsNullException("Student name is null");}System.out.println("我的名字是"+name);}
}

二、File  文件类

        java中对文件的处理  java.io包

 1、定义File类

File f=new File("D:\\easy.txt");

2、常用方法

(1)判断是否存在该文件  exists()
        boolean bool=f.exists();System.out.println(bool);
(2)创建文件   createNewFile()
        if(!bool){try{bool=f.createNewFile();if(bool){System.out.println("成功创建文件");}}catch (IOException e){e.printStackTrace();}}
(3)创建文件夹
        //创建时路径完整f.mkdir();//创建时路径不需要完整  会自己补全f.mkdirs();
(4)获取是否是文件
        bool=f.isFile();System.out.println(bool);
(5)是否是文件夹
        bool=f.isDirectory();System.out.println(bool);
(6)获取文件的大小
        f=new File("");long len=f.length();System.out.println(len);
(7)文件存在时删除文件  
        if(bool){{//删除文件夹时,文件夹必须是空的文件夹bool=f.delete();System.out.println("成功删除文件"+bool);}

        注:删除文件夹时,文件夹必须是空的文件夹

三、IO  输入输出流

        流动的是数据  数据的形式是二进制

1、分类

根据流动的方向不同     输入流和输出流
根据流动的介质(单位)不同    字符流和字节流字符流只能读取文本 .txt .xml .html .yml .properties字节流可以读取所有的文件类型
根据功能(作用)不同         节点流和工具流  打印流  数据流  对象流
        //字节输入流InputStream is;//字节输出流OutputStream os;//字符输入Reader r;//字符输出Writer w;

2、读取   写出 

(1)读取
    public static void readFile(){FileInputStream fis=null;try{fis=new FileInputStream("D:\\easy.txt");byte[] arr=new byte[12];//读取多少就转换多少int length=0;while((length=fis.read(arr))!=-1){//arr 中就是读到的数据String str=new String(arr,0,length);System.out.print(str);
//                String.valueOf(arr);}}catch (IOException e){e.printStackTrace();}finally {if(fis!=null){try{fis.close();}catch (IOException e){e.printStackTrace();}}}}
(2)写出
    public static void writeFile(){String str="埃弗拉看看发货了覅发记得你说过拉法基的阿凡达发生过阿斯弗而奋";byte[] arr=str.getBytes();FileOutputStream fos=null;try{//覆盖不加第二个参数,追加第二个参数置为truefos=new FileOutputStream("D:\\easy.txt",true);fos.write(arr);}catch (IOException e){e.printStackTrace();}finally {if(fos!=null){try{fos.close();}catch (IOException e){e.printStackTrace();}}}}

默认为覆盖式写出,若要改为追加式可在定义输出流时将第二个参数置为true

3、缓冲流

    public static void readFileBuffer(){//文件字节输入流FileInputStream fis=null;//工具流//转换流  字节流转换成字符流InputStreamReader isr=null;//缓冲流BufferedReader br=null;try{fis=new FileInputStream("D:\\easy.txt");isr=new InputStreamReader(fis);br=new BufferedReader(isr);String line=br.readLine();System.out.println(line);}catch (IOException e){e.printStackTrace();}finally {if(fis!=null){try{fis.close();}catch (IOException e){e.printStackTrace();}}}}

        是工具流的一种,当使用BufferedReader读取数据时,它会从底层流中读取一定数量的数据到内部缓冲区中进行暂时的保存,当读入到特定字符(如:\t \r)后一起发出

4、序列化与反序列化

(1)序列化

        将内存对象转换成序列(流),叫做序列化
        这个对象必须是可序列化的 即实现Serializable接口

    public static void wirteObject(){Staff staff=new Staff();staff.name="张三";staff.sex="男";staff.salary=3500;ObjectOutputStream oos=null;FileOutputStream fos=null;try{fos=new FileOutputStream("D:\\easy.txt");oos=new ObjectOutputStream(fos);oos.writeObject(staff);}catch (IOException e){e.printStackTrace();}finally {if(fos!=null){try{fos.close();}catch (IOException e){e.printStackTrace();}}if(oos!=null){try{oos.close();}catch (IOException e){e.printStackTrace();}}}}

对应的类:

public class Staff implements Serializable {String name;String sex;int salary;@Overridepublic String toString() {return "Staff{" +"name='" + name + '\'' +", sex='" + sex + '\'' +", salary=" + salary +'}';}
}
(2)反序列化

         将对象序列读入程序, 转换成对象的方式:反序列化
         反序列化会创建新的对象

    public static void readObject(){FileInputStream fis=null;ObjectInputStream ois=null;try{fis=new FileInputStream("D:\\easy.txt");ois=new ObjectInputStream(fis);Object obj=ois.readObject();System.out.println(obj);}catch (Exception e){e.printStackTrace();}finally {if(fis!=null){try{fis.close();}catch (IOException e){e.printStackTrace();}}if(ois!=null){try{ois.close();}catch (IOException e){e.printStackTrace();}}}}
(3)序列化版本控制    transient关键词

        对于序列化对象,它的属性也必须是可序列化的,除非该属性是transient修饰的

serialVersionUID  是一个类的序列化版本号
如果该量没有定义,jdk会自动给与一个版本号,当该类发生变化时
该序列化版本号会发生变化,反序列化就会失败
自定义该版本号,只要该版本号不发生变化,即使类中属性/方法改变
该类的对象依旧可以反序列化
反序列化的对象是一个新的对象
private static final long serialVersionUID=1L;private transient String sex;

 transient修饰属性 作用: 禁止属性的值被序列化

        当一个类的属性中有一个是不可序列化的类型或者不想被序列化时,可以使用transient禁止其序列化

 (4)输出流的flash方法
强制将缓冲区中的数据写出到目的地。
在某些情况下,缓冲区中的数据并不会自动写出到目的地,
而是需要显式地调用 flush 方法来实现。
在关闭输出流之前,通常会调用 flush 方法来确保所有待处理的数据都被写出到目的地。
大流套小流 大流执行了flush(),其嵌套的小流会自动执行flush()

  flush()虽然只对缓冲流有作用,但习惯上,所有的输出流在关闭前都会调用 flush()

    public static void writeStudent(Student stu){FileOutputStream fos=null;ObjectOutputStream oos=null;File file=new File("D:\\student.data");if(!file.exists()){try{file.createNewFile();}catch (IOException e){e.printStackTrace();}}try{fos=new FileOutputStream(file);oos=new ObjectOutputStream(fos);oos.writeObject(stu);oos.flush();//强制将缓冲区中的数据写出到目的地。// 在某些情况下,缓冲区中的数据并不会自动写出到目的地,// 而是需要显式地调用 flush 方法来实现。//在关闭输出流之前,通常会调用 flush 方法来确保所有待处理的数据都被写出到目的地。//大流套小流 大流执行了flush(),其嵌套的小流会自动执行flush()}catch (IOException e){e.printStackTrace();}finally {if(oos!=null){try{oos.close();}catch (IOException e){e.printStackTrace();}}if(fos!=null){try{fos.close();}catch (IOException e){e.printStackTrace();}}}}

 

补充总结:

创建对象的方法1 new2 克隆3 反序列化4 反射

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【独家揭秘】模块化沙箱如何为企业筑起源代码防泄露的铜墙铁壁

在数字化转型的浪潮中,企业信息安全面临着前所未有的挑战,尤其是在源代码和敏感数据的保护方面。深信达SDC沙盒防泄密系统以其独特的模块化沙箱技术和全面的数据防泄密策略,为企业提供了一套高效且可靠的解决方案,确保源代码和重要…

夸克Android一面凉经(2024)

夸克Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《夸克Android一面凉经(2024)》。 面试职位: 智能信息-客户端开发工程师-夸克小说 技术一…

【Drools】(二)基于业务需求动态生成 DRL 规则文件:事实与动作定义详解

(二)基于业务需求动态生成 DRL 规则文件:事实与动作定义详解 在现代业务规则管理系统中,灵活高效地生成和管理规则至关重要。通过上一部分的DRT 规则模板(请参考:(一)基于业务需求动…

PHP师生荣誉管理系统—计算机毕业设计源码10079

目 录 摘要 1 绪论 1.1 研究背景 1.2论文结构与章节安排 2 师生荣誉管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

UDP connect 内核源码分析

1 从诡异开始 最近遇到一个线上问题,client 发了一个 udp 请求,服务器回了一个响应,但诡异的是,client 的 log 却看不到对应的处理日志。抓包发现内核发出了一个指示 udp 目的端口不可达的 icmp 报文,类似这样的&#…

ES6语法详解,面试必会,通俗易懂版

目录 Set的基本使用WeakSet 使用Set 和 WeakSet 区别内存泄漏示例:使用普通 Set 保存 DOM 节点如何避免这个内存泄漏MapWeakMap 的使用 Set的基本使用 在ES6之前,我们存储数据的结构主要有两种:数组、对象。 在ES6中新增了另外两种数据结构&a…

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解,它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时,Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

成为git砖家(7): posh-git的安装和使用

文章目录 1. PowerShell 里的 git 默认使用体验不够好2. posh-git 介绍2.1 安装 posh-git2.2 PS1 显示的内容2.3 补全分支 1. PowerShell 里的 git 默认使用体验不够好 在 Windows 系统上,安装了 git for windows 后, git bash 里的体验确实不错。 但是…

C# 获取 Excel 文件的所有文本数据内容

目录 功能需求 范例运行环境 关键代码 组件库引入 获取Excel文件的文本内容 总结 功能需求 获取上传的 EXCEL 文件的所有文本信息并存储到数据库里,可以进一步实现对文件内容资料关键字查询的全文检索。有助于我们定位相关文档,基本实现的步骤如下&…

零代码拖拽,轻松搞定GIS场景编辑

在三维GIS领域,编辑场景和处理影像数据通常是一个复杂且费时的过程,但现在有了山海鲸可视化,这一切都变得简单有趣。这款免费可视化工具为您提供了零代码拖拽式编辑的体验,让您无需编程知识就能轻松创建和优化GIS场景。通过直观的…

Hive多维分析函数——With cube、Grouping sets、With rollup

有些指标涉及【多维度】的聚合,大的汇总维度,小的明细维度,需要精细化的下钻。 grouping sets: 多维度组合,组合维度自定义;with cube: 多维度组合,程序自由组合,组合为…

大数据:数据标准化及质量管控方案

本方案是一套全面的解决方案,旨在为企业构建科学、规范的数据管理体系,确保数据的准确性、一致性、完整性、合理性、及时性和有效性,从而支撑业务数据的高效应用与正确决策。以下是对该方案的详细介绍: 一、方案概述 本数据标准…

迎峰度夏,应急备电:应急电源和燃油发电机哪个好?应急电源选购

在电网迎峰度夏的严峻挑战面前,铂陆帝应急电源以其卓越的性能和可靠性,成为了不可或缺的电力保障伙伴。与燃油发电机相比,铂陆帝应急电源在多个方面均展现出显著的优势。 更高效稳定,性能卓越 铂陆帝应急电源具备出色的性能和稳定…

GPIO子系统

1. GPIO子系统视频概述 1.1 GPIO子系统的作用 芯片内部有很多引脚,这些引脚可以接到GPIO模块,也可以接到I2C等模块。 通过Pinctrl子系统来选择引脚的功能(mux function)、配置引脚: 当一个引脚被复用为GPIO功能时,我们可以去设…

PySide(PyQt)的QPropertyAnimation(属性动画)

学不完,根本学不完:(,感觉逐渐陷入了学习深渊。。。 QPropertyAnimation 是 PySide(PyQt) 中一个用于在时间轴上平滑地改变对象属性的类。它常用于制作动画效果,比如移动、缩放或改变透明度等。 基本概念 QPropertyAnimation 是 Qt …

GPT5发布时间预测,即将到来的GPT5

GPT-5:未来的展望与功能预测 随着人工智能技术的飞速发展,生成式预训练模型(GPT)已经成为自然语言处理领域的核心技术。从 GPT-1 到目前的 GPT-4,每一代模型都带来了显著的进步和变革。那么,GPT-5 的到来将…

【环境搭建问题】linux服务器安装conda并创建虚拟环境

1.检查有没有conda 首先看root文件夹下有没有anaconda或者conda 没有的话就要先下载安装conda: https://repo.anaconda.com/archive/index.html 在这个链接下找自己需要的。服务器一般为linux,所以我这里选择的是: 2.安装conda 下载安装…

自动控制:PID控制器参数对控制性能的影响

自动控制:PID控制器参数对控制性能的影响 PID控制器是工业控制领域中最常用的控制算法之一。PID控制器通过调节比例、积分(I)、微分(D)三个参数,使系统达到预期的控制效果。本文将详细讨论PID控制器的三个参数对控制性能的影响,并给出一些实…

Python脚本:使用PyPDF2给一个PDF添加上页数/总页数标签

一、实现代码 import PyPDF2 from PyPDF2 import PdfWriter from PyPDF2.generic import AnnotationBuilder# 指定输入和输出pdf pdf_path rC:\Users\ASUS\Desktop\temp\xxxx.pdf out_path rC:\Users\ASUS\Desktop\temp\xxxx2.pdf# 创建 PdfWriter 对象 writer PdfWriter()…

【管理咨询宝藏148】顶级咨询公司大型线下连锁门店客户生命周期规划方案

【管理咨询宝藏148】顶级咨询公司大型线下连锁门店客户生命周期规划方案 【格式】PDF版本 【关键词】零售数字化、客户生命周期、客户画像 【核心观点】 - 在多年的行业研究积累过程中,将每个行业中具有典型代表性的用户维度进行了总结。本项目选择用户服务的标杆企…