6 java第六章练习---异常

一、SimpleDateFormat练习 String<–>Date转换

String -->Date转换 parse()

String< --Date转换 format()

1、制作一个工具类:DateUtil,进行日期和字符串之间的格式转换.

定义两个方法:
一个用于将字符串日期转为Date类型,并返回该Date类型
一个用于将Date类型转为指定格式的字符串形式,并返回该字符串

package com.ffyc.exceptionpractice;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class DateUtil {
    /*
    制作一个工具类:DateUtil,进行日期和字符串之间的格式转换.

      定义两个方法:
    一个用于将字符串日期转为Date类型,并返回该Date类型
    一个用于将Date类型转为指定格式的字符串形式,并返回该字符串
     */
    public static void main(String[] args) {

        System.out.println(StransD());
        System.out.println(DtransS());

    }

    //String --> Date           sdf.prase()
    public static Date StransD(){
        //将字符串日期转为Date类型,并返回该Date类型
        Scanner scanner = new Scanner(System.in);
        System.out.println("请按照此格式输入:yyyy-MM-dd:");
        String str = scanner.nextLine();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date= new Date();
        try {
            date = simpleDateFormat.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
    //Date --> String           sdf.format()
    public static String DtransS(){
        //将Date类型转为指定格式的字符串形式,并返回该字符串
        Date date2=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd E a HH-mm-ss");
        //String str=date.format(date2);
        return sdf.format(date2);
    }

}

二、Calender 日历 练习 GregorianCalender公历

2、输入你的生日(年月日),计算你来到这个世界多少天了?

package com.ffyc.exceptionpractice;

import sun.util.resources.CalendarData;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;

public class Demo1 {
    /*
     输入你的生日(年月日),计算你来到这个世界多少天了?
     */
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("请按此格式 yyyy-MM-dd 输入你的生日:");
        String str = scanner.nextLine();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date1 = simpleDateFormat.parse(str);

            //获取出生时的毫秒值
            long oldTime = date1.getTime();
            //获取今天的毫秒值
            Date date2 = new Date();
            long newTime = date2.getTime();
            //计算距离今天多少天
            long time = newTime - oldTime;

            //换算
            long day = time/1000/60/60/24;
            System.out.println("今天是你来到这个世界的第:"+day+"天");
        } catch (ParseException e) {
            e.printStackTrace();
        }


        //输出
    }

}

三、概述题

1、罗列出学习到目前为止,都接触过了哪些异常类型,分别在什么情况下会出现

  • Error

    • 堆溢出 (new 对象) OutOfMemoryError:内存溢出
    • 栈溢出 (方法) StackOverflowError:堆栈溢出
  • Exception

    • Arithmeticexception:算术异常 (10/0)
    • ArrayIndexOutOfBoundsException :数组下标越界异常
    • ClassCastException: 类转换异常
    • NullPointerException:空指针异常
    • NumberFormatException:数字格式化异常
    • UnsupportedEncodingException :不支持的编码异常(编译期异常)
    • ParseException:解析异常(编译期异常)

2、throws和throw区别

  • throw: 在程序中主动抛出异常对象,表示此方法出现了某种异常
  • throws:声明异常,表示此方法不处理异常,而是交给方法调用处进行处理

3、final 和 finally{ }区别

  • fianl:修饰 类、 属性、方法

    • 修饰类: 类不能被继承 final类中的所有成员方法会被隐式地定义为final方法

    • 修饰属性:static final 表示常量,赋值一次后不能改变,

      ​ 两种初始化方式:①变量声明时初始化

      ​ ②变量声明时不赋初始值,在构造方法中赋初值。

    • 修饰方法:方法能被重写

  • finally:异常处理中的一部分, try-catch-finally ,finally {}语句块中的代码是最终一定被执行的部分

4、自定义异常练习 throw

定义三个整数变量a,b,c 判断能否构成一个三角形,如果不能请抛出一个自定义异常

package com.ffyc.exceptionpractice;

import java.util.Scanner;

public class Demo2 {
    /*
    定义三个整数变量a,b,c 判断能否构成一个三角形,
    如果不能请抛出一个自定义异常
     */
    public static void main(String[] args) {
        System.out.println("输入三个整数,判断是否构成三角形:");
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        int c = scanner.nextInt();
        try {
            isTriangle(a, b, c);
        } catch (TriangleException e) {
            e.printStackTrace();
        }
    }

