常用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);
}
}