<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java常用類(lèi),7000+字一次性幫你總結(jié)好啦!

          共 18050字,需瀏覽 37分鐘

           ·

          2022-05-19 21:02

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)??

          來(lái)源:cnblogs.com/lwtyyds/p/15678152.html

          • 常用類(lèi)概述
          • 內(nèi)部類(lèi)
            • 內(nèi)部類(lèi)的分類(lèi):
            • 1.成員內(nèi)部類(lèi)(非靜態(tài)內(nèi)部類(lèi))
            • 2.局部?jī)?nèi)部類(lèi)
            • 4.匿名內(nèi)部類(lèi)
          • Object類(lèi)
            • Object類(lèi)常用方法:
            • 1.equals方法
            • 2.hashCode方法
            • 3.toString方法
            • 4.finzlize方法
          • 包裝類(lèi)
            • 「1.基本數(shù)據(jù)類(lèi)型以及對(duì)應(yīng)的包裝類(lèi):」
            • 「2.包裝類(lèi)的意義:」
            • 3.包裝類(lèi)常用方法:
          • 數(shù)學(xué)類(lèi)
          • 時(shí)間類(lèi)
            • Java常用時(shí)間類(lèi):
            • 1.Date 日期
            • 2.Calendar 日歷
            • 3.SimpleDateFormat格式化時(shí)間
            • 4.計(jì)算時(shí)間差
          • String類(lèi)
            • 字符串類(lèi)常用方法
          • String Builder和StringBuffer
          • DecimalFormat
          • 總結(jié)

          常用類(lèi)概述

          1. 內(nèi)部類(lèi)
          2. Object類(lèi)
          3. 包裝類(lèi)
          4. 數(shù)學(xué)類(lèi)
          5. 時(shí)間類(lèi)
          6. 字符串
          7. String Builder和StringBuffer
          8. DecimalFormat

          內(nèi)部類(lèi)

          「概念」 :在一個(gè)類(lèi)內(nèi)部再定義一個(gè)完整的類(lèi)。

          一般情況下類(lèi)與類(lèi)之間是相互獨(dú)立的,內(nèi)部類(lèi)的意思就是打破這種獨(dú)立思想,讓一個(gè)類(lèi)成為另一個(gè)類(lèi)的內(nèi)部信息,和成員變量、成員方法同等級(jí)別。

          「內(nèi)部類(lèi)的好處:」

          把一個(gè)類(lèi)寫(xiě)在外面和寫(xiě)在里面最終達(dá)到的結(jié)果都一樣,那我們?yōu)槭裁催€要使用內(nèi)部類(lèi),豈不是多此一舉嗎?

          「采用內(nèi)部類(lèi)這種技術(shù),可以隱藏細(xì)節(jié)和內(nèi)部結(jié)構(gòu),封裝性更好,讓程序的結(jié)構(gòu)更加合理!如果類(lèi)很多且都暴露在外面,那么類(lèi)與類(lèi)之間的調(diào)用就會(huì)十分繁瑣!」

          內(nèi)部類(lèi)的分類(lèi):

          1.成員內(nèi)部類(lèi)(非靜態(tài)內(nèi)部類(lèi))

          參考代碼如下:

          package?NeiBuLei;
          public?class?OuterClass?{
          ????//成員變量
          ????private?String?OuterName;
          ????//成員方法
          ????public?void?display(){
          ????????System.out.println("這是外部類(lèi)方法!");
          ????????System.out.println(OuterName);
          ????}
          ????//內(nèi)部類(lèi)
          ????public?class?InnerClass{
          ????????//成員變量
          ????????private?String?InnerNme;
          ????????//構(gòu)造方法
          ????????public?InnerClass()?{
          ????????????InnerNme?=?"Inner?Class";
          ????????}
          ????????//成員方法
          ????????public?void?display(){
          ????????????System.out.println("這是內(nèi)部類(lèi)方法!");
          ????????????System.out.println(InnerNme);
          ????????}
          ????}
          ????//?主方法
          ????public?static?void?main(String[]?args)?{
          ????????OuterClass?outerClass?=?new?OuterClass();
          ??????? outerClass.display();//這是外部類(lèi)方法!null

          ????????//?這個(gè)類(lèi)是內(nèi)部類(lèi),已經(jīng)不是獨(dú)立的類(lèi)了,因此不能像外部類(lèi)一樣直接創(chuàng)建!
          ????????//InnerClass?innerClass?=?new?InnerClass();?行不通
          ????????OuterClass.InnerClass?innerClass?=?outerClass.new?InnerClass();//?同成員方法/變量?只是加了個(gè)前綴
          ??????? innerClass.display();//?這是內(nèi)部類(lèi)方法!
          ????}
          }

          輸出結(jié)果:

          這是外部類(lèi)方法!null 這是內(nèi)部類(lèi)方法!Inner Class

          「總結(jié):成員內(nèi)部類(lèi)(非靜態(tài)內(nèi)部類(lèi))的使用就是將內(nèi)部類(lèi)作為外部類(lèi)的的一個(gè)成員變量/成員方法來(lái)使用,所以必須依賴(lài)于外部類(lèi)的對(duì)象才能調(diào)用,用法和成員變量/成員方法一致!」

          2.局部?jī)?nèi)部類(lèi)

          局部?jī)?nèi)部類(lèi):基本的內(nèi)部類(lèi)還可以在一個(gè)方法體中定義。

          package?NeiBuLei;
          public?class?OuterClass?{
          ????//成員變量
          ????private?String?OuterName;
          ????//成員方法
          ????public?void?display(){
          ????????class?InnerClass?{
          ????????????public?void?print(){
          ????????????????System.out.println("這是一個(gè)局部?jī)?nèi)部類(lèi)方法!");
          ????????????}
          ????????}
          ????????InnerClass?innerClass?=?new?InnerClass();
          ????????innerClass.print();
          ????}

          ????//?主方法
          ????public?static?void?main(String[]?args)?{
          ????????OuterClass?outerClass?=?new?OuterClass();
          ????????outerClass.display();
          ????}
          }
          1. 靜態(tài)內(nèi)部類(lèi)

          靜態(tài)內(nèi)部類(lèi)的構(gòu)造不需要依賴(lài)于外部類(lèi)對(duì)象,類(lèi)中的靜態(tài)組件都不需要依賴(lài)于任何對(duì)象,可以直接通過(guò)「類(lèi)本身」 進(jìn)行構(gòu)造。

          package?NeiBuLei;
          public?class?OuterClass?{
          ????//成員變量
          ????private?String?OuterName;
          ????//成員方法
          ????public?void?display(){
          ????????System.out.println("這是外部類(lèi)方法!");
          ????????System.out.println(OuterName);
          ????}
          ????//靜態(tài)內(nèi)部類(lèi)
          ????public?static?class?InnerClass{
          ????????private?String?InnerName;
          ????????public?InnerClass()?{
          ????????????InnerName?=?"Inner?Class";
          ????????}

          ????????//成員方法
          ????????public?void?display(){
          ????????????System.out.println("這是靜態(tài)內(nèi)部類(lèi)方法!");
          ????????????System.out.println(InnerName);
          ????????}
          ????}

          ????//?主方法
          ????public?static?void?main(String[]?args)?{
          ????????OuterClass?outerClass?=?new?OuterClass();
          ????????outerClass.display();
          ????????//?靜態(tài)內(nèi)部類(lèi)的構(gòu)造不依賴(lài)與外部類(lèi),可以直接通過(guò)類(lèi)本身進(jìn)行構(gòu)造!
          ????????InnerClass?innerClass?=?new?InnerClass();
          ????????innerClass.display();
          ????}
          }

          輸出結(jié)果:

          這是外部類(lèi)方法!null 這是靜態(tài)內(nèi)部類(lèi)方法!Inner Class

          4.匿名內(nèi)部類(lèi)

          匿名內(nèi)部類(lèi):沒(méi)有名字的內(nèi)部類(lèi)。

          匿名內(nèi)部類(lèi)「主要應(yīng)用與接口的實(shí)現(xiàn)!」

          接口:

          package?NeiBuLei;
          public?interface?MyInterface?{
          ????public?void?test();
          }

          實(shí)現(xiàn)類(lèi):

          package?NeiBuLei;
          public?class?MyImplement?implements?MyInterface{
          ????@Override
          ????public?void?test()?{
          ????????System.out.println("test");
          ????}
          }

          匿名內(nèi)部類(lèi)的使用:

          package?NeiBuLei;
          public?class?MyImplement?implements?MyInterface{
          ????@Override
          ????public?void?test()?{
          ????????System.out.println("test");
          ????}
          }

          「匿名內(nèi)部類(lèi)的好處:」

          我們定義接口之后,「它的實(shí)現(xiàn)類(lèi)不需要去單獨(dú)創(chuàng)建一個(gè)文件去寫(xiě)它的實(shí)現(xiàn)」 ,我們可以把這個(gè)實(shí)現(xiàn)類(lèi)的操作寫(xiě)到我們調(diào)用的地方就可以了!寫(xiě)起來(lái)更加簡(jiǎn)潔、方便。

          「匿名內(nèi)部類(lèi)的缺點(diǎn):」

          耦合度太高了!

          Object類(lèi)

          匿名內(nèi)部類(lèi)的缺點(diǎn)

          Object類(lèi)常用方法:

          1.equals方法

          ==equals的對(duì)比【面試題】+ jdk查看原碼」

          ==是一個(gè)比較運(yùn)算符

          1. ==:既可以判斷基本類(lèi)型,又可以判斷引用類(lèi)型
          2. ==:如果判斷的是「基本類(lèi)型」「判斷的是值是否相等」 。
          //==:?如果判斷的是基本類(lèi)型,判斷的是?值?是否相等
          int?x1?=?10;
          int?x2?=?10;
          double?x3?=?10.0;
          System.out.println(x1?==?x2);//true
          System.out.println(x1?==?x3);//true
          1. ==:如果判斷的是「引用類(lèi)型」 ,「判斷的是地址是否相等,即判斷是不是同一個(gè)對(duì)象」
          package?Equals;
          public?class?Test01?{
          ????public?static?void?main(String[]?args)?{
          ????????//==:?如果判斷的是引用類(lèi)型,判斷的是地址是否相等,即判斷是不是同一個(gè)對(duì)象
          ????????A?a?=?new?A();
          ????????A?b?=?a;
          ????????A?c?=?b;
          ????????System.out.println(a==c);//???true
          ????????System.out.println(b==c);//?true
          ????????B?obj?=?a;
          ????????System.out.println(obj==c);//?true
          ????}
          }

          class?B{}
          class?A?extends?B{}
          圖片
          1. equals方法是Object類(lèi)中的方法,「只能判斷引用類(lèi)型」

          ?

          idea查看Jdk原碼:鼠標(biāo)光標(biāo)放在要查看的方法上,直接輸入ctrl + b

          查看某個(gè)類(lèi)所有方法:ctrl + F12

          ?

          1. 默認(rèn)判斷的是地址是否相等,「子類(lèi)(Object類(lèi)是所有類(lèi)的父類(lèi))往往重寫(xiě)該方法,用于判斷內(nèi)容是否相等」 。
          /*
          Object類(lèi)?equals()方法原碼

          //默認(rèn)判斷地址是否一樣
          ????public?boolean?equals(Object?obj)?{
          ????????return?(this?==?obj);
          ????}
          ????
          子類(lèi)往往重寫(xiě)該方法,用于判斷內(nèi)容是否相等??String類(lèi)中的equals()方法原碼(重寫(xiě)了父類(lèi)equals()方法)
          ??
          ????public?boolean?equals(Object?anObject)?{
          ????????if?(this?==?anObject)?{?//?如果是同一個(gè)對(duì)象(地址相同)
          ????????????return?true;?//?返回true
          ????????}
          ????????if?(anObject?instanceof?String)?{?//?判斷類(lèi)型
          ????????????String?anotherString?=?(String)anObject;?//?向下轉(zhuǎn)型
          ????????????int?n?=?value.length;
          ????????????if?(n?==?anotherString.value.length)?{?//?如果長(zhǎng)度相同
          ????????????????char?v1[]?=?value;
          ????????????????char?v2[]?=?anotherString.value;
          ????????????????int?i?=?0;
          ????????????????while?(n--?!=?0)?{?//?比較每一個(gè)字符
          ????????????????????if?(v1[i]?!=?v2[i])
          ????????????????????????return?false;
          ????????????????????i++;
          ????????????????}
          ????????????????return?true;?//?如果兩個(gè)字符串每一個(gè)字符都相同,則返回true
          ????????????}
          ????????}
          ????????return?false;
          ????}
          ?*/

          在看個(gè)例子

          圖片

          【小練習(xí)】

          寫(xiě)出輸出結(jié)果:

          package?Equals;
          public?class?EqualsTest01?{
          ????public?static?void?main(String[]?args)?{
          ????????Person?p1?=?new?Person();
          ????????p1.name?=?"tom";
          ????????Person?p2?=?new?Person();
          ????????p2.name?=?"tom";
          ????????System.out.println(p1?==?p2);//?引用類(lèi)型——判斷是否為同一個(gè)對(duì)象(地址)
          ????????System.out.println(p1.name.equals(p2.name));//?p.name是String類(lèi)型,重寫(xiě)了equals()方法——判斷內(nèi)容是否一樣
          ????????System.out.println(p1.equals(p2));//p1,p2屬于Person類(lèi),該類(lèi)并沒(méi)有重寫(xiě)equals()方法(繼承父類(lèi)equals()方法,即判斷地址)

          ????????String?s1?=?new?String("abc");
          ????????String?s2?=?new?String("abc");

          ????????System.out.println(s1.equals(s2));
          ????????System.out.println(s1?==?s2);
          ????}
          }

          class?Person{
          ????public?String?name;
          }

          輸出結(jié)果:

          false true false true false

          2.hashCode方法

          圖片

          小結(jié):(可以當(dāng)作地址來(lái)看但它本質(zhì)上不是地址)

          1. 提高具有哈希結(jié)構(gòu)的容器的效率
          2. 兩個(gè)引用,如果指向的是同一個(gè)對(duì)象,則哈希值肯定一樣
          3. 兩個(gè)引用,如果指向的是不同對(duì)象,則哈希值是不一樣的
          4. 哈希值主要根據(jù)地址號(hào)來(lái)!不能將哈希值完全等價(jià)于地址
          5. 在后面的集合中hashCode如果需要的話(huà),也會(huì)重寫(xiě)
          package?hashCode;
          public?class?HashCode?{
          ????public?static?void?main(String[]?args)?{
          ????????AA?aa?=?new?AA();
          ????????AA?aa2?=?new?AA();
          ????????AA?aa3?=?aa;
          ????????System.out.println("aa.hashCode()="+?aa.hashCode());
          ????????System.out.println("aa2.hashCode()="+?aa2.hashCode());
          ????????System.out.println("aa3.hashCode()="+?aa3.hashCode());
          ????}
          }

          class?AA{}

          輸出結(jié)果:

          ?

          aa.hashCode()=460141958 aa2.hashCode()=1163157884 aa3.hashCode()=460141958

          ?

          3.toString方法

          toString方法

          基本介紹:

          默認(rèn)返回:全類(lèi)名 + @ + 哈希值的十六進(jìn)制

          /*
          ????Object?toString()原碼
          ????//(1)getClass().getName()?類(lèi)的全類(lèi)名(包名+類(lèi)名)
          ????//(2)Integer.toHexString(hashCode())?將hashCode的值轉(zhuǎn)成16進(jìn)制字符串
          ????public?String?toString()?{
          ????????return?getClass().getName()?+?"@"?+?Integer.toHexString(hashCode());
          ????}
          ?*/
          圖片

          「子類(lèi)往往重寫(xiě)toString方法,用于返回對(duì)象的屬性信息(快捷鍵:alt + insert),當(dāng)然我們也可以自己定制?!?/strong>

          圖片

          當(dāng)我們輸出一個(gè)對(duì)象時(shí),toString()方法會(huì)被默認(rèn)調(diào)用

          圖片

          4.finzlize方法

          圖片

          finzlize方法:當(dāng)垃圾收集確定不再有對(duì)該對(duì)象的引用時(shí),垃圾收集器在對(duì)象上調(diào)用該對(duì)象。

          1. 當(dāng)對(duì)象被回收時(shí),系統(tǒng)自動(dòng)調(diào)用該對(duì)象的finzlize方法。子類(lèi)可以重寫(xiě)該方法,做一些釋放資源的操作
          2. 什么時(shí)候被回收:當(dāng)某個(gè)對(duì)象沒(méi)有任何引用時(shí),則jvm就認(rèn)為這個(gè)對(duì)象是一個(gè)垃圾對(duì)象,就會(huì)時(shí)候垃圾回收機(jī)制來(lái)銷(xiāo)毀該對(duì)象,在銷(xiāo)毀該對(duì)象前,會(huì)先調(diào)用finzlize方法。
          圖片
          1. 垃圾回收機(jī)制的調(diào)用,是由系統(tǒng)來(lái)決定(即有自己的GC算法),也可以通過(guò)System.gc()主動(dòng)觸發(fā)垃圾回收機(jī)制。

          ?

          注:在實(shí)際開(kāi)發(fā)中,幾乎不會(huì)用finzlize方法,更多的是為了應(yīng)付面試

          ?

          包裝類(lèi)

          「1.基本數(shù)據(jù)類(lèi)型以及對(duì)應(yīng)的包裝類(lèi):」

          byte?->?Byte
          short?->?Short
          int?->?Integer
          long?->?Long
          float?->?Float
          double?->?Double
          char?->?Character
          boolean?->?Boolean

          這些類(lèi)都在java.lang包

          「2.包裝類(lèi)的意義:」

          1. 讓基本數(shù)據(jù)類(lèi)型有面向?qū)ο蟮奶卣?/section>
          2. 「封裝了字符串轉(zhuǎn)化成基本數(shù)據(jù)類(lèi)型的方法(重點(diǎn))」

          3.包裝類(lèi)常用方法:

          1. Integer.parseInt()
          2. Long.paseLong()
          3. Double.parseDouble()

          【參考代碼】

          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????
          //????????Integer?i?=?new?Integer(10);//?創(chuàng)建包裝類(lèi)對(duì)象
          //????????Integer?ii?=?10;?//?自動(dòng)打包
          //????????System.out.println(i+10);?//?在使用上,int?和Integer?其實(shí)沒(méi)有區(qū)別,可以互相使用
          //????????System.out.println(ii+10);
          //????????int?j?=?ii;//?自動(dòng)解包
          //????????System.out.println(j+100);

          ????????String?a?=?"12";
          ????????String?b?=?"34";
          ????????System.out.println(a+b);?//?1234
          ????//?轉(zhuǎn)型:
          ????????//?字符串轉(zhuǎn)成int的唯一方案
          ????????int?c?=?Integer.parseInt(a);
          ????????int?d?=?Integer.parseInt(b);
          ????????System.out.println(c+d);?//?46
          ????????
          ????????//?字符串轉(zhuǎn)成double類(lèi)型
          ????????String?e?=?"1.25";
          ????????double?f?=?Double.parseDouble(e);
          ????????System.out.println(f*6);?//?7.5

          ????????//?轉(zhuǎn)成long類(lèi)型
          ????????long?l?=?Long.parseLong("1234567");
          ????????System.out.println(l);
          ????}
          }

          數(shù)學(xué)類(lèi)

          ?

          數(shù)學(xué)類(lèi)的方法都是靜態(tài)方法,可以直接引用——Math.方法();

          ?

          「常用數(shù)學(xué)類(lèi)方法:」

          1. abs():獲取絕對(duì)值
          2. max():求最大值
          3. min():求最小值
          4. pow():求次冪
          5. round():四舍五入
          6. sqrt():求平方根

          時(shí)間類(lèi)

          Java常用時(shí)間類(lèi):

          1. Date 日期類(lèi)
          2. Calendar 日歷類(lèi)
          3. SimpleDateFormat 格式化時(shí)間類(lèi)

          ?

          Date和Calendar類(lèi) 在java.util包中, SimpleDateFormat類(lèi) 在java.text包

          ?

          1.Date 日期

          【1】new Date() 可以獲取到系統(tǒng)時(shí)間

          【2】getTime() 能獲取到時(shí)間的long形式,可以用來(lái)計(jì)算時(shí)間差

          ?

          getTime()——獲取計(jì)算機(jī)底層存儲(chǔ)的數(shù)字,返回一個(gè)數(shù)字用來(lái)表示時(shí)間,這個(gè)數(shù)字的類(lèi)型long,單位為毫秒。

          ?

          【參考代碼】

          import?java.util.Date;
          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????Date?d?=?new?Date();
          ????????System.out.println(d);?//?系統(tǒng)時(shí)間
          ????????//get...()——獲取年月日.....
          ????????System.out.println(d.getYear()+1900);?//?從1900年開(kāi)始算的
          ????????System.out.println(d.getMonth()+1);?//?月份從0開(kāi)始計(jì)算
          ????????System.out.println(d.getDate());?//?天數(shù)
          ????????System.out.println(d.getHours());//?小時(shí)

          ????????//getTime()——獲取到時(shí)間的毫秒形式?返回的是long
          ????????System.out.println(d.getTime());
          ????}
          }

          2.Calendar 日歷

          【1】get() 獲取到時(shí)間的某一部分

          【2】set() 設(shè)置時(shí)間 - -> 計(jì)算時(shí)間:系統(tǒng)已經(jīng)幫我們?cè)O(shè)置好了,不用擔(dān)心二月有多少天等問(wèn)題,計(jì)算時(shí)間十分方便

          ?

          注:Calendar 日歷類(lèi)是抽象類(lèi),因此不可以去new對(duì)象。雖然抽象類(lèi)不能創(chuàng)建對(duì)象,但是jdk官方提供了一個(gè)實(shí)例對(duì)象的操作:

          Calendar rightNow = Calendar.getInstance();

          我們通過(guò)這條代碼就是直接造了一個(gè)Calender的對(duì)象

          ?

          【參考代碼】:get() 獲取到時(shí)間的某一部分:

          package?date;
          import?java.util.Calendar;
          public?class?TestCalendar?{
          ????public?static?void?main(String[]?args)?{
          ????????Calendar?cal?=?Calendar.getInstance();
          //????????System.out.println(cal);
          ????????
          ????????/*
          ?假設(shè)當(dāng)天:
          ????????2021
          ????????8
          ????????10
          ?????????*/
          ??cal.set(Calendar.DATE,cal.get(Calendar.DATE)+31);?//?計(jì)算時(shí)間(這里用天數(shù)計(jì)算的)?
          ????????
          ????????//?獲取Calendar創(chuàng)建的對(duì)象里的所有內(nèi)容
          ????????System.out.println(cal.get(Calendar.YEAR));?//?2021?年
          ??????? System.out.println(cal.get(Calendar.MONTH)+1);?//?月份:從0開(kāi)始的??結(jié)果:為10月
          ????????System.out.println(cal.get(Calendar.DATE));?//?日
          ????????System.out.println(cal.get(Calendar.HOUR_OF_DAY));//?小時(shí)
          ????????System.out.println(cal.get(Calendar.MINUTE));
          ????????System.out.println(cal.get(Calendar.SECOND));
          ????}
          }

          【參考代碼】:set() 設(shè)置時(shí)間 - -> 計(jì)算時(shí)間:

          ?

          注:cal.setTime(d); 把Date轉(zhuǎn)化成Calendar

          ?

          package?date;
          import?java.util.Calendar;
          import?java.util.Date;
          public?class?TestCalendar?{
          ????public?static?void?main(String[]?args)?{
          ????????Date?d?=?new?Date();
          ????????Calendar?cal?=?Calendar.getInstance();
          ????????cal.setTime(d);//?把Date轉(zhuǎn)化成Calendar
          ????????System.out.println(cal);
          ????????System.out.println(cal.get(Calendar.YEAR));?//??年
          ??????? System.out.println(cal.get(Calendar.MONTH)+1);?//?月份:從0開(kāi)始的
          ????????System.out.println(cal.get(Calendar.DATE));?//?日????????
          ????}
          }

          3.SimpleDateFormat格式化時(shí)間

          Date,Calendar通過(guò)引用也可以進(jìn)行時(shí)間的格式化,但比較繁瑣,而SimpleDateFormat類(lèi)是專(zhuān)門(mén)幫我們格式化時(shí)間的工具類(lèi),它在java.text包中。

          【時(shí)間格式】:yyyy-MM-dd HH:mm:ss

          SimpleDateFormat類(lèi)有兩大常用方法:

          【1】format(Date):

          ?

          format(Date) 幫我們把時(shí)間轉(zhuǎn)成字符串,字符串的格式為SimpleDateFormat類(lèi)定義對(duì)象時(shí)設(shè)置的時(shí)間格式

          ?

          【參考代碼】

          package?Simple;
          import?java.text.SimpleDateFormat;
          import?java.util.Date;
          import?java.util.logging.SimpleFormatter;
          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????Date?d?=?new?Date();
          ????????System.out.println(d);?//Thu?Aug?12?08:40:08?CST?2021??不美觀

          ??//??????????????????設(shè)置格式化時(shí)間的模式,我們常用yyyy-MM-dd?HH:mm:ss這個(gè)模式
          ????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");//?時(shí)間格式
          ????????String?s?=?sdf.format(d);?//?格式化時(shí)間
          ????????System.out.println(s);?//?2021-08-12?08:45:09
          ????}
          }

          【2】parse(String):

          ?

          parse(String) 幫我們把字符串轉(zhuǎn)化成時(shí)間

          ?

          【參考代碼】

          package?Simple;
          import?java.text.ParseException;
          import?java.text.SimpleDateFormat;
          import?java.util.Date;
          import?java.util.Scanner;

          public?class?Test2?{
          ????public?static?void?main(String[]?args)?throws?ParseException?{
          ????????Scanner?sc?=?new?Scanner(System.in);
          ????????System.out.println("請(qǐng)輸入一個(gè)時(shí)間(yyyy-MM-dd HH:mm:ss):");
          ????????String?s?=?sc.nextLine();
          ????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss");
          ???????Date?d?=??sdf.parse(s);?//?把字符串轉(zhuǎn)成時(shí)間
          ????????System.out.println(d);????????
          ????????/*
          ????????請(qǐng)輸入一個(gè)時(shí)間(yyyy-MM-dd HH:mm:ss):
          ????????2021-08-12?12:25:21
          ????????Thu?Aug?12?12:25:21?CST?2021
          ?????????*/
          ????}
          }

          ?

          注:由于用戶(hù)輸入的字符串不一定是我們要求的格式,可能是任何東西,想把它們轉(zhuǎn)成時(shí)間是不可能的,你不可能把一個(gè)人轉(zhuǎn)成時(shí)間 對(duì)吧,因此存在著很大的風(fēng)險(xiǎn)未處理(異常: java.text.ParseException),為此我們需要處理異常。

          ?

          4.計(jì)算時(shí)間差

          計(jì)算思路:

          1. 格式化時(shí)間
          2. 先將字符串轉(zhuǎn)化成long類(lèi)型時(shí)間
          3. 計(jì)算毫秒級(jí)別時(shí)間差,取絕對(duì)值
          4. 毫秒級(jí)別時(shí)間差轉(zhuǎn)成秒級(jí)別
          5. 秒級(jí)別時(shí)間差轉(zhuǎn)成分鐘級(jí)別
          6. 分鐘級(jí)別時(shí)間差轉(zhuǎn)化顯示成xx小時(shí)xx分鐘

          【參考代碼】

          package?Simple;
          import?java.text.ParseException;
          import?java.text.SimpleDateFormat;
          import?java.util.Date;
          public?class?TestDiff?{
          ????public?static?void?main(String[]?args)?throws?ParseException?{
          ????????String?s1?=?"2021-08-12?12:00:00";?//?開(kāi)始時(shí)間
          ????????String?s2?=?"2021-08-12?14:35:00";?//?結(jié)束時(shí)間
          ????????//格式化時(shí)間
          ????????SimpleDateFormat?sdf?=?new?SimpleDateFormat("YYYY-MM-dd?HH:mm:ss");
          ????????//將字符串轉(zhuǎn)成時(shí)間形式
          ????????Date?d1?=?sdf.parse(s1);
          ????????Date?d2?=?sdf.parse(s2);

          ????????//計(jì)算時(shí)間差:先要獲取時(shí)間毫秒形式(long類(lèi)型)?再做差
          ????????long?long1?=?d1.getTime();
          ????????long?long2?=?d2.getTime();
          ????????long?diffTime?=?Math.abs(long1?-?long2);

          ????????//?秒級(jí)別時(shí)間差
          ????????long?diffSec?=?diffTime?/?1000;

          ????????//?分級(jí)別時(shí)間差
          ????????long?diffMin?=?diffSec?/?60;

          ????????//顯示?xx小時(shí)xx分鐘
          ????????long?displayHours?=?diffMin?/?60;?//?小時(shí)
          ????????long?displayMin?=?diffMin?%?60;?//分鐘
          ????????System.out.println("您學(xué)習(xí)的時(shí)長(zhǎng)為:"+displayHours+"小時(shí)"+displayMin+"分鐘");
          ????}
          }

          String類(lèi)

          字符串類(lèi)常用方法

          「方法匯總:」


          ?

          「注:字符串是一個(gè)不可變的類(lèi)型(final類(lèi)),幾乎所有的字符串操作都會(huì)返回一個(gè)新字符串而不是在原有基礎(chǔ)上進(jìn)行修改?!?/strong>

          ?

          【示例代碼】

          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????String?s?=?"我的名字叫李華";????????
          ????????s.concat("hhh");?//?在字符串s上拼接,拼接hhh
          ????????System.out.println(s);//?我的名字叫李華
          ????????//字符串是不可變的數(shù)據(jù)類(lèi)型
          ????????//幾乎所有的字符串操作都會(huì)返回一個(gè)新字符串
          ????????String?s1?=?s.concat("hhh");?//?在字符串s上拼接,拼接hhh
          ????????System.out.println(s1);//我的名字叫李華hhh????????
          ????????
          ????????String?str1?=?"李華喜歡看羅老師的視頻";
          ????????str1.replace("李華","張三");
          ????????System.out.println(str3);?//李華喜歡看羅老師的視頻??并沒(méi)有替換?字符串是不變的str1還是str1

          ????????String?str2?=?str1.replace("李華","張三");//幾乎所有的字符串操作都會(huì)返回一個(gè)新字符串?新串要用新變量接
          ????????System.out.println(str2);//張三喜歡看羅老師的視頻?????????
          ???}
          }
          package?String;
          import?java.util.Scanner;
          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????String?s?=?"我的名字叫李華";
          ????????System.out.println(s.charAt(0));?//?獲取第0個(gè)位置的字符
          ????????s.concat("hhh");
          ????????System.out.println(s);//?我的名字叫李華
          ????????//字符串是不可變的數(shù)據(jù)類(lèi)型
          ????????//幾乎所有的字符串操作都會(huì)返回一個(gè)新字符串
          ????????String?s1?=?s.concat("hhh");?//?在字符串s上拼接,拼接hhh
          ????????System.out.println(s1);//我的名字叫李華hhh
          ????????System.out.println(s.contains("李華"));?//true
          ????????System.out.println(s.contains("牛津"));?//false
          ????????System.out.println("邀請(qǐng)李華來(lái)參加英語(yǔ)沙龍活動(dòng)".endsWith("活動(dòng)"));//true?判斷是否以xxx為結(jié)尾
          ????????System.out.println("邀請(qǐng)李華來(lái)參加英語(yǔ)沙龍活動(dòng)".startsWith("李華"));//false?判斷是否以xxx開(kāi)頭

          ????????//?equals字符串內(nèi)容是否相同

          ????????//?接受邀請(qǐng)參加活動(dòng)的李華到現(xiàn)場(chǎng)后要輸入驗(yàn)證碼
          //????????String?yanZhengMa?=?"AAkm";
          //
          //????????Scanner?sc?=?new?Scanner(System.in);
          //
          //????????System.out.println("請(qǐng)輸入驗(yàn)證碼("+yanZhengMa+")");
          //
          //????????String?userInput?=?sc.nextLine();
          //
          //????????if(yanZhengMa.equalsIgnoreCase("aakm")){??//?忽略大小寫(xiě)判斷兩邊的內(nèi)容是否一樣
          //????????????System.out.println("歡迎參加英語(yǔ)沙龍活動(dòng)!");
          //????????}else{
          //????????????System.out.println("您未受到邀請(qǐng),請(qǐng)現(xiàn)場(chǎng)報(bào)名!");
          //????????}

          //????????String?str?=?"李華玩得很開(kāi)心!";
          //????????System.out.println(str.indexOf("開(kāi)心"));//?5?計(jì)算給出字符串第一個(gè)出現(xiàn)的位置

          ????????String?str2?=?"李華成績(jī)很好";
          ????????System.out.println(str2.length());?//?6?計(jì)算字符串的長(zhǎng)度

          ????????String?str3?=?"李華喜歡看羅老師的視頻";
          ????????str3.replace("李華","張三");
          ????????System.out.println(str3);?//李華喜歡看羅老師的視頻??并沒(méi)有替換?字符串是不變的str3還是str3

          ????????String?str4?=?str3.replace("李華","張三");//幾乎所有的字符串操作都會(huì)返回一個(gè)新字符串?新串要用新變量接
          ????????System.out.println(str4);//張三喜歡看羅老師的視頻
          ????????String?str5?=?"哈哈_呵呵_嘻嘻_噢no";
          ????????String[]?ss?=?str5.split("_");//切割
          ????????System.out.println(ss[0]);//哈哈
          ????????System.out.println(ss[1]);//哈哈
          ????????System.out.println(ss[2]);//嘻嘻
          ????????System.out.println(ss[3]);//噢no

          ????????String?str6?=?"今天天氣不錯(cuò)";
          ????????System.out.println(str6.substring(2,4));//天氣?字符串截取?[?)?左閉右開(kāi),右邊取不到

          ????????String?str7?="?????哈????哈??????";
          ????????System.out.println(str7.trim());//?去掉左右兩邊的空格
          ????????int?i?=?10;
          ????????System.out.println(String.valueOf(i));?//?基本數(shù)據(jù)類(lèi)型轉(zhuǎn)為字符串
          ????????System.out.println(i+"");?//?野路子
          ????}
          }

          String Builder和StringBuffer

          「String類(lèi)的缺點(diǎn):」

          String 是一個(gè)不可變的數(shù)據(jù)類(lèi)型,每每拼接都會(huì)產(chǎn)生一個(gè)新的字符串,那么內(nèi)存遲早會(huì)被這些拼接的字符串塞滿(mǎn)。

          「String類(lèi)和StringBuilder和StringBuffer類(lèi)的區(qū)別:」

          StringBuilder和StringBuffer:「可變的字符串,不產(chǎn)生新對(duì)象,比較省內(nèi)存」 ,當(dāng)進(jìn)行大量的字符串拼接時(shí)建議使用StringBuffer和StringBuilder,但它們兩個(gè)一些方法的實(shí)現(xiàn)幾乎跟String一樣。

          「StringBuffer和StringBuilder類(lèi):」

          【相似點(diǎn)】

          兩者用法一模一樣,可以認(rèn)為是一個(gè)類(lèi)

          【區(qū)別】

          1. StringBuffer線(xiàn)程安全,StringBuilder非線(xiàn)程安全。
          2. StringBuilder相比于StringBuffer有速度優(yōu)勢(shì),「多數(shù)情況下建議使用StringBuilder類(lèi),但當(dāng)被要求線(xiàn)程安全時(shí)必須使用StringBuilder類(lèi)」

          ?

          字符串拼接方法:append()方法

          StringBuffer和StringBuilder 轉(zhuǎn)成String類(lèi) :

          StringBuilder sb = new StringBuilder("貓喜歡吃魚(yú)"); String s = sb.toString();

          ?

          【參考代碼】

          package?String;
          public?class?TestStringBuilder?{
          ????public?static?void?main(String[]?args)?{
          ????????StringBuilder?sb?=?new?StringBuilder();//?一個(gè)空的字符串""
          ????????StringBuilder?sb2?=?new?StringBuilder("貓喜歡吃魚(yú)");
          ????????System.out.println(sb2);//?貓喜歡吃魚(yú)

          ????????sb2.append(",狗也喜歡吃魚(yú)");
          ????????System.out.println(sb2);//?追加??貓喜歡吃魚(yú),狗也喜歡吃魚(yú)

          ????????sb2.insert(1,"哈哈哈");
          ????????System.out.println(sb2);?//貓哈哈哈喜歡吃魚(yú),狗也喜歡吃魚(yú)

          ????????//?上述的操作huan'c
          ????????//?把StringBuilder轉(zhuǎn)化成String
          ????????String?s?=?sb2.toString();
          ????????System.out.println(s);?//貓哈哈哈喜歡吃魚(yú),狗也喜歡吃魚(yú)
          ????????//?上述操作都可以將StringBuilder換成StringBuffer,結(jié)果一樣
          ????}
          }

          DecimalFormat

          DecimalFormat:對(duì)小數(shù)進(jìn)行格式化,保留幾位小數(shù)。與格式化時(shí)間聯(lián)想記。

          ?

          . 表示小數(shù)點(diǎn)

          0和# 表示數(shù)位,保留幾位就幾個(gè)0或者#

          ?

          【參考代碼】

          import?java.text.DecimalFormat;
          import?java.util.Scanner;
          public?class?Test?{
          ????public?static?void?main(String[]?args)?{
          ????????double?d=?10/3.0;
          ????????System.out.println(d);//3.3333333333333335
          ????????
          ????????//?.?表示小數(shù)點(diǎn)
          ????????//?0和#表示數(shù)字

          ????????//?保留兩位小數(shù)????????????????????????格式
          ????????DecimalFormat?df?=?new?DecimalFormat(".00");?//?或者.##
          ????????String?s?=?df.format(d);?//?把?d?轉(zhuǎn)成上面設(shè)置的格式
          ????????System.out.println(s);//3.33
          ???}
          }

          總結(jié)

          萬(wàn)變不離其宗,Java 的其他類(lèi)和功能,都離不開(kāi)這些基礎(chǔ)。牢記基礎(chǔ),成長(zhǎng)的更穩(wěn)!

          1.?Java/Spring/Dubbo三種SPI機(jī)制,誰(shuí)更好?

          2.?數(shù)據(jù)庫(kù)優(yōu)化8大通用絕招 ! 你知道幾個(gè)?

          3.?DataGrip 保姆級(jí)教程 !

          4.?那些年你啃過(guò)的ConcurrentHashMap

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          PS:因公眾號(hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過(guò)內(nèi)容,記得讀完點(diǎn)一下在看,加個(gè)星標(biāo),這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列表里。

          點(diǎn)“在看”支持小哈呀,謝謝啦??

          瀏覽 72
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    日本在线视频免费观看区 | 影音先锋全部av鲁色 | 亚洲黄色免费网站 | 天天狠天天透天干天天怕∴ | 国产高清免费 |