关于java代码中的异常理解

  通过使用Java语言进行安卓开发的时候经常遇到一些异常,想用一种找孩子的方式进行简单的理解化转换。

 1. java.lang.NullPointerException(空指针异常)
  调用了未经初始化的对象或者是不存在的对象

    java.lang.FileNotFoundException

     文件未找到异常

    简单的说就是找不到孩子,解决方法就是首先要有一个孩子,没有孩子就生一个(创建对象),孩子要求是活的(没有空值判断的情况下,要给对象赋值),

    孩子在哪搞清楚(对象要引用正确,地址是对的),这样基本孩子应该能找到了。

2. java.lang.ClassNotFoundException  

   指定的类不存在(或者指定的变量不存在,指定的方法不存在,主要原因是没有创建,或者创建后地址(名称)不对,所有找不到)

   简单的说你要找一个有3只眼睛的孩子,因为没有这种类型的孩子,所以你无法肯定能生一个三只眼的孩子(无法创建对象)。解决方法,首先确定是不是3只眼睛的孩子,如果是2只眼睛的孩子,是普通孩子,只要引用人类就可以创建(已有的类可以进行对象的创建)

3. java.lang.NumberFormatException

   字符串转换为数字异常

    java.lang.ClassCastException

    数据类型转换异常

   简单来说就是你要把一棵树变成你的孩子,因为他们的类型不同,所以无法转换,解决方法是要么不转换,要么寻找正确的方法转换,或者自己创造转换方法,(就像如果你是科学家,你可以发明把树转换为人的方法,呵呵)

4. java.lang.IndexOutOfBoundsException

  数组下标越界异常

    简单来说就是你把你的孩子放在你家的卧室,你却在厕所找,你寻找的范围出错了,所以找不到,解决方法是明确范围,只在范围内查找

5. java.lang.IllegalArgumentException

 方法的参数错误

  简单来说就是你给你的孩子喂瓶子吃,因为你的孩子吃的是食物(传入参数的类型),而塑料瓶不是食物,所以孩子吃瓶子发生错误,解决方法是首先明确孩子吃的是什么类型(这里是食物),确定你给孩子的是食物(确定传入参数的类型),才进行喂食物的行为(调用方法)。

6. java.lang.IllegalAccessException

 没有访问权限

  简单的说就是你在别人家里找孩子,因为你没有权利进入别人家里,(没有访问权限)所以是错误的,解决方法(1)不进入别人家里(没有访问权限的不访问)(2)经过别人同意后,进入别人家里(修改访问权限,拥有访问权限)

7. java.lang.ArithmeticException

 数学运算异常

  简单的说就是你直接让你的孩子凭空消失,因为不符合物理规律(不符合数学运算规则),所以出错

还有一些其他的异常,后面有时间继续整理,关于这些异常只是自己的理解,有不到位的地方希望和各位共同交流,一起进步。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CyclicBarrier 是 Java 的一个同步工具类,它允许一组线程互相等待,直到所有线程都到达某个屏障点,然后再一起继续执行。CyclicBarrier 可以循环使用,因此称之为循环屏障。 下面是 CyclicBarrier 工具类的基本使用示例: ```java import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; public class CyclicBarrierDemo { public static void main(String[] args) { // 创建一个 CyclicBarrier 实例,指定等待线程数和屏障动作 CyclicBarrier cyclicBarrier = new CyclicBarrier(3, () -> { System.out.println("所有线程已到达屏障点,开始执行屏障动作"); }); // 创建 3 个线程,模拟多个线程同时到达屏障点 for (int i = 0; i < 3; i++) { new Thread(() -> { try { System.out.println(Thread.currentThread().getName() + " 已到达屏障点,等待其他线程"); cyclicBarrier.await(); // 等待其他线程到达屏障点 System.out.println(Thread.currentThread().getName() + " 继续执行"); } catch (InterruptedException | BrokenBarrierException e) { e.printStackTrace(); } }).start(); } } } ``` 上述代码,我们创建了一个 CyclicBarrier 实例,指定等待线程数和屏障动作。然后创建了 3 个线程,模拟多个线程同时到达屏障点,每个线程到达屏障点后等待其他线程,直到所有线程到达屏障点,才会继续执行。 在 CyclicBarrier 的构造函数,我们指定了等待线程数为 3,也就是说,只有当 3 个线程都到达屏障点时,才会执行屏障动作。屏障动作是一个 Runnable 对象,它会在所有线程到达屏障点后执行一次。 在每个线程执行的代码,我们调用了 CyclicBarrier 的 await() 方法,等待其他线程到达屏障点。当所有线程都到达屏障点后,await() 方法会返回,线程继续执行。 需要注意的是,CyclicBarrier 的 await() 方法可能会抛出 InterruptedException 和 BrokenBarrierException 异常,因此需要在 catch 块处理这两个异常

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值