首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 异常处理一览 | 基础篇

运行时系统会在调用堆栈中寻找包含可以处理异常的代码块的方法,这段代码就称为异常处理程序。通过调用堆栈,从错误发生的方法开始,按照方法调用相反的顺序寻找(栈有先进后出的特点)。...然后就是调用堆栈,调用堆栈里的每一行信息都标明了异常流转过程中所在的方法路径,类名以及代码行数。 其中第一行信息就是异常最先发生的地方,这也可以作为我们异常排查的依据。...代码可以是一行,也可以是多行。这也意味着这个代码块可能引发多种不同的异常。 异常处理程序只有 try 是无法通过编译的。...System.out.println(e); } } 输出结果为: 捕获到数组越界异常: java.lang.ArrayIndexOutOfBoundsException: 3 有些场景,我们的一段代码可能引发多种异常...或异常类型2 ExceptionType2 时的异常处理代码 } 使用 finally 程序在运行的时候有时候会打开一些资源,比如文件,连接,线程等等。

87420

try catch 中的异常怎么处理?

背景介绍 在我们日常开发中, 经常会遇到一些异常需要去手动处理, 或者说是一些可能出现的异常去处理, 又或者说你不知道的异常, 等着暴露出来发现后去处理, 无论哪种异常, 当它出现的时候都是头疼的....实况 在我们开发过程中对一些可能出现异常的地方, 也就是非检查型异常, 需要我们自己凭经验去做异常处理, 当然你也可以大手一挥任其随意抛出.(佛系异常, 道系领导)....此招式可使问题永远藏在 #$%^ 的代码中, 永远做一个"优秀的开发者", 相信他会在自己的梦想道路上渐行渐远 ---- round two 这是来自一个对try catch第二次使用的 *&^% 选手...业务中如果出现非检查型异常那么恭喜你, 你又可以加班了....保证异常使用的输出流与系统日志一致, 同时将异常信息内容输出到日志文件中, 不占用字符缓冲区大小 同时与大家共勉, 为我们热爱的代码做一点贡献, 发现自己的项目中有以上列举的缺陷代码能够及时完善.

