发布于2020-11-19 20:12 阅读(1663) 评论(0) 点赞(24) 收藏(5)
这类问题不能通过代码解决,是硬件问题。
例子.jvm内存不足时异常.
public static void main(String[] args) {
List list = new ArrayList<>() ;
while(true){
list.add(new Random());//随机加数
}
public static void main(String[] args) {
String s = null;
s.length();
}
//异常结果
(异常类型--空指针异常)
Exception in thread "main" java.lang.NullPointerException
at day01.ErrorDemo.main(ErrorDemo.java:65)
public static void main(String[] args) {
int[] a = new int[3];
a[3]=1;
}
//异常结果
(异常类型--数组下标越界)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at day01.ErrorDemo.main(ErrorDemo.java:19)
public static void main(String[] args) {
int a = 10;
int b = 0;
System.out.println(a/b);
}
//异常结果
(异常类型--算数异常) (异常原因)
Exception in thread "main" java.lang.ArithmeticException: / by zero
at day01.ErrorDemo.main(ErrorDemo.java:19)
(异常位置)//异常的位置和原因可能不在同一个地方
public static void main(String[] args) {
String s = "gogogo";
Object obj = s;
if (obj instanceof Integer){
Integer i = (Integer) obj;
}
//异常结果
(异常类型--类型转换异常--将实例转化为不属于对象的子类.)
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at day01.ErrorDemo.main(ErrorDemo.java:39)
public static void main(String[] args) {
int i = Integer.parseInt("fight");//parse()将字符串参数解析为带符号的十进制整数。
}
//异常结果
Exception in thread "main" java.lang.NumberFormatException: For input string: "fight"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at day01.ErrorDemo.main(ErrorDemo.java:53)
如果程序员对异常不做处理那么虚拟机就会直接结束程序运行,给出异常信息。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at day01.ErrorDemo.main(ErrorDemo.java:19)
Throwable是所有异常的祖先类,它有两个子类:Exception类、Error类。
捕获异常最理想的是在编译期间,但有的异常只有在运行时才会发生。比如:除数为0,数组下标越界等。因此,异常又分为:运行时异常、编译时异常。
运行时异常
程序运行时,才会抛出的异常,也叫非受检异常。
举例:
//数组下标越界
/* (异常类型--数组下标越界)
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at day01.ErrorDemo.main(ErrorDemo.java:19)
public static void main(String[] args) {
int[] a = new int[3];
a[3]=1;
}
//算数异常
/* (异常类型--算数异常) (异常原因)
Exception in thread "main" java.lang.ArithmeticException: / by zero
at day01.ErrorDemo.main(ErrorDemo.java:19)
(异常位置)//异常的位置和原因可能不在同一个地方
public static void main(String[] args) {
int a = 10;
int b = 0;
System.out.println(a/b);
}*/
//类型转换异常
/* (异常类型--类型转换异常--将实例转化为不属于对象的子类.)
Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at day01.ErrorDemo.main(ErrorDemo.java:39)
public static void main(String[] args) {
String s = "gogogo";
Object obj = s;
if (obj instanceof Integer){
Integer i = (Integer) obj;
}
}*/
//数字格式化异常
/* (异常类型--数字格式化异常)
Exception in thread "main" java.lang.NumberFormatException: For input string: "fight"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at day01.ErrorDemo.main(ErrorDemo.java:53)
public static void main(String[] args) {
int i = Integer.parseInt("fight");//parse()将字符串参数解析为带符号的十进制整数。
}*/
//空指针异常
/* (异常类型--空指针异常)
Exception in thread "main" java.lang.NullPointerException
at day01.ErrorDemo.main(ErrorDemo.java:65)
public static void main(String[] args) {
String s = null;
s.length();
}*/
编译时异常
体系图
try{
可能会发生异常的代码
}catch(异常类型 引用名){
异常处理代码
}finally{
必须执行代码
}
public static void main(String[] args) {
int a = 10;
int b = 0;
try{
System.out.println(a/b);//可能出现异常的语句。
}catch (ArithmeticException p){//在此处填上异常的类型对象
System.out.println("除数不能为0.");//异常后语句
}
}
// try{}里面嵌套try{}catch(){}
try{
int a = 10;
int b = 2;
System.out.println(a/b);
try{
int[] a1 = new int[3];
a1[3]=1;
}catch(ArrayIndexOutOfBoundsException A1){
System.out.println("异常:数组下标越界.");
}
}catch(ArithmeticException A2){
System.out.println("异常:算数异常.");
}
//一个try{}对应多个catch(){}.
try{
//算数异常
int a = 10;
int b = 2;
System.out.println(a/b);
//数组下标越界异常
int[] a1 = new int[3];
a1[3]=1;
}catch(ArithmeticException A2){
System.out.println("异常:算数异常.");
}*//*catch(ArrayIndexOutOfBoundsException A1){
System.out.println("异常:数组下标越界.");
}*//*catch(Exception e){
System.out.println("系统忙请稍后再试.");//给用户的基本提示.
System.out.println(e.getMessage());//打印简略异常信息 , 后期可用第三方日志组件向文件输出信息.
e.printStackTrace();//打印异常详细信息到控制台.
}*/
public static int finaldemo(){
try{
int a = 10;
int b = 0;
System.out.println(a/b);
return 3;
}catch(ArithmeticException A2){
System.out.println("异常:算数异常.");
return 0;
}finally{ //finally里面的语句块必须被执行.
System.out.println("aaaaaa");
return 1;//如果fianlly里面有return,程序到此结束
}
//System.out.println("bbbbbb");如果前面有return该语句会被跳过.
}
public static void main(String[] args) {
try {
test();//方法调用处
}catch (ArithmeticException a){
System.out.println("异常类型:算数异常.");
}
}
public static void test()throws ArithmeticException{
int a = 10;
int b = 0;
System.out.println(a/b);
}
public class Demo6 {
public static void main(String[] args) {
try{
int a = test(-3);
System.out.println(a);
}catch(RuntimeException r){
System.out.println(r.getMessage());
}
}
public static int test(int a){
if (a < 0){
throw new RuntimeException("传入的值有误");//在程序运行时,主动抛出异常对象,在构造方法中传入异常的原因
}else{
return a;
}
}
}
public class SanJiaoXing {
public static void main(String[] args) {
SanJiaoXing s = new SanJiaoXing();
try {
System.out.println(s.pan_duan(1.3,2.6,9.9)); //调用处
} catch (SanJiaoExp sanJiaoExp) {
sanJiaoExp.printStackTrace();
}
}
public String pan_duan(double a,double b,double c) throws SanJiaoExp {
if(a+b>c&&a+c>b&&b+c>a){
return "这些边可以构成三角形";
}else{
throw new SanJiaoExp("这些边不能构成三角形.");
}
}
}
//自定义异常(三角形)
public class SanJiaoExp extends Exception {
public SanJiaoExp(String message) {
super(message);//调用Exception的构造方法
}
}
原文链接:https://blog.csdn.net/qq_45785542/article/details/109775370
作者:天使之恋
链接:http://www.javaheidong.com/blog/article/869/56dc4fbf5e4e61226bbf/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!