异常:
1.异常并非错误
2.异常关键词:try、catch、finally、throw、throws
3.try的代码块中放可能会出异常的代码,catch中放置出现异常后如何处理的代码,finally中放置一定需要执行的代码。
4.程序如果出现异常则必须捕获异常后才能继续执行,否则会报错而终止。
5.catch可以多重包裹,因为有些异常会无法被catch1捕获,但我们可以用catch2...catchN来捕获,Exception可以捕获所有异常。
6.一个异常被捕获一次后,不会再次被捕获
7.try-catch可以多层嵌套,如果内部的try出现异常但内部catch无法捕获当前异常,则不会继续执行内部的代码,异常会在外层进行捕获,捕获后不会再执行内部包裹的代码(finally包裹除外)。
8.throw引发异常,throws抛出异常
9.程序运行时遭遇意料之外的情况就是异常
10.异常可以自行定义,定义后可以用 throw new 异常类的名称 这个语式进行使用
11.throws只能向上抛出,如果在main方法中没有进行异常处理继续抛出,最后的异常会到JVM(Java虚拟机)中进行处理

今天学习的是异常与异常处理,没什么好说的,直接上几个题目的源码(本人懒)。

1.计算圆的面积,半径不能为零和负数
 

package demo01;

import java.util.Scanner;

public class Circle {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("输入圆的半径计算这个圆的面积:");double r=sc.nextDouble();
        if (r == 0||r<0) {
            try {
                throw new MyExecption("这里TM不能输入0跟负数!");
            } catch (MyExecption myExecption) {
                myExecption.printStackTrace();
            }
        }else {
            System.out.println("这个圆的面积为:"+r*r*Math.PI);
        }

    }
}

2.求平均数,参数不能为负数

package demo02;

import demo01.MyExecption;

import java.util.Scanner;

public class Mean {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("输入两个值:");
        double num=sc.nextDouble();
        double num2=sc.nextDouble();
        if (num<0||num<0) {
            try {
                throw new demo01.MyExecption("这里TM不能输入负数!");
            } catch (MyExecption myExecption) {
                myExecption.printStackTrace();
            }
        }else {
            System.out.println("这两个数的平均值为:"+((num+num2)/2));
        }

    }
}


3.检测年龄不能为负数和大于200岁
 

package demo03;

import demo01.MyExecption;

import java.util.Scanner;

public class Age {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("输入两个年龄:");
        double num=sc.nextDouble();
        double num2=sc.nextDouble();
        if (num<0||num<0) {
            try {
                throw new demo01.MyExecption("这里TM不能输入负数!");
            } catch (MyExecption myExecption) {
                myExecption.printStackTrace();
            }
        }else {
            if (num+num2>200){
                try {
                    throw new demo03.MyExecption("年龄加起来不能超过200岁!!!");
                } catch (demo03.MyExecption myExecption) {
                    myExecption.printStackTrace();
                }
            }
            System.out.println("年龄加起来为:"+(num+num2));
        }

    }
}

4.从命令行得到5个整数,放入一整型数组,然后打印输出,要求:如果输入数据pi为整数,要捕获Integer.parseInt()产生的异常,显示“请输入整数”,捕获输入参数pi足5个的异常(数组越界)。显示"请输入至少5个整数"
 

package demo04;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int[] nums=new int[5];
        for (int i = 0; i < nums.length; i++) {
            try {
            System.out.println("请输入整数类型:(输入0结束)");String num=sc.next();
            nums[i]=Integer.parseInt(num);
            if (num.equals("0")||num.equals("0")) break;
            }catch (NumberFormatException e){
                System.out.println("请输入整数!");
            }finally {
            }
        }
        for (int i = 0; i <nums.length ; i++) {
            if (nums[i]==0){
                throw new MyExecption("数组越界");
            };
        }
    }
}

5.写一个方法void sanjiao(int a,int b,int c),判断三个参数是否能构成一个三角形,如果pi能则抛出异常IllegalArgumentException,显示异常信息a,b,c+"pi能构成三角形,如果可以构成则显示三角形三个边长,在主方法中得到命令行输入的三个整数。调用此方法,并捕获异常。
 

package demo05;

public class Triangle {
    public static void main(String[] args) {
        System.out.println(  sanjiao(7,5,3));
    }
    static String sanjiao(int a,int b,int c){
        String msg="这三个值无法构成三角形";
        int[] nums={a,b,c};
        int max=0;
        int num=0;
        for (int i = 0; i <nums.length ; i++) {
            max=Math.max(max,nums[i]);
        }
        for (int i = 0; i <nums.length ; i++) {
            if (nums[i]<max) {
                num+=nums[i];
            }
        }
        if (num>max) msg="这三个值,可以构成三角形,三个边为:"+a+"、"+b+"、"+c+"最长的边为:"+max;
        return msg;
    }
}

6.自定义方法sanj,其中有成员x,y,z作为三边长,构造方法sanj(a,b,c)分别给x,y,z赋值,方法求面积getarea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边能构成一个三角形时要抛出自定义异常notsanjiaowxception,否则显示正确信息。在另外一个类中的方法中构造一个sanj对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。
 

package demo06;

import demo04.MyExecption;

public class Sanj {
    double x;
    double y;
    double z;

    public Sanj(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;

    }
    double getArea(){
        System.out.println(p());
        return Math.sqrt(p()*(p()-x)*(p()-y)*(p()-z));
    }
    double p(){
        return (x+y+z)/2;
    }
    String showInfo(){
        if (tf()==false) throw new MyExecption("符合要求!报错!");
        return "面积为:"+getArea();
    }

    boolean tf(){
        boolean pd=false;
        double[] nums={x,y,z};
        double max=0;
        double num=0;
        for (int i = 0; i <nums.length ; i++) {
            max=Math.max(max,nums[i]);
        }
        for (int i = 0; i <nums.length ; i++) {
            if (nums[i]<max) num+=nums[i];
        }
        if (num>max) pd=true;
        return  pd;
    }
}
package demo06;

public class Test {
    public static void main(String[] args) {
        Sanj sj=new Sanj(7,3,5);
        System.out.println(sj.showInfo());
    }
}

这些题只是一些逻辑题要求掺杂一些异常的处理方式,所以没什么好说的。

今天的题比昨天少好多啊,果然还是跟讲的内容有关系,讲的越重要,题就越多。到后面的题我都不敢想。。。干脆摆烂吧。