JAVA零学习之基础归纳(十二)--常用API的补充及异常

常用API的补充

1、 时间类

1.1 概述:
  • Date类代表了一个特定的时间,以毫秒的精度。
1.2 导包:
  • 在 java.util.Date java.sql.Date 和 java.lang.Object java.util.Date下都有Date类的包
  • 我们则导入的是:第二个 也就是 java.lang.Object java.util.Date 中的Date
1.3 格式:
  • public Date() 说明:分配一个Date对象,并初始化,以便代表它被代表分配的时间,精确到毫秒

  • public Date(long date) 说明:分配一个Date对象,并将其初始化为代表从标准时间起指定的毫秒数

  • Date 对象名 = new Date();

1.4 常用方法

在这里插入图片描述

注:其它方法可在API文档中查看

1.5 示例:
package com.bdit.test;

import java.util.Date;
public class Test01 {
    public static void main(String[] args) {
        Date da01 = new Date();
        System.out.println(da01);
        System.out.println("年:"+da01.getYear());
        System.out.println("月:"+da01.getMonth());
        System.out.println("日:"+da01.getDay());
        System.out.println("时:"+da01.getHours());
        System.out.println("分:"+da01.getMinutes());
        System.out.println("秒:"+da01.getSeconds());

        Date da02 = new Date(1234567L);
        System.out.println(da02);

        Date da03 = new Date();
        da03.setTime(1234567L);
        System.out.println("对象da03:"+da03);
        System.out.println(da03.getDay());
        System.out.println(da03.getDate());

    }
}
注:划横线的代表已过时的,但也可以用

2、SimpleDateFormat类

2.1 概述:
  • SimpleDateFormat 是一个具体的类,用于以区域设置敏感的方式格式化和解析日期。 它允许格式化(日期文本),解析(文本日期)和规范化。
2.2 格式:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
  • 格式化:
    • public final String format(Date date):将日期格式化成日期/时间字符串
  • 解析
    • public Date parse(String source):从给定字符串的开始解析文本以生成日期
2.3 常用方法:

在这里插入图片描述

2.4 示例:
package com.bdit.test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test02 {
    public static void main(String[] args) throws ParseException {
        Date da01 = new Date();
        System.out.println(da01);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
        System.out.println(simpleDateFormat);

        SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
      //  System.out.println(simpleDateFormat01.format(da01));
        String str01 = simpleDateFormat01.format(da01);
        System.out.println(str01);

        SimpleDateFormat simpleDateFormat02 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        Date date01 = simpleDateFormat02.parse("2020/09/07 15:42:18");
        System.out.println(date01);

    }
}

3、 Calendar 类

3.1 概述:
  • Canlendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法
3.2 格式:

Calendar 是一个抽象类,所以不能new,但是 其自带一个子类:GregorianCalenda

Calendar calendar01 = new GregorianCalendar();

Calendar calendar02 = Calendar.getInstance();

3.3 示例:

package com.bdit.test;

import java.util.Calendar;
import java.util.GregorianCalendar;

public class Test04 {
    public static void main(String[] args) {
        Calendar calendar01 = new GregorianCalendar();

        Calendar calendar02 = Calendar.getInstance();

        System.out.println(calendar02.get(Calendar.YEAR));//输出当前年份
        System.out.println(calendar02.get(Calendar.MONTH));//输出当前月份
        System.out.println(calendar02.get(Calendar.DATE));//输出当前天份
        System.out.println(calendar02.get(Calendar.HOUR));//输出当前小时
        System.out.println(calendar02.get(Calendar.MINUTE));//输出当前分钟
        System.out.println(calendar02.get(Calendar.SECOND));//输出当前秒


        calendar02.add(Calendar.YEAR,-2);//add,-2得出2018
        System.out.println(calendar02.get(Calendar.YEAR)+"====");

        calendar02.set(Calendar.YEAR,3030);//set直接将值赋予给当前年份
        System.out.println(Calendar.YEAR);
    }
}
3.3 案例:
  • 实现任意一年的二月有多少天
public class CalendarTest {
	public static void main(String[] args) {
    //键盘录入任意的年份
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入年:");
    int year = sc.nextInt();

     //设置日历对象的年、月、日
     Calendar c = Calendar.getInstance();
     c.set(year, 2, 1);

      //3月1日往前推一天,就是2月的最后一天
      c.add(Calendar.DATE, -1);

        //获取这一天输出即可
        int date = c.get(Calendar.DATE);
        System.out.println(year + "年的2月份有" + date + "天");
   }
}

4、 异常

4.1 概述:
  • 在运行程序时出现了不正常的情况
4.2 体系结构:

在这里插入图片描述

Error:严重问题,不需要处理

Exception:异常类,表示程序本身可以处理的问题

  • RuntimeException:在编译期时不检查的,出问题后,在改正代码
  • 非RuntimeException:编译器就会提示问题,进行处理,否则程序不通过编译
4.3 JVM 默认处理异常的方式

如果程序出现了问题,我们没有做任何处理

最终JVM 会做默认的处理,处理方式有如下两个步骤:

  • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台
  • 程序停止执行
4.4 try-catch 方式处理异常
  • 格式:

    try { 可能出现异常的代码; } catch(异常类名 变量名) { 异常的处理代码; }

  • 执行流程

    程序从try进入,出现异常跳转到相应的catch里面去,执行完毕后,程序还可以继续往下执行

4.5 示例:
package com.bdit.test;

