集合、多线程和I/O流等
介绍6种常用工具类:
1.如何应用异常处理程序中的问题?2.如何通过包装器类实现基本数据类型的对象化处理?3.字符串处理类String、StringBuilder是如何进行字符串信息操作的?4.常用集合框架及实现类使用?5.如何使用Java输入输出流进行文件读写?6.如何使用多线程实现数据并发通信?

1.3.1 Java异常

什么是异常处理机制以及如何实现Java中的异常处理。
Java异常:1.什么是异常?2.如何处理异常:1.try-catch-finally.2.throw.3.throws.4.自定义异常.5.异常链.
异常本质上是程序上的错误,包括编译期间和运行期间的错误.

Throwable类是Java当中异常的根类,它有两个重要的子类:Error(Error是程序无法处理的错误,表示运行应用程序中较严重的问题.代码运行时,Java虚拟机出现的一系列问题:Error类对象由Java虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关,是错误,如虚拟机错误VirtualMachineError、内存溢出OutOfMemoryError、线程死锁ThreadDeath等,且不可查,他们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况.对于设计合理的应用程序来说,即使确定发生了错误,本质上也不应该试图去处理它所引起的异常状况.因此不需关心Error类及其子类异常,但不希望出现这些异常.)、Exception(Exception是程序本身可处理的异常.异常处理通常只针对这种类型异常的处理.)
Exception异常分为两类;非检查异常Unchecked Exception(编译器不要求强制处理的异常RuntimeException及其相关子类,如空指针异常NullPointerException,数组下标越界异常ArrayIndexOutOfBoundsException,算数异常ArithmeticException,类型转换异常ClassCastException等),检查异常Checked Exception(编译器要求必须处置的异常.不处理编译无法通过,在Exception异常下的非检查异常之外的异常都称检查异常,如IO异常IOException,SQL异常SQLException等).
异常处理:在Java应用程序中,异常处理机制为:抛出异常,捕捉异常.可提升程序的健壮性。通过5个关键字来实现:try、catch、finally、throw、throws.捕获异常:try(执行可能产生异常的代码)、catch(捕获异常)、finally(无论是否发生异常代码总能执行).声明异常:throws(声明可能要抛出的异常).抛出异常:throw(手动抛出异常).
抛出异常:方法中出现错误引发异常时,方法会创建异常对象,并交付给运行时系统进行处理,此异常对象包含异常类型,异常出现时的程序状态等信息.
捕捉异常:当运行时系统捕获到这个异常后,运行时系统会逐步寻找合适的处理器,若找到与异常匹配的处理器会执行相关的处理逻辑,若没有找到程序会运行停止.
对于运行时异常、错误或可查异常,Java技术所要求的异常处理方式有所不同.Java规定:对于可查异常必须捕捉、或声明抛出.允许忽略不可查的RuntimeException(含子类)和Error(含子类).
捕获异常try-catch-finally:

发生异常后try-catch块中try后面的语句不再执行。

一般程序中非检查异常/运行时异常未被异常处理,导致程序中断运行。检查异常/编译时异常编译时已经捕捉或声明抛出了。


try块:用于捕获异常.catch块:用于处理try捕获到的异常.finally块:无论是否发生异常代码总能执行.try块后可接零个或多个catch块,若无catch块,则必须跟一个finally块.catch块和fianlly块不能单独使用.
控制台异常的查看:一般从最后一行看,最后一行是异常的最外层异常展示,向上深入.Exception类对象的printStackTrace()方法可打印错误的堆栈信息.
多重catch结构:多个catch块用于精准处理不同类型的异常,因为可能没有覆盖全部出现的异常,建议最后一个catch块写异常的父类Exception异常块收尾(此异常块放第一编译报错)处理各种类型异常.
System.exit(1);System类中的exit方法,当方法参数为非零数字时终止程序运行
后面的return会覆盖前面的返回值!程序遇见return;表示当前方法执行完成,就会退出方法!但是在try-catch-finally中比较特殊,退出方法之前要先执行finally块中的语句!
throws关键字:可通过throws关键字声明要抛出何种类型的异常,通过throw将产生的异常抛出。若一个方法可能出现异常,但没有能力处理这种异常,可在方法声明处用throws语句来声明抛出异常。throws语句用在方法定义时声明该方法要抛出的异常类型。

