日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stringbuffer常用方法_第八讲:常用类库API

發(fā)布時間:2025/3/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 stringbuffer常用方法_第八讲:常用类库API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、字符串操作---String類

1、String可以表示一個字符串,不能被繼承(最終類)不可變

2、String類實際是使用字符數(shù)組存儲的

String類的兩種賦值方式:

(1)一種稱為直接賦值、Java推薦使用第一種方式

String name="小白"

(2)通過關(guān)鍵字new調(diào)用String的構(gòu)造方法賦值:new申請內(nèi)存空間

String?name =?new String("小白")

String類的兩種賦值分析:

1、字符串常量池

2、String name = new String("小白")在內(nèi)存中分析

3、String?name =?"小白",在內(nèi)存中分析

String 類編譯期與運行期分析:

1、編譯期和運行期

2、代碼示例:4種情況分析:直接賦值字符串連接時,考慮編譯期與運行期

如果在編譯期值可以被確定,那么就使用已有的對象,否則會創(chuàng)建新對象

String a="a";String a+1;String?a2="a1";System.out.println(a1==a2);

String類字符與字符串操作方法:

String類字節(jié)與字符串操作方法:

String類判斷是否以指定內(nèi)容開頭或結(jié)尾:

String類替換操作:

String字符串截取操作:

String字符串拆分操作:

String字符串查找操作:

String類其它操作方法:

二、字符串操作-----StringBuffer類

在實際開發(fā)當(dāng)中,我們經(jīng)常會使用到字符串連接的操作,如果用String來操作,則使用“+”號來完成字符串的連接操作。

使用String連接字符串,代碼性能會非常低,因為String的內(nèi)容不可改變。解決這個問題的方法是使用StringBuffer.