    //判断三角形
    public static void isTriangle (int a,int b,int c) throws TriangleException {
        //两边之和>第三边 两边之差<第三边
        if(a>0 && b>0 && c>0) {
            if (((a + b) > c && (a - b) < c) && ((a + c) > b && (a - c) < b) && ((b + c) > a && (b - c) < a)) {
                System.out.println("是三角形");
            } else {
                System.out.println("不是三角形");
            }
        }else{
            throw new TriangleException("两边之和必须>第三边,两边之差必须<第三边,否则不能构成三角形");//自定义异常类
        }
        throw new TriangleException("输入的三边必须大于0");
    }
}
//自定义异常类
public class TriangleException extends Throwable {

    public TriangleException() {
    }
    public TriangleException(String message) {
        super(message);
    }
}
运行结果:
输入三个整数,判断是否构成三角形:
 0 1 3
com.ffyc.exceptionpractice.TriangleException: 两边之和必须>第三边,两边之差必须<第三边,否则不能构成三角形
	at com.ffyc.exceptionpractice.Demo2.isTriangle(Demo2.java:33)
	at com.ffyc.exceptionpractice.Demo2.main(Demo2.java:17)

三、try-catch-finally执行顺序

RuntimeException

1、看程序输出结果

public static void main(String[] args) {
try {
int i=100/0;
System.out.println(i);
}catch(Exception e){
System.out.println(1);
throw new RuntimeException();
}finally{
System.out.println(2);
}
System.out.println(3);
}

  1
  2
Exception in thread "main" java.lang.RuntimeException
	at com.ffyc.exceptionpractice.Demo3.main(Demo3.java:10)

throw new Exception

2、写出程序结果

class Demo{
public static void main(String[] args){
try{
showExce();
System.out.println(“A”);
}catch(Exception e){
System.out.println(“B”);
}finally{
System.out.println(“C”);
}
System.out.println(“D”);
}
public static void showExce()throws Exception{
throw new Exception();
}
}

B
C
D
java.lang.Exception
	at com.ffyc.exceptionpractice.Demo4.showExce(Demo4.java:17)
	at com.ffyc.exceptionpractice.Demo4.main(Demo4.java:6)

catch中小异常放到大异常前面

3、写出程序结果

class Exc0 extends Exception{}
class Exc1 extends Exc0{}
class Demo{
public static void main(String[] args){
try{
throw new Exc1();
}catch(Exception e){
System.out.println(“Exception”);
}catch(Exc0 e){
System.out.println(“Exc0”); // 小异常放到大异常前面
}
}
}

try{
            throw new Exc1();
        } catch(Exc0 e){
            System.out.println("Exc0");  
            e.printStackTrace();
        } catch(Exception e){
            System.out.println("Exception");
            e.printStackTrace();
        }
Exc0

output

4、写出程序结果

class Test{
public static String output=“1”;
public static void foo(int i){
try{
if(1==i)
throw new Exception();
output+=“1”;
}catch(Exception e){
output+=“2”;
} finally{
output+=“3”;
}
output+=“4”;
}
public static void main(String args[]){
foo(0);
System.out.println(output); //哪里有output就输出
foo(1);
System.out.println(output);
}
}

1134
1134234

try-catch-finally执行顺序

5、写出程序结果

public class ReturnExceptionDemo {
static void methodA() {
try {
System.out.println(“进入方法A”);
throw new RuntimeException(“制造异常”);
} finally {
System.out.println(“用A方法的finally”);
}
}

static int methodB() {
	try {
		System.out.println("进入方法B");
		 throw new Exception();
		//return 1;  //报错 无法访问的语句
	} catch (Exception e) {
		return 3;
	} finally {
		System.out.println("调用B方法的finally");
	}
}

public static void main(String[] args) {
	try {
		methodA();
	} catch (Exception e) {
		System.out.println(e.getMessage());
	}
	int i = methodB();
	System.out.println(i);
}

}

进入方法A
用A方法的finally
制造异常
进入方法B
调用B方法的finally
3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宋大米Pro

感谢小主大赏,留言可进互助群~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值