当方法抛出异常列表中的异常时,方法将不对这些类型及其子类类型的异常作处理,而抛向调用该方法的方法,由他去处理。
通过throws抛出异常时,针对可能出现的多种异常情况,解决方案:1.throws后面接多个异常类型,中间用逗号分隔。2.throws后面接Exception,调用该方法的方法必须有捕捉Exception异常的处理。
可通过添加文档注释提示你调用该方法时该方法可能会出现它声明的异常。
当throws非检查型异常时,在调用方法处,编译器不会要求对异常进行处理
throw关键字:throw用来抛出一个异常(抛出一个异常类的实例化对象)。eg:throw new IOException();throw抛出的只能够是可抛出类Throwable或其子类的实例对象
使用throw关键字的优点:1.规避可能出现的风险。2.完成一些程序的逻辑。
throw抛出异常对象的处理方案:1.通过try…catch包含throw语句–自己抛自己处理。2.通过throws在方法声明出抛出异常类型(此时只能抛出与throw对象相同的类型或其父类)–谁调用谁处理–调用者可自己处理,也可继续上抛。
throw手动抛出的异常不建议是非检查类型,因为编译器不报错。
如果抛出的异常对象是Checked异常(除了RuntimeException及其子类的其他Exception),则要 (1)处于try块里被catch捕获或者(2)放在一个带throws声明的方法里;思考:(1)(2)是否多次一举。
如果抛出的是RuntimeException则既可以显示使用try…catch捕获也可以不理会它 。
使用Java内置的异常类可描述在编程时出现的大部分异常情况。也可通过自定义异常描述特定业务产生的异常类型。所谓自定义异常,就是定义一个类,去继承Throwable类或其子类
快捷键Ctrl+t或Ctrl鼠标左击进入jar包看源码或直接在工程-JRE System Library-rt.jar包下查找。看源码主要看:1.需了解Java的23种基本设计模型。2.需了解框架的真正实现类(配置与运行结合看)。3.多找一些源码包进行解析。rt.jar包是Java基础类库。
异常链:有时会捕获一个异常后再抛出另一个异常。顾名思义就是:将异常发生的原因一个传一个串起来,即把底层的异常信息传给上层,这样逐层抛出.
最后输出的异常信息就只有最后一个。若想把前面所得异常信息都输出,需保留异常信息,有两种方式:1.通过构造方法对旧异常对象的获取。Throwable(String message,Throwable cause)–保留底层异常的异常信息。2.通过initCause(Throwable cause)方法(一个旧异常的信息来初始化一个新的异常)用来获取原异常的信息,其中cause是原异常的对象。
总结:
实际应用中的经验与总结:1.处理运行时异常时(非检查异常),采用逻辑去合理规避同时辅助try-catch处理。2.在多重catch块后面,可加一个catch(Exception)来处理可能会被遗漏的异常。3.对于不确定的代码,也可加上try-catch,处理潜在的异常。4.尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出异常信息。5.具体如何处理异常,要根据不同的业务需求和异常类型去决定。5.尽量添加finally语句块去释放占用的资源。如关闭文件、关闭数据库的链接等。

1.3.2 Java包装类

基础数据类型和包装类之间的转换。
什么是包装类?包装类与基本数据类型之间的对应关系?包装类的常用方法?

基本数据类型没有对象的特征,没有属性、方法,无法对象化交互。但通过包装类可使基本数据类型拥有属性、方法,可对象化交互。

基本数据类型的数值型的包装类都继承Number类,基本数据类型的字符型和布尔型继承Object类。包装类都是java.lang包下的类。
基本数据类型和包装类之间的转化:装箱:基本数据类型的值转换为包装类对象。拆箱:包装类对象转换为基本数据类型的值。
装箱和拆箱都有自动和手动两种方式。装箱:1.自动装箱。eg:int t1=2; Integer t2=t1;(JDK自动创建了对象默认调用valueOf()方法,在常量数组缓存区又称对象池范围内只会创建一次对象,不在范围会创建多次对象。当使用new时,不管在不在常量数组缓存区又称对象池范围内,new Integer(t1),new多少次就创建多少对象;便于代码书写)。2.手动装箱。eg:Integer t3=new Integer(t1);拆箱:1.自动拆箱。eg:int t4=t2;2.手动拆箱。Int t5=t2.intValue();(默认调用包装类对象名.intValue()方法)实际上自动装/拆箱是自动完成了手动装/拆箱的过程
Shift+向上的箭头快捷键选中上一行,后可复制粘贴。
System.out.println();打印对象时默认调用toString()会打印类名加上@加上对象的哈希值,但打印包装类的对象时,因为包装类重写了toString()方法会直接打印对象值的字符串。
基本数据类型和字符串之间的转换:


parseInt(t2)方法返回值是int型,valueOf(t2)方法返回值是Integer对象
int t4=Integer.valueOf(t2)隐含调用t2.intValue()方法,将Integer对象转换成int型值。
在java中,两个类并不能直接转换,这是语法规则。实际通过该类实例一个新对象保存另一个类的值

