欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java——異常和時(shí)間日期-創(chuàng)新互聯(lián)

異常
  • 異常體系 Throwable
    • 錯(cuò)誤Error
    • 異常Exception
      • RuntimeException 運(yùn)行時(shí)異常
        • NullPointerException 空指針異常
      • 除RuntimeException之外的 編譯時(shí)異常、檢查異常
    • throws 和 throw
      • throws
      • throw
    • try、catch、finally
      • 運(yùn)行邏輯
    • Throwable成員方法
      • getMessage()
      • toString()
      • printStackTrace()
    • 自定義異常
    • 例題
  • 時(shí)間日期
    • Date
    • SimpleDateFormat
    • LocalDate
    • LocalTime
    • LocalDateTime
    • Clock
    • Duration
    • DateTimeFormatter

創(chuàng)新互聯(lián)建站長期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為黔西南州企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都做網(wǎng)站,黔西南州網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。異常體系 Throwable 錯(cuò)誤Error

比較嚴(yán)重,依靠代碼無法處理,比如內(nèi)存溢出等。

異常Exception

異常類,程序本身可以處理的問題。異常就是程序出現(xiàn)了不正常的情況。在執(zhí)行過程中出現(xiàn)的非正常情況,最終導(dǎo)致jvm的非正常停止。

RuntimeException 運(yùn)行時(shí)異常

Java程序在運(yùn)行時(shí)出現(xiàn)的異常。

NullPointerException 空指針異常

空指針異常,又被稱為NPE。
為什么會(huì)產(chǎn)生npe?原因只有一個(gè),使用了一個(gè)null對(duì)象的方法。因此定位問題也很簡(jiǎn)單,注意用了對(duì)象.xxx的地方。
解決方式:

  1. 條件判斷是否為空
  2. try catch語句拋出異常