package com.vince.ex;public class StringDemo { public static void main(String[] args) { String a = "a"; String b = "b"; String c = a+b+1; System.out.println(c); String d="a"+1+2+3+4+"b";//a1234b //常量相加沒有性能問題(編譯期進行優(yōu)化) //StringBuffer目的是為了解決字符串相加時帶來的性能問題(常量與變量) //StringBuffer的內(nèi)部實現(xiàn)采用字符數(shù)組、默認數(shù)組的長度為16,超過數(shù)組大小時,動態(tài)擴充的算法是原長度的*2+2 //所以當(dāng)我們要預(yù)知添加的數(shù)據(jù)長度時,建議使用帶初始化容量的構(gòu)造方法,來避免動態(tài)擴張的次數(shù),從而提高效率 //線程安全,會影響性能??????StringBuffer?sb?=?new?StringBuffer(32);//帶容量的構(gòu)造 sb.append(a).append(b).append(1); System.out.println(sb.toString());??}}

StringBuffer常用操作方法:

StringBuffer的兄弟StringBuilder:

一個可變的字符序列,此類提供一個與StringBuffer兼容的API,但不保證同步該類被設(shè)計用作StringBuffer的一個簡易替換,用在字符串緩沖期被單個線程使用的時候(這種情況很普遍)如果可能,建議優(yōu)先采用該類,因為在大多數(shù)實現(xiàn)中,它比StringBuffer更快。

JDK1.5后、字符串相加原理分析:

package com.vince.ex;public class StringBufferDemo { public static void main(String[] args) { //面試題:StringBuffer與StringBuilder的區(qū)別? //StringBuilder是線程不安全的,性能高,適合在單線程中使用,這種情況占大多數(shù)在JDK1.5后添加 //StringBuffer是線程安全的,性能低,適合在多線程中使用,JDK1.0 StringBuilder sb = new StringBuilder(); /** * 字符串相加操作 * 1、多個常量相加沒有性能問題,在編譯期優(yōu)化 * 2、常量與常量相加、會產(chǎn)生多個垃圾對象 */ //String a = "a"+1; //String b = a+"b"; String c = null; for(int i=0;i<5;i++) { c+=i;//每個循環(huán)會產(chǎn)生一個StringBuilder對象實現(xiàn)拼接,性能低、最好是手動創(chuàng)建StringBuilder來拼接 } //1、字符串相加,在編譯后,會使用StringBuilder來優(yōu)化代碼,實現(xiàn)拼接 }}

三、程序國際化

1、對國際化程序的理解:

lnternationalization:國際化程序可以這樣理解:

同一套程序代碼,可以在各個語言環(huán)境下進行使用。只是語言顯示不同,那么具體程序操作本身都是一樣的,那么國際化程序完成的就是這樣的一個功能。

2、Locale類:

Locale對象表示了特定的地理、政治和文化地區(qū)。需要Locale來執(zhí)行其任務(wù)的操作稱為語言環(huán)境敏感的操作,它使用Locale為用戶量身定制信息,例如:顯示一個數(shù)值就是語言環(huán)境敏感的操作,應(yīng)該根據(jù)用戶的國家、地區(qū)或文化風(fēng)俗/傳統(tǒng)來格式化數(shù)值。

使用此類中的構(gòu)造方法來創(chuàng)建Locale

Locale(String language)

Locale(String langusge,String country)

通過靜態(tài)方法創(chuàng)建Locale

getDefault()

package?com.vince.ex;public?class?I18NDemo?{ public static void main(String[] args) { //創(chuàng)建一個環(huán)境語言對象,該對象會根據(jù)參數(shù)設(shè)置來自動選擇與相關(guān)的語言環(huán)境 //參數(shù):語言、地區(qū) Locale locale_CN = new Locale("zh","CN"); Locale locale_US = new Locale("en","UD"); //獲取當(dāng)前系統(tǒng)默認的語言環(huán)境 Locale locale_default = Locale.getDefault(); }

3、ResourceBundle類:

國際化的實現(xiàn)核心在于顯示的語言上,通常的做法是將其定義成若干個屬性文件(文件后綴是*。properties)屬性中的格式采用“key=value”的格式進行操作。

ResourceBundle類表示的是一個資源文件的讀取操作,所有的資源文件需要使用ResourceBundle進行讀取,讀取的時候不需要加上文件的后綴。

getBundle(String?baseName)

getBundle(String baseName,Locale locale)

getString?(String key)

properties文件:屬性文件(配置文件)內(nèi)容以鍵值對的形式存放(key-value)

ResourceBundle工具類:來綁定屬性文件,并指定Locale對象,來自動選擇使用哪個屬性文件,默認講使用與操作系統(tǒng)相同的語言環(huán)境

getString?()方法來從屬性文件中使用key來獲取value

注意:ResourceBundle工具類是只讀的

4、處理動態(tài)文本:

前面的讀取示例讀取的內(nèi)容都是固定的,如果現(xiàn)在假設(shè)要想打印這樣的消息“歡迎你,xxx!”,具體的名字不是固定的,那么就要使用動態(tài)文本進行程序的處理。

進行動態(tài)的文本處理,必須使用Java.text.MessageFormat類完成。這個類是Java.text,Format的子類

四、Math與Random類

1、Math類

Math類包含用于執(zhí)行基本數(shù)學(xué)運算的方法、如初等指數(shù)、對數(shù)、平方根和三角函數(shù)。

使用Math類可以有以下兩種方式:

(1)直接使用(Math所在的包Java.lang為默認引入的包)

(2)使用import.static java.lang.Math.abs;靜態(tài)導(dǎo)入

? static?double?Pl對任何值都更接近pi的double值
? ? abs(double a)返回double值的絕對值
? ? ? ? random()返回帶正號的double值,該值大于等于0.0且小于1.0
? ?round(double?a)返回最近參數(shù)并等一整數(shù)的double值
? ? ?sqrt(double a)返回正確舍入的double值的平方根

2、Random類

Random:此類在實例用于生成隨機數(shù)流

? ?nextLong()返回下一個偽隨機數(shù)的long值
? ?nextBoolean()返回下一個偽隨機數(shù)的boolean值
? ??nextDoble()返回下一個偽隨機數(shù),在0.0和1.0之間的double值
? ? nextFloat()返回下一個偽隨機數(shù),在0.0和1.0之間的float值
? ??nextInt()返回下一個偽隨機數(shù),int值
? ? nextInt(int n)返回一個偽隨機數(shù),在1(包括)和指定值分布的int值

五、日期操作類

1、Date類

類Date表示特定的瞬間,精確到毫秒,也就是程序運行時的當(dāng)前時間

Date date = new Date();//實例化Date類,表示當(dāng)前時間

2、Calender類

Calender、日歷類、使用此類可以將時間精確到毫秒顯示。兩種實例化方式:

Calender c =?Calender.getlnstance();

Calender c = new GregorianCalender();

3、DateFormat類及子類SimpleDateFormat

六、對象比較器

對兩個或多個數(shù)據(jù)進行比較,以確定它們是否相等,或確定它們之間的大小關(guān)系及排列順序稱為比較。

Arrays.sort方法可實現(xiàn)對象的排列順序操作:

(1)Comparable接口:

此接口強行對實現(xiàn)它的每個類的對象進行整體排序,這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法。

(2)Comparator接口:

Comparable接口是要求自定義類去實現(xiàn),按照oo原則:對修改關(guān)閉,對擴展開發(fā),那么如果這個類已經(jīng)定義好了,不想再去修改它,那如何實現(xiàn)比較呢?Comparator接口:強行對一個對象collection進行整體排序的比較。

七、對象的克隆

將一個對象復(fù)制一份,稱為對象的克隆技術(shù)。

在Object類中存在一個clone()方法:

protected Object clone()throws CloneNotSupportdException(如果一個類的對象要想克隆,則對象所在的類必須實現(xiàn)Cloneable接口。此接口沒有定義任何方法,是一個標(biāo)記接口)

對象需要具有可能功能:

1、實現(xiàn)Cloneable接口(標(biāo)記接口)

2、重寫Object類中的clone方法

八、System與Runtime類

System類代表系統(tǒng),系統(tǒng)級的很多屬性和控制方法都放置在該類的內(nèi)部。該類位于java.lang包

1、成員變量

System類內(nèi)部包含in、out和err三個成員變量,分別代表標(biāo)準(zhǔn)輸入流(鍵盤輸入),標(biāo)準(zhǔn)輸入流(顯示器)和標(biāo)準(zhǔn)錯誤輸出流

2、成員方法

System類中提供了一些系統(tǒng)級的操作方法

參數(shù)(源數(shù)組、源數(shù)組的起始位置、目標(biāo)數(shù)組的起始位置?、長度)

(1)public?static void?arraycopy(Object src、int?srcPos、Object dest,int destPos,intlength)該方法的作用是數(shù)組拷貝,也就是將一個數(shù)組中的內(nèi)容復(fù)制到另一個數(shù)組中的指定位置,由于該方法是native方法,所以性能上比使用循環(huán)高效

(2)public static long currentTimeMillis()該方法的作用是返回當(dāng)前的計算機時間,時間的表達格式為當(dāng)前計算機時間和GMT時間(格林威治時間)1970年1月1號0時0分0秒所差的毫秒數(shù)

(3)public static?void exit(int?status)該方法的作用是退出程序。其中status的值為0代表正常退出,非零代表異常退出,使用該方法可以在圖形界面編程中實現(xiàn)程序的退出功能等。

(4)public?static void?gc()該方法的作用是請求系統(tǒng)進行垃圾回收,至于系統(tǒng)是否立即回收,則取決于系統(tǒng)中的垃圾回收算法實現(xiàn)以及系統(tǒng)執(zhí)行時的情況

(5)public?static?String?getProperty(String?key)該方法的作用是獲得系統(tǒng)中屬性名為key的屬性對應(yīng)的值

java.version?java? ? ? ?運行時環(huán)境版本

Java.home? ? ? ? ? ? ? ? ?Java安裝目錄

os.name? ? ? ? ? ? ? ? ? ? ?操作系統(tǒng)的名稱

os.version? ? ? ? ? ? ? ? ? 操作系統(tǒng)的版本

user.name?? ? ? ? ? ? ? ? ?操作系統(tǒng)賬號名稱

user.heme? ? ? ? ? ? ? ? ? 用戶的主目錄

user.dir? ? ? ? ? ? ? ? ? ? ???用戶的當(dāng)前工作目錄

Runtime類:每個Java應(yīng)用程序都有一個Runtime類實例、使應(yīng)用程序能夠與其運行的環(huán)境相連接。

Runtime?rt?=?Runtime.getRuntime();

System.out.println("處理器數(shù)量:"+rt.availableProcessors()+"個");

System.out.println("JVM總內(nèi)存數(shù):"+rt.totaIMemory()+"byte")

System.out.println("JVM空閑內(nèi)存數(shù):"rt.freeMemory()+"byte");

System.out.println("JVM可用最大內(nèi)存數(shù):"rt.maxMemory()+"byte);

在單獨的進程中執(zhí)行指定的字符串命令

rt.exec("notepad")

九、數(shù)字處理工具類

Biglnteger:可以讓超過lnteger范圍內(nèi)的數(shù)據(jù)進行運算

構(gòu)造方法:public Biglnteger(String val)

常用方法:

public?Biglnteger add(Biglnteger val)

public?Biglnteger subtact(Biglnteger val)

public?Biglnteger nultiply(Biglnteger val)

public?Biglnteger divide(Biglnteger val)

public?Biglnteger[] divideAndRemainder(Biglnteger val)

BigDecimal:由于在運算的時候,float類型和double很容易丟失精度,為了能精確的表示,計算浮點數(shù),Java提供了BigDecimal,不可變的,任意精度的有符號十進制。

構(gòu)造方法:public?BigDecimal?(String val)

常用方法:

public?BigDecimal?add(BigDecimal augend)

public?BigDecimal subtact(BigDecimal subtrahend)

public?BigDecimal multiply(BigDecimal multitlplicand)

public?BigDecimal divide(BigDecimal divisor)

DecimalFormat:java提供DecimalFormat類,幫你用最塊的速度將數(shù)字格式化為你需要的樣子.

十、MD5工具類

MD5的全稱是Message-Digest Algorithm5(信息摘要算法)

確定信息算法

MessageDigest?md5=MessageDigest.getlnstance("MD5");

JDK1.8新增Base64

String newstr =?Base64.getEncoder().encodeToString(md5.digestBytes("utf-8")));

1.8之前使用sun.misc.BASE64Encoder(此類沒有訪問權(quán)限,在rt.jar中添加訪問權(quán)限:sun/misc/*)

BASE64Encoder base64Encoder();

base64.encode(md5.digest(str.getBytes("uft-8)));

package com.common.tools;import java.security.MessageDigest;public abstract class MD5Tools{ public final static String MD5(String pwd) { //用于加密的字符 char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; try { //使用平臺的默認字符集將此 String 編碼為 byte序列,并將結(jié)果存儲到一個新的 byte數(shù)組中 byte[] btInput = pwd.getBytes(); //信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),并輸出固定長度的哈希值。 MessageDigest mdInst = MessageDigest.getInstance("MD5"); //MessageDigest對象通過使用 update方法處理數(shù)據(jù), 使用指定的byte數(shù)組更新摘要 mdInst.update(btInput); // 摘要更新之后,通過調(diào)用digest()執(zhí)行哈希計算,獲得密文 byte[] md = mdInst.digest(); // 把密文轉(zhuǎn)換成十六進制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { // i = 0 byte byte0 = md[i]; //95 str[k++] = md5String[byte0 >>> 4 & 0xf]; // 5 str[k++] = md5String[byte0 & 0xf]; // F } //返回經(jīng)過加密后的字符串 return new String(str); } catch (Exception e) { return null; } }}package com.common.tools;import java.security.MessageDigest;/** * MD5加密工具類 * */public abstract class MD5Tools{ public final static String MD5(String pwd) { //用于加密的字符 char md5String[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; try { //使用平臺的默認字符集將此 String 編碼為 byte序列,并將結(jié)果存儲到一個新的 byte數(shù)組中 byte[] btInput = pwd.getBytes(); //信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),并輸出固定長度的哈希值。 MessageDigest mdInst = MessageDigest.getInstance("MD5"); //MessageDigest對象通過使用 update方法處理數(shù)據(jù), 使用指定的byte數(shù)組更新摘要 mdInst.update(btInput); // 摘要更新之后,通過調(diào)用digest()執(zhí)行哈希計算,獲得密文 byte[] md = mdInst.digest(); // 把密文轉(zhuǎn)換成十六進制的字符串形式 int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { // i = 0 byte byte0 = md[i]; //95 str[k++] = md5String[byte0 >>> 4 & 0xf]; // 5 str[k++] = md5String[byte0 & 0xf]; // F } //返回經(jīng)過加密后的字符串 return new String(str); } catch (Exception e) { return null; } }}

十一、數(shù)據(jù)結(jié)構(gòu)之二叉樹實現(xiàn)

樹是一種重要的非線性數(shù)據(jù)結(jié)構(gòu),直觀地看,它是數(shù)據(jù)元素(在樹中稱為節(jié)點)按分支關(guān)系組織起來的結(jié)構(gòu)。二叉樹(Binary Tree)是每個節(jié)點最多有兩個子樹的有序樹。通常子樹被稱作“左子樹”和“右子樹”。

二叉樹的分類及特點:

(1)完全二叉樹

完全二叉樹是二叉樹的-一個分類,它的特點是每個節(jié)點的孩子節(jié)點的數(shù)量可以是0,1, 2個,除此之外它要求每層節(jié)點添加,必須是從左到右,不允許跳著添加。

(2)滿二叉樹(Full Binary tree)

滿二叉樹它的特點是每個節(jié)點的孩子節(jié)點要么沒有,要么就是兩個,不允許出現(xiàn)單個孩子的情況。

(3)二叉搜索樹(Ordered Binary Tree )

也稱二叉排序樹,這個是我們接觸的最多的一種結(jié)構(gòu), 它要求節(jié)點的左子樹小于該節(jié)點本身,右子樹大于該節(jié)點,每個節(jié)點都符合這樣的規(guī)則,對二叉搜索樹進行中序遍(左中右)歷就得到一個有序的序列

(4)均衡二叉樹( Balanced Binary Tree)

均衡二叉樹指的是-一個節(jié)點的左右子樹的高度差值不能大于1,均衡二叉樹一般都是在二叉搜索樹的基礎(chǔ)之上添加自動維持平衡的性質(zhì),這種樹的插入,搜索,刪除的綜合效率比較高。

(5)完美二叉樹(Perfect binary Tree)

完美二叉樹是理想中的一種二叉樹,這種樹的特點就是非常完美,每個節(jié)點都有兩個孩子節(jié)點,并且每層都被完全填充,完美二叉樹的葉子節(jié)點的高度都是一樣。

二叉搜索樹算法的排序規(guī)則:

1、選擇第一個元素作為根節(jié)點

2、之后如果元素大于根節(jié)點放在右子樹,如果元素小于根節(jié)點,則放在左子樹

3、最好按照中序遍歷的方式進行輸出,則可以得到排序的結(jié)果(左→根→右)

先序遍歷:根左右

后序遍歷:左右根

如:1、2、3、4、5、6、7、8、9、10

主類:

package com.booy1;public class BinaryTreeTest { public static void main(String[] args) { BinaryTree bt = new BinaryTree(); bt.add(6); bt.add(5); bt.add(9); bt.add(8); bt.add(1); bt.add(7); bt.add(2); bt.print(); }}

BinaryTree 類:

package com.booy1;public class BinaryTree { private Node root; //添加節(jié)點 public void add(int data){ if(root==null) { root = new Node(data); }else { root.addNode(data); } } //遍歷節(jié)點 public void print(){ root.printNode(); } private class Node{ private int data; private Node left; private Node right; public Node(int data ){ this.data = data; } //添加節(jié)點 public void addNode(int data){ if(this.data>data) { if(this.left==null) { this.left = new Node(data); }else { this.left.addNode(data); } }else{ if(this.right==null) { this.right = new Node(data); }else { this.right.addNode(data); } } } //遍歷節(jié)點 public void printNode(){ if(this.left != null) { this.left.printNode(); } System.out.print(this.data+">"); if(this.right != null) { this.right.printNode(); } } } }/**運行結(jié)果:1>2>5>6>7>8>9>*/

十二、JDK1.8新特性-Lambda表達式

1、Lambda表達式(也稱為閉包)是整個Java8發(fā)行版中最受期待的Java語言層面上的改變,Lambda允許把函數(shù)作為一個方法的參數(shù)(函數(shù)作為參數(shù)傳遞進方法中)或者把代碼看成數(shù)據(jù)。Lambda表達式用于簡化Java中接口式的匿名內(nèi)部類。被稱為函數(shù)式接口的概念。函數(shù)式接口就是一個具有一個方法的普通接口,像這樣的接口可以被隱式轉(zhuǎn)換為Lambda表達式。

語法:

(參數(shù)1,參數(shù)2....)->{......}

? (1)沒有參數(shù)時使用Lambda表達式

(2)帶參數(shù)時使用Lambda表達式

(3)代碼塊中只有一句代碼時使用Lambda表達式

(4)代碼塊中有多句代碼時使用Lambda表達式

(5)有返回值的代碼塊

(6)參數(shù)中使用final關(guān)鍵字

import java.sql.SQLOutput;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;?//讓代碼更加簡潔,不會單獨生成class文件public class LambdaTest { /** * lambda呈現(xiàn)入口 */ public void exeEntry(String message,HandlerArg handlerArg){ handlerArg.handleEntry(message); } /**??*?聲明一個接口(只能有一個抽象方法接口),以lambda的語法來表達該接口的方法調(diào)用 */ public interface HandlerArg{ public void handleEntry(String message); } /** * 聲明一個接口,以lambda的語法來表達該接口的方法調(diào)用 */ public interface HandlerArgs{ public int handleEntry(String message1,String message2); } /** * lambda呈現(xiàn)入口 * */ public int exeEntry(String message1,String message2,HandlerArgs handlerArgs){ return handlerArgs.handleEntry(message1, message2); } public static void main(String[] args) { LambdaTest lambdaTest = new LambdaTest(); //一、 //1."msg"為傳入HandlerArg接口的handleEntry方法所需參數(shù),在"->前面";而后面 直接執(zhí)行方法所要做的事; //2.參數(shù)可不聲明參數(shù)類型; //3.單個參數(shù)不需要被"()"包圍起來; //lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> System.out.println(msg)); //二、 //也可以預(yù)先實現(xiàn)接口,再將接口作為參數(shù)傳遞 //HandlerArg handlerArg = msg -> System.out.println(msg); //lambdaTest.exeEntry("the hardest thing is to feel good everyday",handlerArg); //三、 //多條語句,則直接作為一個函數(shù)來使用,其實這里就類似于javaScript的方法傳遞了 //lambdaTest.exeEntry("the hardest thing is to feel good everyday",msg -> { // String strPrefix = "chengxp said:"; // System.out.println(strPrefix + msg); //}); //四、 //多個參數(shù),并處理后返回結(jié)果// int strsLength = lambdaTest.exeEntry("sdf5745","fgdg", (msg1,msg2) -> {return msg1.length() + msg2.length();});// System.out.println("兩個字符串長度之和為:" + strsLength); //五、 //例如集合框架中用的比較多的排序,可以這么寫 List strs = new ArrayList<>(); strs.add("bb"); strs.add("cc"); strs.add("dd"); strs.add("aa"); //以前是這么寫的 Collections.sort(strs, new Comparator() { public int compare(String o1, String o2) { return o1.compareTo(o2); } }); //這里也是1.8的遍歷語法。不過試了一下,效率沒有普通的for循環(huán)效率高。 strs.forEach(str -> System.out.println(str)); //用lambda寫 Collections.sort(strs,(s1,s2) -> s1.compareTo(s2)); strs.forEach(str -> System.out.println(str)); }}

Java 8 新增了接口的靜態(tài)方法和默認方法。即接口可以有實現(xiàn)方法,而且不需要實現(xiàn)類去實現(xiàn)其方法,通過static和default關(guān)鍵字實現(xiàn)

? ? 靜態(tài)方法和默認方法的引進,解決了接口一旦發(fā)生修改將與現(xiàn)有的實現(xiàn)不兼容的問題

? ?默認方法與靜態(tài)方法并不影響函數(shù)接口的契約,可以任意使用

二、示例

1、接口

package com.xl.infc; public interface Employee { /** * 抽象方法 實現(xiàn)類必須重寫,必須通過實現(xiàn)類的實例來調(diào)用 */ public void say(); /** * 靜態(tài)方法 只能通過接口的接口名來調(diào)用,實現(xiàn)類可以互不沖突的定義相同的方法并通過實現(xiàn)類的類名來調(diào)用 */ public static void work() { System.out.println("干活"); } /** * 默認方法 必須通過實現(xiàn)類的實例來調(diào)用,可以重寫,但不能再加default關(guān)鍵字,且將覆蓋接口中的實現(xiàn) */ public default void role() { System.out.println("員工"); }}

2、實現(xiàn)

package com.xl.infc; public class Programmer implements Employee { @Override public void say() { System.out.println("上班"); } /** * 實現(xiàn)類可以定義的和接口相同的靜態(tài)方法,通過類名來調(diào)用 */ public static void work() { System.out.println("擼代碼"); } /** * 重寫接口的默認方法,不能再用default關(guān)鍵字修飾,且將覆蓋接口中的實現(xiàn),且必須通過實例來調(diào)用 */ @Override public void role() { System.out.println("程序員"); } public static void main(String[] args) { Employee.work(); Programmer.work(); Programmer p = new Programmer(); p.say(); p.role(); } }

總結(jié)

以上是生活随笔為你收集整理的stringbuffer常用方法_第八讲:常用类库API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。