public class Test07 {
    public static void main(String[] args) {
        try{
            int a =10;
            System.out.println(a/0);
            System.out.println("出现异常后,利用try解决后,会直接运行catch后的代码,不会再返回try里的代码");
        }catch (ArithmeticException ae){
            System.out.println("catch中的输出");
        }
        System.out.println("结束后的");
        
        try{
            int[] a = new int[5];
            for (int i = 0; i < 10; i++) {
                System.out.println(a[i]);
            }
        }catch (ArrayIndexOutOfBoundsException aiob){
            System.out.println("下标越界");
        }

    }
}
4.6 Theowable成员方法
  • 常用方法
方法名说明
public String getMessage()返回此 throwable 的详细消息字符串
public String toString()返回此可抛出的简短描述
public void printStackTrace()把异常的错误信息输出在控制台
4.7示例:
package com.bdit.test;
public class Test08 {
    public static void main(String[] args) {
        try{
            int a =1;
            System.out.println(a / 0);
        }catch (ArithmeticException ae){
 /*           System.out.println(ae.getMessage());
            System.out.println(ae.toString());*/
            ae.printStackTrace();
        }
        System.out.println("==================结束===============");
    }
}
4.8 编译时区别和运行时区别
  • 编译时异常:
    • 都是Exception类及其子类
    • 必须显示处理,否则程序就会发生错误,无法通过编译
  • 运行时异常:
    • 都是RuntimeException及其子类
    • 无需显示处理,也可以和编译时异常一样处理
4.9 throws 方式处理异常
  • 定义格式:
    • public void 方法名() throws 异常类名{ }
4.10 示例
package com.bdit.test;

import java.text.ParseException;

public class Test09 {
    public static void main(String[] args) {
        Test09 test09 =new Test09();
        try{
            test09.yc(0);
        }catch (ArithmeticException ae){
            ae.printStackTrace();
        }catch (Exception ex){
            System.out.println("最后一个catch");
        }
        try{
            test09.ycc();
        }catch(ParseException pe){
            pe.printStackTrace();
        }

    }

    public void yc(int n) throws ArithmeticException{
        System.out.println(10/n);
    }

    public void ycc()throws ParseException {
        System.out.println("===============");
    }

}
4.11 throw 处理异常
  • 给自己产生一个异常,在方法体内

  • 格式:

  • throw new 异常类名(语句)

4.12 示例:
package com.bdit.test;

import java.text.ParseException;

//异常
//throw 自己产生一个异常
public class Test10 {
    public static void main(String[] args) {
        Test10 test10 = new Test10();
        test10.yc(0);
       try{
           test10.yc(0);
       }catch (ArithmeticException a){
           System.out.println("aaaaaaaaaaaa");
       }

        try{//编译时抛出需要解决异常
            test10.ycc(0);
        }catch (ParseException pe){
            pe.printStackTrace();
            System.out.println("==================");
        }
        System.out.println("===========------------");

    }

    public void yc(int n){
        if(n==0){
            throw new ArithmeticException("除数为0");//运行时异常
        }
        System.out.println("yunxing");

    }

    public void ycc(int n) throws ParseException{
        if (n==0){
            throw new ParseException("编译时异常",1);//编译时异常需要抛出
        }
        System.out.println("----------------");
    }
}
4.13 throws 和throw的区别
  • throws
    • 用在方法声明的后面,跟的是异常类名
    • 表示抛出异常,由该方法的调用者来处理
    • 表示出现异常的一种可能性,并不一定会发生这些异常
  • throw
    • 用在方法体内,跟的是异常的对象名
    • 表示抛出异常,由方法体内的语句处理
    • 执行throw 一定抛出了某种异常
4.15 finally
  • 无论如何,finally里的一定执行
package com.bdit.test;

public class Test11 {
    public static void main(String[] args) {
        try{
            System.out.println(10/0);
        }catch (ArithmeticException ae){
            System.out.println("try  catch");
        }finally {
            System.out.println("finally");
        }
        int a=10;
        if(a%2==0){
            System.out.println("aaa");
            try{}

            finally{
                System.out.println("-------------------------------------");
            }

        }else{
            System.out.println("sout");
        }

    }
}
4.16 应用:自定义类
package com.bdit.test;

import java.util.Scanner;
//自己创建一个异常类,并且使用
public class Test12 {
    public static void main(String[] args) throws Fractional {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入成绩:");
        double score = sc.nextInt();
        try{
            Score.judging(score);
        }catch (Fractional fc){
            fc.printStackTrace();
        }

        System.out.println("输入年龄:");
        int age = sc.nextInt();
        Score.judgingg(age);

    }

}
//定义一个判断类,如果异常使用异常类中的异常
class Score{
    public static void judging(double score) throws Fractional{
        if(score>=0 && score<=120){
            System.out.println("输入正确");
        }else{
            throw new Fractional("输入成绩错误,正确成绩范围在:0-120之间");
        }
    }
    public static void judgingg(int age) throws Fractional{
        if(age>=1 && age<=100){
            System.out.println("输入正确");
        }else{
            throw new Fractional("输入年龄错误,正确成绩范围在:1-100之间");
        }
    }
}
//定义一个异常类
class Fractional extends Exception{
    public Fractional() {
    }

    public Fractional(String message) {
        super(message);
    }

    public Fractional(String message, Throwable cause) {
        super(message, cause);
    }

    public Fractional(Throwable cause) {
        super(cause);
    }

    public Fractional(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
on{
    public Fractional() {
    }

    public Fractional(String message) {
        super(message);
    }

    public Fractional(String message, Throwable cause) {
        super(message, cause);
    }

    public Fractional(Throwable cause) {
        super(cause);
    }

    public Fractional(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值