public static void main(String[] args) {Object object = null;
        //拋出處理異常的方式
        //前兩者是try-catch拋出異常,更推薦這一種
        //
        try {System.out.println(object.toString());
        } catch (NullPointerException e){e.printStackTrace();
            System.out.println("發(fā)生空值異常");
        }
        //
        try {System.out.println(object.toString());
        } catch (NullPointerException e){throw e;
        }
        //條件判斷是否為空
        if (object == null) {System.out.println("obje不能為空");
        } else {System.out.println(object.toString());
        }
除RuntimeException之外的 編譯時(shí)異常、檢查異常

編譯期必須處理的,否則程序不能通過編譯。如果在發(fā)生運(yùn)行時(shí)異常之前先發(fā)生了編譯時(shí)異常,那么運(yùn)行時(shí)異常不會(huì)拋出。

throws 和 throw throws

throws,拋出一個(gè)異常類,用在方法聲明之后,表示這個(gè)方法在運(yùn)行過程中可能會(huì)產(chǎn)生一個(gè)異常,但是方法內(nèi)部不知道該怎么處理,于是將這個(gè)異常拋出,讓使用該方法的人去處理,如果一直不處理那么會(huì)一直拋出交給jvm處理。可以寫很多個(gè)異常類在后面,取決于該方法可能會(huì)出現(xiàn)多少個(gè)異常。

public void show() throws NullPointerException,IllegalArgumentException,ArrayIndexOutOfBoundsException{throw new NullPointerException("空指針異常");
    }
    public void ExceptionDemo() throws NullPointerException,IllegalArgumentException,ArrayIndexOutOfBoundsException,IOException{}
throw

throw 用在方法體內(nèi),跟的是異常對(duì)象名,表示手動(dòng)拋出異常對(duì)象,由方法體內(nèi)的語句處理。

public static void main(String[] args) {try {FileWriter fileWriter = new FileWriter("x.abc");
        } catch (IOException e){throw new RuntimeException(e);
        }
    }
try、catch、finally
  1. 三者只有三種組合形式:try-catch、try-catch-finally、try-finally
  2. 使用的好處時(shí)運(yùn)行出現(xiàn)異常后將其拋出,程序繼續(xù)運(yùn)行不受影響
  3. 捕獲到異常后怎么處理,完全取決于業(yè)務(wù)邏輯要求
運(yùn)行邏輯

catch允許同時(shí)寫很多個(gè),當(dāng)try里面的代碼塊出現(xiàn)異常時(shí)會(huì)根據(jù)捕獲到的異常的類型到catch里面一個(gè)一個(gè)對(duì)應(yīng)看與哪一個(gè)catch相符合,執(zhí)行相應(yīng)的catch,而finally里面的代碼塊一般情況下表示必須要執(zhí)行的,且是最后執(zhí)行。如果有return,那么finally里面的代碼是在retur之前執(zhí)行。如果出現(xiàn)的異常在catch里面找不到,那么這個(gè)異常會(huì)被繼續(xù)往上拋,最終會(huì)拋給jvm處理,程序停止執(zhí)行。
如果太多異常不想寫那么catch,可以直接捕獲所有異常的父類Exception,但是不推薦,無法準(zhǔn)確得知出現(xiàn)的是何種異常。不過所有可能的異常被捕獲了還有一些未知異常可以使用這個(gè)方法。

public class FinallyLogic {public static void main(String[] args) {int bb = getAge();
        System.out.println(bb);
    }

    private static int a = 0;

    public static int getAge() {try {//            System.out.println("221");
            return aa();
        } catch (Exception e) {} finally {a = 1;
            System.out.println(a + "------------");
            return a;
        }
    }

    public static int aa() {a = 2;
        System.out.println(a);
        return a;
    }
}

執(zhí)行結(jié)果為:
在這里插入圖片描述

Throwable成員方法 getMessage()

返回此 throwable 的詳細(xì)消息字符串。

toString()

返回此可拋出的簡(jiǎn)短描述。

printStackTrace()

把異常的錯(cuò)誤信息輸出在控制臺(tái)。

try {inputStream = new FileInputStream("aaa");
//            inputStream.close();
//            System.exit(0);
        } catch (FileNotFoundException e) {System.out.println(e.toString() + "++++++++++++");
            System.out.println(e.getMessage()  + "-----------------");
            e.printStackTrace();
        } finally {try {if (inputStream != null){inputStream.close();
                }
            } catch (IOException e) {e.printStackTrace();
            }
        }

成員方法的輸出

自定義異常

自定義異常,可以認(rèn)為是Java給的異常滿足不了使用需求了我們自己定義的異常。
具體格式參考下面代碼,必須要繼承自另一個(gè)已有的異常類。

public class AgeoutOfBoundsException extends RuntimeException {public AgeoutOfBoundsException() {}

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

由上可見,自定義異常必須繼承自Java自帶的一個(gè)異常類,且要有無參和有參兩個(gè)構(gòu)造方法。具體如何使用詳見下面例題。

例題

在這里插入圖片描述

import java.util.Scanner;

public class StudengPrint {public static void main(String[] args) throws AgeoutOfBoundsException {Student student = new Student();
        while (true) {Scanner scanner = new Scanner(System.in);
            try {System.out.println("請(qǐng)輸入年齡:");
                student.setAge(scanner.nextInt());
            } catch (AgeoutOfBoundsException e) {System.out.println("你輸入的年齡錯(cuò)誤,請(qǐng)重新輸入");
            }
            System.out.println("請(qǐng)輸入姓名");
            student.setName(scanner.next());
            System.out.println("是否繼續(xù)輸入?y/n");
            Exit(scanner.next());
        }

    }

    public static void Exit(String choose) {if (choose.equals("y")) {} else {System.out.println("謝謝您的使用");
            System.exit(0);
        }
    }

}

class Student {private String name;
    private int age;

    public void setName(String name) {this.name = name;
    }

    public String getName() {return name;
    }

    public void setAge(int age) {if (age >= 18 && age<= 25) {this.age = age;
        } else {throw new AgeoutOfBoundsException("你輸入的年齡錯(cuò)誤,請(qǐng)重新輸入");
        }
    }

    public int getAge() {return age;
    }

    public Student() {this.name = "student";
        this.age = 18;
    }

    public Student(String name, int age) {this.name = name;
        this.age = age;
    }
}
public class AgeoutOfBoundsException extends RuntimeException {public AgeoutOfBoundsException() {}

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

運(yùn)行結(jié)果
在這里插入圖片描述
注意:能用邏輯解決的就盡量不要使用異常,不推薦將異常當(dāng)作if-else這樣的判斷來用。

時(shí)間日期

計(jì)算機(jī)中的時(shí)間原點(diǎn):1970年1月1日。

Date

時(shí)間類,現(xiàn)在不常用了,里面很多方法都已經(jīng)過時(shí)廢棄。
Date有兩個(gè)構(gòu)造方法,區(qū)別如下:
new Date();程序運(yùn)行的當(dāng)前時(shí)間
new Date(參數(shù));根據(jù)括號(hào)里面的毫秒數(shù)確定時(shí)間

public class MyDate {public static void main(String[] args) {Long start = System.currentTimeMillis();//1970年1月1日到當(dāng)前時(shí)間的毫秒
        System.out.println(start);
        Date date = new Date();//程序運(yùn)行的當(dāng)前時(shí)間
        Date date1 = new Date(start-24*60*60*1000);//根據(jù)括號(hào)里面的毫秒數(shù)確定時(shí)間
        System.out.println(date);
        System.out.println(date1);
        System.out.println(date1.toLocaleString());
    }
}

在這里插入圖片描述

SimpleDateFormat

這是對(duì)Date時(shí)間類的一個(gè)封裝,也就是時(shí)間的格式化。
其中,parse方法用來判斷時(shí)間格式是否是規(guī)定的格式。

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

public class MySimpleDateFormat {public static void main(String[] args) {Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ssss");
        //此處規(guī)定的時(shí)間格式是年-月-日 時(shí):分:秒 毫秒
        System.out.println(dateFormat.format(date));
        try {date = dateFormat.parse("2022-08-09 14:32:48 0039");//不符合規(guī)定,拋出異常,符合正常執(zhí)行
        } catch (ParseException e) {System.out.println("時(shí)間格式錯(cuò)誤,我們需要的格式是:yyyy-MM-dd HH:mm:ss ssss");
        }
    }
}
LocalDate

當(dāng)前本地的日期,只有日期沒有構(gòu)造方法,只有靜態(tài)方法創(chuàng)建對(duì)象,now()是當(dāng)前的日期。
成員方法atTime()的兩個(gè)參數(shù)表示時(shí)和分,其返回值是LocalDateTime。

import java.time.LocalDate;
import java.time.LocalDateTime;

public class MyLocalDate {public static void main(String[] args) {LocalDate localDate = LocalDate.now();
        LocalDateTime localDateTime = localDate.atTime(17, 06);
        System.out.println(localDate);
        System.out.println(localDateTime);
    }
}

在這里插入圖片描述

LocalTime

只有時(shí)間,沒有日期,與LocalDate相似,沒有構(gòu)造方法只有靜態(tài)方法初始化。其能精確到毫秒。

import java.time.LocalTime;

public class MyLocalTime {public static void main(String[] args) {LocalTime localTime = LocalTime.now();
        System.out.println(localTime);
    }
}

在這里插入圖片描述

LocalDateTime

綜合了LocalDate和LocalTime,日期時(shí)間全部都有。不過還是沒有構(gòu)造方法只有靜態(tài)方法。

import java.time.LocalDateTime;

public class MyLocalDateTime {public static void main(String[] args) {LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
    }
}

在這里插入圖片描述

Clock

時(shí)鐘對(duì)象,有構(gòu)造方法,但是是受保護(hù)的,protected方法,只能子類使用。一般將其與LocalDateTime一起用可以根據(jù)時(shí)區(qū)拿到對(duì)應(yīng)的時(shí)間。

import java.time.Clock;
import java.time.LocalDateTime;

public class MyClock {public static void main(String[] args) {Clock clock = Clock.systemUTC();
        //Clock.systemUTC() 獲取UTC時(shí)間當(dāng)前時(shí)刻的時(shí)鐘
        System.out.println(clock);
        LocalDateTime localDateTime = LocalDateTime.now(clock);
        System.out.println(clock.instant());
        //返回由時(shí)鐘定義的當(dāng)前的瞬時(shí)點(diǎn)
        System.out.println(localDateTime);
    }
}

在這里插入圖片描述
systemUTC()是Clock的一個(gè)方法,用于獲取UTC時(shí)間當(dāng)前時(shí)刻的時(shí)鐘。所以此處輸出的結(jié)果不是本地東八區(qū)的時(shí)間,要獲取到本地時(shí)區(qū)的,那么與systemDefaultZone()有關(guān),該方法使用默認(rèn)時(shí)區(qū)返回當(dāng)前時(shí)刻,所以返回的就是本地的時(shí)鐘。如下使用即可獲取本地時(shí)間。

public static void main(String[] args) {Clock clock = Clock.systemDefaultZone();
        System.out.println(clock);
        LocalDateTime localDateTime = LocalDateTime.now(clock);
        System.out.println(clock.instant());
        System.out.println(localDateTime);
    }

返回結(jié)果如下,可見已經(jīng)是本地的時(shí)間了。
本地時(shí)間也是8點(diǎn)53
第一排結(jié)果是當(dāng)前Clock使用的時(shí)區(qū),第二排是UTC時(shí)間,第三排是本地時(shí)間

Duration

Duration可以用來比較兩個(gè)時(shí)間之間的差(可以得到天、小時(shí)、分、秒等),包括了獲取差值的天數(shù)、小時(shí)數(shù)、分鐘、毫秒等多個(gè)方法。同樣,沒有構(gòu)造方法有靜態(tài)方法,此處使用between(初始時(shí)間,與初始時(shí)間對(duì)比的時(shí)間)。其意義是獲取兩個(gè)時(shí)間的差值,再使用其他方法返回具體的天數(shù)等。

public class MyDuration {public static void main(String[] args) {LocalDateTime today = LocalDateTime.now();
        System.out.println(today);
        LocalDateTime startDate = LocalDateTime.of(2000,1,1,8,0,0);
        //設(shè)置起始時(shí)間為2000年1月1日8點(diǎn)0分0秒
        System.out.println(startDate);

        // 現(xiàn)在時(shí)間減去起始時(shí)間
        Duration duration = Duration.between(startDate,today);
        // 兩個(gè)時(shí)間差的天數(shù)
        System.out.println(duration.toDays() + "天");
        // 兩個(gè)時(shí)間差的小時(shí)數(shù)
        System.out.println(duration.toHours() + "小時(shí)");
        // 兩個(gè)時(shí)間差的分鐘數(shù)
        System.out.println(duration.toMinutes() + "分鐘");
        // 兩個(gè)時(shí)間差的秒數(shù)
        System.out.println(duration.getSeconds() + "秒");
        // 兩個(gè)時(shí)間差的毫秒數(shù)
        System.out.println(duration.toMillis() + "毫秒");
        // 兩個(gè)時(shí)間差的納秒數(shù)
        System.out.println(duration.toNanos() + "納秒");
        // 下面這個(gè)方法是計(jì)算秒與納秒,最后返回秒,其他of開頭的與之相似,可以是負(fù)數(shù)
        System.out.println(Duration.ofSeconds(3, -3601));
        // 下面這個(gè)方法是以指定的秒數(shù)返回此持續(xù)時(shí)間的副本,也就是通過傳入秒數(shù)來構(gòu)造一個(gè)Duration副本,返回值是這個(gè)副本的持續(xù)時(shí)間加上這個(gè)指定的秒數(shù),其他with開頭的與之相似
        System.out.println(duration.withSeconds(3));
    }
}

在這里插入圖片描述

DateTimeFormatter

和SimpleDateFormat差不多,也是對(duì)時(shí)間的一個(gè)格式化包裝,主要用在Local一系。
parse(CharSequence text, DateTimeFormatter formatter),使用特定的格式化 LocalDateTime從文本字符串獲取 LocalDateTime的實(shí)例。
format(DateTimeFormatter formatter),使用指定的格式化程序格式化此日期時(shí)間。

public static void main(String[] args) {String dateTimeStr= "2022-12-14 11:11:11";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime localDateTime=LocalDateTime.parse(dateTimeStr,formatter);
        System.out.println(localDateTime);
        String format = localDateTime.format(formatter);
        System.out.println(format);
    }

在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

當(dāng)前名稱:Java——異常和時(shí)間日期-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article44/dccgee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作自適應(yīng)網(wǎng)站動(dòng)態(tài)網(wǎng)站網(wǎng)站導(dǎo)航網(wǎng)站排名網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)