1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 35201字,需瀏覽 71分鐘

         ·

        2022-08-08 16:28


        超全技術(shù)棧的Java入門+進(jìn)階+實(shí)戰(zhàn)!(非白嫖,點(diǎn)擊查看)

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

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

        常用類概述

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

        內(nèi)部類

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

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

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

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

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

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

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

        參考代碼如下:

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

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

        輸出結(jié)果:

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

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

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

        局部?jī)?nèi)部類:基本的內(nè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)部類方法!");
                    }
                }
                InnerClass innerClass = new InnerClass();
                innerClass.print();
            }

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

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

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

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

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

        輸出結(jié)果:

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

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

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

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

        接口:

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

        實(shí)現(xiàn)類:

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

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

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

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

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

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

        耦合度太高了!

        Object類

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

        Object類常用方法:

        1.equals方法

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

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

        1. ==:既可以判斷基本類型,又可以判斷引用類型
        2. ==:如果判斷的是「基本類型」「判斷的是值是否相等」 。
        //==: 如果判斷的是基本類型,判斷的是 值 是否相等
        int x1 = 10;
        int x2 = 10;
        double x3 = 10.0;
        System.out.println(x1 == x2);//true
        System.out.println(x1 == x3);//true
        1. ==:如果判斷的是「引用類型」「判斷的是地址是否相等,即判斷是不是同一個(gè)對(duì)象」
        package Equals;
        public class Test01 {
            public static void main(String[] args) {
                //==: 如果判斷的是引用類型,判斷的是地址是否相等,即判斷是不是同一個(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類中的方法,「只能判斷引用類型」

        ?

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

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

        ?

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

        //默認(rèn)判斷地址是否一樣
            public boolean equals(Object obj) {
                return (this == obj);
            }
            
        子類往往重寫該方法,用于判斷內(nèi)容是否相等  String類中的equals()方法原碼(重寫了父類equals()方法)
          
            public boolean equals(Object anObject) {
                if (this == anObject) { // 如果是同一個(gè)對(duì)象(地址相同)
                    return true; // 返回true
                }
                if (anObject instanceof String) { // 判斷類型
                    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í)】

        寫出輸出結(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);// 引用類型——判斷是否為同一個(gè)對(duì)象(地址)
                System.out.println(p1.name.equals(p2.name));// p.name是String類型,重寫了equals()方法——判斷內(nèi)容是否一樣
                System.out.println(p1.equals(p2));//p1,p2屬于Person類,該類并沒(méi)有重寫equals()方法(繼承父類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ì)重寫
        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)返回:全類名 + @ + 哈希值的十六進(jìn)制

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

        「子類往往重寫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方法。子類可以重寫該方法,做一些釋放資源的操作
        2. 什么時(shí)候被回收:當(dāng)某個(gè)對(duì)象沒(méi)有任何引用時(shí),則jvm就認(rèn)為這個(gè)對(duì)象是一個(gè)垃圾對(duì)象,就會(huì)時(shí)候垃圾回收機(jī)制來(lái)銷毀該對(duì)象,在銷毀該對(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)付面試

        ?

        包裝類

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

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

        這些類都在java.lang包

        「2.包裝類的意義:」

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

        3.包裝類常用方法:

        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)建包裝類對(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類型
                String e = "1.25";
                double f = Double.parseDouble(e);
                System.out.println(f*6); // 7.5

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

        數(shù)學(xué)類

        ?

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

        ?

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

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

        時(shí)間類

        Java常用時(shí)間類:

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

        ?

        Date和Calendar類 在java.util包中, SimpleDateFormat類 在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ù)字的類型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 日歷類是抽象類,因此不可以去new對(duì)象。雖然抽象類不能創(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類是專門幫我們格式化時(shí)間的工具類,它在java.text包中。

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

        SimpleDateFormat類有兩大常用方法:

        【1】format(Date):

        ?

        format(Date) 幫我們把時(shí)間轉(zhuǎn)成字符串,字符串的格式為SimpleDateFormat類定義對(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
                 */
            }
        }

        ?

        注:由于用戶輸入的字符串不一定是我們要求的格式,可能是任何東西,想把它們轉(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類型時(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類型) 再做差
                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類

        字符串類常用方法

        「方法匯總:」


        ?

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

        ?

        【示例代碼】

        public class Test {
            public static void main(String[] args) {
                String s = "我的名字叫李華";        
                s.concat("hhh"); // 在字符串s上拼接,拼接hhh
                System.out.println(s);// 我的名字叫李華
                //字符串是不可變的數(shù)據(jù)類型
                //幾乎所有的字符串操作都會(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ù)類型
                //幾乎所有的字符串操作都會(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")){  // 忽略大小寫判斷兩邊的內(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ù)類型轉(zhuǎn)為字符串
                System.out.println(i+""); // 野路子
            }
        }

        String Builder和StringBuffer

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

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

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

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

        「StringBuffer和StringBuilder類:」

        【相似點(diǎn)】

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

        【區(qū)別】

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

        ?

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

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

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

        ?

        【參考代碼】

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

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

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

                // 上述的操作huan'c
                // 把StringBuilder轉(zhuǎn)化成String
                String s = sb2.toString();
                System.out.println(s); //貓哈哈哈喜歡吃魚,狗也喜歡吃魚
                // 上述操作都可以將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 的其他類和功能,都離不開(kāi)這些基礎(chǔ)。牢記基礎(chǔ),成長(zhǎng)的更穩(wěn)!


        胖虎聯(lián)合一線大廠朋友花費(fèi)8個(gè)月的時(shí)間,錄制了一份Java入門+進(jìn)階視頻教程

        課程特色:

        1. 總共88G,時(shí)常高達(dá)365小時(shí),覆蓋所有主流技術(shù)棧

        2. 均為同一人錄制,不是東拼西湊的

        3. 對(duì)標(biāo)線下T0級(jí)別的培訓(xùn)課,講師大廠架構(gòu)師,多年授課經(jīng)驗(yàn),通俗易懂

        4. 內(nèi)容豐富,每一個(gè)技術(shù)點(diǎn)除了視頻,還有課堂源碼、筆記、PPT、圖解

        5. 五大實(shí)戰(zhàn)項(xiàng)目(視頻+源碼+筆記+SQL+軟件)

        6. 一次付費(fèi),持續(xù)更新,永無(wú)二次費(fèi)用

        點(diǎn)擊下方超鏈接查看詳情(或者點(diǎn)擊文末閱讀原文):

        (點(diǎn)擊查看)  88G,超全技術(shù)棧的Java入門+進(jìn)階+實(shí)戰(zhàn)!

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            乱伦色网 | 婷婷久久伊人五月天 | 欧美网站在线看 | 亚洲最大av番号库 | 国产鸭子av | 午夜8050| 人人舔人人操人人干 | 猛男大粗猛爽h男人味 | 欧美无人在线观看高清视频 | 无码乱轮 |