1.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java程序设计学习知识点总结

    ){} 在主方法的大括号中间添加一行输出语句 System.out.println(“HelloWorld”); 数组 数组的定义格式: 格式1:数据类型【】数组名; 格式2:数据类型 数组名...【】; 一维数组: int[] arr = new int[10]; 二维数组: int[] [] arr = new int[10][10]; 数组索引越界异常和空指针异常 java.lang.ArrayIndexOutOfBoundsException...数组越界异常 java.lang.NullPointerException 空指针异常 方法概述 简单的说,方法就是完成特定功能的代码块 方法的格式 修饰符 返回值类型 方法名(参数类型...FileWriter向文件中写数据 FileWriter方法: 构造方法 FileWriter(String fileName)传入一个文件的路径 成员方法 void write(String str)...//BufferedReader:从字符输入流中读取文本,缓冲各个字符 public class BufferedStreamDemo{ public static void main(String[

    17820

    Java学习笔记之常用API & 异常

    0x00 概述 本篇涉及Java知识点有Java常用API(包装类,时间日期类),Java异常处理 0x01 包装类 1.1 基本类型包装类 基本类型包装类的作用     将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据...// 定义一个字符串 String s = "91 27 46 38 50"; // 把字符串中的数字数据存储到一个int类型的数组中 String[]...,把String[]数组中的每一个元素存储到int数组中 int[] arr = new int[strArray.length]; for (int i = 0; i...Arrays.sort(arr); // 把排序后的int数组中的元素进行拼接得到一个字符串,这里拼接采用StringBuilder来实现 StringBuilder...// 创建日期对象 Date d = new Date(); // public long getTime(): 获取的是日期对象从1970年1月1日 00:00:00

    40510

    代码审查:从 ArrayList 说线程安全

    ---- 本文从代码审查过程中发现的一个 ArrayList 相关的「线程安全」问题出发,来剖析和理解线程安全。...().forEach(v -> { String value = doSomething(v); resultList.add(value); }); 印象中 ArrayList 是线程不安全的...先贴个概念: 线程安全 是程式设计中的术语,指某个函数、函数库在多线程环境中被调用时,能够正确地处理多个线程之间的共享变量,使程序功能正确完成。...数组长度为 8,却访问 elementData[8],数组下标越界 程序会抛出异常,无法正常执行完,根据前文提到的线程安全的定义,很显然这已经是属于线程不安全的情况了。...、提升程序执行效率的写法,我们在编码的过程中,对用到多线程的地方要保持警惕,有意识地预防此类问题。

    96020

    RuntimeException和Exception区别

    重要的事情说三遍,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来,比如经典的1/0,空指针等。...java.lang.ArrayIndexOutOfBoundsException 这个异常的解释是”数组下标越界”,现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围...,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的...java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。...java.lang.ArithmeticException 算术条件异常。譬如:整数除零等。 java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。

    1.1K10

    Java 语言基础(异常机制和File类,IO流,多线程,网络编程,反射机制)

    read(char[] cbuf, int offset, int length) 从输入流中将最多 len 个字符的数据读入一个字符数组中,返回读取到的字符个数,返回 -1 表示读取到末尾 int...read(char[] cbuf) 从此输入流中将最多 cbuf.length 个字符的数据读入字符数组中,返回读取到的字符个数,返回 -1 表示读取到末尾 void close() 关闭流对象并释放有关的资源...int read(byte[] b, int off, int len) 从此输入流中将最多 len 个字节的数据读入字节数组中,返回读取到的字节个数,返回 -1 表示读取到末尾 int read(byte...[] b) 从此输入流中将最多 b.length 个字节的数据读入字节数组中,返回读取到的字节个数,返回 -1 表示读取到末尾 void close() 关闭流对象并释放有关的资源 int available...个字符放入数组 cbuf 中下标从 off 开始的位置上,若读取到末尾则返回 -1,否则返回实际读取到的字符个数 int read(char[] cbuf) 从输入流中读满整个数组 cbuf String

    79120

    Java 异常处理

    (多个catch) 对异常的处理: 1,声明异常时,建议声明更为具体的异常,这样可以处理的更具体 2,对方声明几个异常,就对应几个catch块, 如果多个catch块中的异常出现继承关系,父类异常catch...try { int x = d.div(4,0);//程序运行截图中的三组示例 分别对应此处的三行代码...: 4 Over Java 实例 - Finally的用法 Java 中的 Finally 关键一般与try一起使用,在程序进入try块之后,无论程序是因为异常而中止或其它方式返回终止的,finally...for(int i =5;i >=0; i--) { System.out.println ("数组的元素值为 " +array[i]); }...: 结果为 1 触发异常 : java.lang.ArrayIndexOutOfBoundsException: 5 Java 实例 - 多线程异常处理 以下实例演示了多线程异常处理方法: class

    10310

    第五阶段-IO基础:【第一章 异常】

    (2) 体系 (1) Error —— 错误:程序无法处理的严重错误,我们不作处理 这种错误一般来说与操作者无关,并且开发者与应用程序没有能力去解决这一问题,通常情况下,JVM会做出终止线程的动作 (2...(数组越界异常)等。...语句 但是我们如果将finally中return行中的注释去掉,运行结果就会变成下面这样子 //运行结果 java.lang.ArrayIndexOutOfBoundsException: 3 This...,强制终止程序运行,并且将异常信息返回,由开发者决定是否处理异常 简单说一下这个异常机制的过程: 当程序无法运行后,它会从当前环境中跳出,并且抛出异常,之后,它会先new一个异常对象,然后在异常位置终止程序...,并且将异常对象的引用从当前环境中返回,这时候异常处理机制接管程序,并且开始寻找可以继续执行程序的恰当位置。

    40030

    异常处理

    Throwable是所有异常类的父类派生了两大类Error与Exception Error是用来描述java运行系统中的类部错误像内存溢出等 Exception类称为非致命性类,可通过捕捉处理程序使其继续执行...处理异常方法 try...catch代码块 当try中代码出现异常时中断就会产生相对应的异常类对象传入catch中并开始执行catch中的代码 class test{ public static...void main(String[] args) { int[] arr = {1,2,3}; try { System.out.println(arr...除非在之前虚拟机被关闭System.exit()或者它本身有异常以及程序所在线程死亡,这些种情况下才不会被执行 抛出异常 throws通常被应用在声明方法时来指定抛出的异常 调用声明了异常的方法就会有编译异常...if(a==0){ throw new Exception("出错了"); } } public static void main (String[] args) throws

    93410

    StringBuilder和StringBuffer的区别

    分析 在分析这个问题之前,我们要知道StringBuilder和StringBuffer的内部实现其实跟String是一样的,都是通过一个char类型的数组进行存储字符串的,不同的是String类中的char...假设这个时候count值为10,len值为1,两个线程同时执行到了第七行,拿到的count值都是10,执行完加法运算后将结果赋值给count,所以两个线程执行完后count值为11,而不是12。...()方法源码的第六行,是将String对象里面char数组里面的内容拷贝到StringBuilder对象的char数组里面,代码如下: str.getChars(0, len, value, count...这个时候线程1的cpu时间片用完了,线程2继续执行。...线程2执行完整个append()方法后count变成6了 线程1继续执行第六行的str.getChars()方法的时候拿到的count值就是6了,执行char数组拷贝的时候就会抛出ArrayIndexOutOfBoundsException

    29410

    为什么StringBuilder是线程不安全的?

    在前面的面试题讲解中我们对比了String、StringBuilder和StringBuffer的区别,其中一项便提到StringBuilder是非线程安全的,那么是什么原因导致了StringBuilder...StringBuilder中针对字符串的处理主要依赖两个成员变量char数组value和count。...这就是count存在的意义,因为数组中的一部分内容为默认值。 当调用append方法时会对count进行增加,增加值便是append的字符串的长度,具体实现也在抽象父类中。...我们知道该操作是线程不安全的,那么便会发生两个线程同时读取到count值为5,执行加1操作之后,都变成6,而不是预期的7。这种情况一旦发生便不会出现预期的结果。...抛异常的原因 回头看异常的堆栈信息,回发现有这么一行内容: at java.lang.String.getChars(String.java:826) 对应的代码就是上面AbstractStringBuilder

    1.6K10

    导致程序崩溃的一行代码,你有写过吗?

    java中的代码就是如下: String [] arr = new String[]{"1","2","3"}; String str = arr[4] 程序中显然存在内存越界问题,这样程序肯定会报错,...所以我们写代码的时候就不要忘了加个数组长度的判断,正确代码如下: String [] arr = new String[]{"1","2","3"}; if(arr.length>4){...String str = arr[4] } 只要加了这一行判断的代码,程序就不会报错了。...java.lang.ArrayIndexOutOfBoundsException是运行时异常, 编译器是不会知道的,只有运行时jvm才能捕获到。...通常预防数组越界导致程序运行出错的方法有下面几种,可以参考一下: 检查传入参数的合法性,每次操作的时候都检查一遍参数 在处理的时候,可以先判断数组的大小,比如我上面举的例子。

    1.1K20

    Java的基本语法。

    ,在以后的升级版本中可能会作为关键字;想了解更多加QQ群764261140 二、基本数据类型   1....位运算符 publicclass Test003 {     publicstaticvoid main(String[] args) {         //在位运算符中1相当于true,0相当于falseintb1...(i[5]);    //当通过数组下标来获取数组内元素时,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界)        ...}};//直接初始化一个二维数组元素                System.out.println(d[3][1]);//通过数组下标来获取数组内的元素,数组下标从0开始,结果为8System.out.println...,[]内的值>=数组长度则报异常java.lang.ArrayIndexOutOfBoundsException(数组下标越界)         //System.out.println(ii[0][0

    52750

    Java基础八股文第一弹

    异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。...2、继承是从已有的类中派生出新的类,新的类继承父类的属性和行为,并能扩展新的能力,大大增加程序的重用性和易维护性。在Java中是单继承的,也就是说一个子类只有一个父类。...当赋值100给Integer时,刚好在这个范围内,所以从cache中取对应的Integer并返回,所以二次返回的是同一个对象,所以==比较是相等的,当赋值200给Integer时,不在cache 的范围内...线程安全 String 不可变,因此是线程安全的 StringBuilder 不是线程安全的 StringBuffer 是线程安全的,内部使用 synchronized 进行同步 String 类的常用方法有哪些...split():分割字符串,返回一个分割后的字符串数组。 getBytes():返回字符串的 byte 类型数组。 length():返回字符串长度。

    98710

    ArrayList源码和多线程安全问题分析

    class access 在ArrayList中此数组即是共享资源,当多线程对此数据进行操作的时候如果不进行同步控制,即有可能会出现线程安全问题。...从以上执行结果来看,最后输出的结果会小于我们的期望值。即当多线程调用add方法的时候会出现元素覆盖的问题。...1.4 数组容量检测的并发问题 在add方法源码中,我们看到在每次添加元素之前都会有一次数组容量的检测,add中调用此方法的源码如下: ensureCapacityInternal(size + 1);...,可能会抛出java.lang.ArrayIndexOutOfBoundsException异常。...第二个线程往数组中添加数据的时候由于数组容量为10,而此操作往index为10的位置设置元素值,因此会抛出数组越界异常。

    95340

    JavaSE学习总结(八)—— 异常处理(Exception)

    异常不是错误 程序中关键的位置有异常处理,提高程序的稳定性 二、掌握Java异常处理机制  Java的异常处理是通过5个关键字来实现的 try:尝试,把有可能发生错误的代码放在其中,必须有 catch:...Exception1 { public static void main(String[] args) { try { Scanner input =...//数组索引越界异常 java.lang.ArrayIndexOutOfBoundsException //数组存储异常,存放非数组声明类型 java.lang.ArrayStoreException...//非法的状态异常 java.lang.IllegalStateException //非法的线程状态异常 java.lang.IllegalThreadStateException //索引越界异常...//数组大小为负值异常 java.lang.NegativeArraySizeException //属性不存在异常,当访问某个类的不存在的属性时抛出该异常 java.lang.NoSuchFieldException

    1.3K90

    JDK源码解析之 java.lang.Exception

    ; 3.应该在应用程序级被处理; Error: 1.总是不可控制的(unchecked); 2.经常用来表示系统错误或者底层资源错误; 3.如果可能的话,应该在系统级被捕捉; Exception和从它派生而来的所有异常都是所有应用程序能够...java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。...java.lang.ArrayIndexOutOfBoundsException 数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。...java.lang.ArrayStoreException 数组存储异常。当向数组中存放非数组声明类型对象时抛出。 java.lang.ClassCastException 类造型异常。...当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。

    87810
    领券