包装类对象的默认值都是null
包装类对象间的比较:对象和对象做比较(用==)是比较两者之间地址是否相等。Java提供了一个缓存区机制,当数值在**[-128,127]时,将数据放入对象池(缓存区,也有称常量池**!=JVM常量池)中。每次赋值,去取值时,从常量数组缓存区又称对象池中获取,所以,两次地址是相等的(eg:Integer num=100;相当于Integer num=Integer.valueOf(100)

Java常用工具类之异常、包装类、字符串处理类、集合框架实现类、输入输出流、多线程相关推荐

  1. java常用工具类和Hutool常用的工具类整理

    java常用工具类和Hutool常用的工具类整理 1.java常用工具类 1.1 Scanner类 /*** Scanner 类*/@Testpublic void testScanner() {Sc ...

  2. JAVA常用工具类(实用高效)

    JAVA常用工具类(根据GITHUB代码统计) 从Google你能搜索到大量的关于Struts,Spring,Hibernate,iBatis等比较大的框架的资料,但是很少有人去关注一些小的工具包,但 ...

  3. Java常用工具类StringUtils的常用方法

    Java常用工具类StringUtils的常用方法 1.该工具类是用于操作Java.lang.String类的. 2.StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字 ...

  4. Java常用工具类JsonUtils

    Java常用工具类JsonUtils 一.项目添加pom文件 <dependency><groupId>com.google.code.gson</groupId> ...

  5. Java常用工具类库

    Java常用工具类库 1. java自带工具方法 2. apache commons工具类库 2.1 commons-lang,java.lang的增强版 2.2 commons-collection ...

  6. Hutool Java常用工具类汇总

    简介 Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以"甜甜的". Hu ...

  7. java 常用工具类的使用一

    1. Java工具概述 很多人初学程序时,总是在想,那么多的算法该怎么写呀?那么多的数据结构都不熟悉,该怎么实现呀?总是担心英语不好程序学不精通,数学不好写程序无法达到巅峰.学的程序越多,不懂的知识越 ...

  8. Java常用工具类整合

    JSON转换工具 package com.taotao.utils;import java.util.List;import com.fasterxml.jackson.core.JsonProces ...

  9. Java 常用工具类整理

    目录 第一部分:常用的16个工具类 第二部分:java开发常用工具类(正则校验) 第一部分:常用的16个工具类 一.org.apache.commons.io.IOUtils 1.closeQuiet ...

最新文章

  1. 手机号码 与 邮箱验证
  2. android 编译过程
  3. 电容电阻贴片封装尺寸
  4. 将一个java工程导入到myeclipse应该注意的地方
  5. keil MDK中如何生成*.bin格式的文件
  6. 最短路径(二维矩阵)
  7. linux mint 安装内核,使用Ukuu在Ubuntu/Linux Mint上安装Linux Kernel 5.0的方法
  8. 关于中断和异常的几点认识
  9. RobotFramework特性总结
  10. atitit.TokenService v3 qb1 token服务模块的设计 新特性.docx
  11. 学习【阿里巴巴Java开发手册-嵩山版】
  12. lsb隐写的基本方法matlab,GitHub - RGNil/RG_LSB: 利用python实现LSB隐写算法(我自己改进了LSB算法),并进行了性能分析(psnr、错误率、鲁棒性)...
  13. php网页缩略图api,美图WEB开放平台 - 开发文档
  14. Windows系统申请苹果证书
  15. 网页中标签对搜索引擎的影响
  16. nginx之root alias proxy_pass测试
  17. ubuntu下docker的lnmp(二) 安装php-fpm之 下载镜像启动容器
  18. java如何枚举定义一个数组_Java中如何将字符枚举类变成一个数组
  19. JAVA-20 从前端传数据到数据库
  20. Python3.x 网络爬虫之淘宝模特照片信息爬取

热门文章

  1. [Unity3D学习]Unity代码热更新 源码下载
  2. 乐xiu短视频制作神器,特效剪辑与制作,快速打造惊艳朋友圈的Vlog
  3. 人工智能基础-特征分解与奇异值分解的的几何意义
  4. 夜间模式(黑夜模式)的简单实现
  5. Unity Shaders and Effects
  6. 最成熟的前端换肤方案(主题切换)
  7. 探寻智能网联趋势下“中国模式”创新崛起之路
  8. log4j配置文件加载方式
  9. 解决:Python的os.popen()在read()时,出现“�Ҳ����ļ�乱码及结果错误”的问题
  10. 作为一名35岁的测试人,拿我的经历给焦虑的朋友们一点借鉴。