基礎(chǔ)學(xué)習(xí)筆記(一)-java

1.方法可變參數(shù):

int ... data (JDK1.5以后提供,相當(dāng)于數(shù)組的變相應(yīng)用)

int sum(int ... data){}
sum(1,2,3);
sum(new int [] {1,2,3});

\color{rgb(0,256,0)}{方法中可變參數(shù)只能定義在最后,并且只能定義一個}

2.類在java中是一種引用數(shù)據(jù)類型;

String類的實現(xiàn)都是通過數(shù)組的形式進行保存的,因此對于String內(nèi)部的數(shù)據(jù)一定是無法改變的;另外在jdk1.8以前,使用char數(shù)組來保存,而jdk1.9以后都使用byte數(shù)組來保存
String類的比較應(yīng)該使用equalshttps://blog.csdn.net/barryhappy/article/details/6082823
String.intern()可以將對象手動入池,但麻煩,因此直接賦值比構(gòu)造方法更節(jié)省空間。

3.override(覆寫)和overloading(重載)
區(qū)別 overloading(重載) override(覆寫)
定義 方法名稱相同,參數(shù)類型和個數(shù)不同 方法名稱、參數(shù)類型及個數(shù)、返回值類型全部相同
權(quán)限 無權(quán)限要求 被子類覆寫的方法不能擁有比父類更嚴格的訪問控制權(quán)限
范圍 發(fā)生在同一個類中 發(fā)生在繼承關(guān)系類中

構(gòu)造方法不能被繼承,因此不能被覆寫,但可以被重載;
父類方法定義private時,子類無法覆寫該方法

3.this和super

(1)this表示先從本類查找所需要的屬性或者方法,弱國本類不存在則查找父類定義,而super表示不查找子類,直接查找父類;
(2)this()調(diào)用的是本類構(gòu)造,super調(diào)用的是父類構(gòu)造,而且都必須放在構(gòu)造方法的首行,所以不能同時出現(xiàn);
(3)this可以表示當(dāng)前對象;

4.volatile和synchronized的區(qū)別

(1)volatile主要使用于屬性上,而synchronized應(yīng)用于方法和代碼塊上;
(2)volatile無法描述同步的處理,只是一種直接內(nèi)存的處理,避免了副本的操作,節(jié)約了復(fù)制變量副本和同步的時間,而synchronized是實現(xiàn)同步操作的關(guān)鍵字(同步的時候使用volatile的同時還是要使用synchronized)。

5.String和StringBuffer、StringBuilder

String類是字符串的首選類型,其最大特點是內(nèi)容不允許修改,StringBuffer和StringBuilder類的內(nèi)容允許修改
在開發(fā)中,大部分情況都優(yōu)先考慮String類,只有在頻繁修改字符串的操作上才會考慮使用StringBuffer和StringBuilder類。

(1)StringBuffer是線程安全的

StringBuffer是在jdk1.0版本中提供的,但是jdk1.5之后又提供了StringBuilder類,兩個類的唯一區(qū)別在于:StringBuffer類中的方法使用了synchronized關(guān)鍵字定義,適合多線程并發(fā)訪問時的同步操作,因此屬于線程安全的方法;而StringBuilder類沒有這樣做,屬于非線程安全的方法

(2)字符串靜態(tài)常量池

String str="hello "+"java"+" world";

這句程序的本質(zhì)操作實際上是由StringBuffer來完成的,其中所有的“+”操作都變成“append”

StringBuffer buf = new StringBuffer(); 
buf.append("hello ").append("java")+.append(" world");

(這些可以從java字節(jié)碼中看出)
(3)StringBuilder類實現(xiàn)了一些Strin類沒有的方法,比如插入數(shù)據(jù)insert、刪除數(shù)據(jù)delete等,還有最具特點的方法字符串反轉(zhuǎn)reverse

6.Runtime類

Runtime類用來描述運行狀態(tài)的信息對象,每一個JVM進程都會提供唯一的一個Runtime類實例化對象,因此在Runtime類中默認將其構(gòu)造方法封裝(單例設(shè)計模式),然后使用getRuntime()方法(static方法)來獲取實例化對象。
public static Runtime getRuntime()
常用的幾個方法:
(1)獲取本機的CPU處理器數(shù)量
public int availableProcessors()
(2)獲取主機的內(nèi)存信息
public long maxMemory() //最大可用內(nèi)存(本機內(nèi)存的1/4)
public long totalMemory() //可用內(nèi)存(本機內(nèi)存的1/64)
public long freeMemory() //空閑內(nèi)存
(返回數(shù)據(jù)類型為long,一般在表示文件大小和日期時間上會使用long型)
另外,對于java的垃圾回收機制,系統(tǒng)的GC線程可以不定期自動處理,也可以使用Runtime類的gc()方法手動內(nèi)存釋放。
public void gc()

7.System類

(1)數(shù)據(jù)拷貝:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
(2)獲取當(dāng)前的日期時間數(shù)值:
public static long currentTimeMillis()
(3)垃圾回收:
public static void gc()
等價于調(diào)用Runtime.getRuntime().gc()

8.AutoCloseable接口

AutoCloseable接口的主要功能是結(jié)合異常處理結(jié)構(gòu)在資源操作完成后實現(xiàn)自動釋放功能

public interface AutoCloseable {
    public void close() throws Exception;
}

//使用
interface IMessage implements AutoCloseable {
    public void send();
}
class NetMessage implements IMessage{
    ...
    public void close() throws Exception{...}
}
...
//main方法里面
try (IMessage nm = new NetMessage("...")){
    ...
} catch (Exception e){
    e.printStackTrace();
}

在使用try語句的時候,其后面括號中的語句獲取實例化對象,然后再執(zhí)行完try語句之后自動調(diào)用close()方法

9.Cleaner類

傳統(tǒng)的對象回收前處理操作依靠finalize()方法,而從JDK1.9開始提供了新的替代者:java.lang.ref.Cleaner類,并且基于AutoCloseable接口實現(xiàn)資源釋放。而且是以清理線程的形式來操作的。
https://docs.oracle.com/en/java/javase/13/docs/api/java.base/java/lang/ref/Cleaner.html#method.summary

 public class CleaningExample implements AutoCloseable {
        // A cleaner, preferably one shared within a library
        private static final Cleaner cleaner = <cleaner>;

        static class State implements Runnable {

            State(...) {
                // initialize State needed for cleaning action
            }

            public void run() {
                // cleanup action accessing State, executed at most once
            }
        }

        private final State state;
        private final Cleaner.Cleanable cleanable;

        public CleaningExample() {
            this.state = new State(...);
            this.cleanable = cleaner.register(this, state);
        }

        public void close() {
            cleanable.clean();
        }
    }
10.訪問控制權(quán)限
范圍 private default protected public
同一包的同一類 1 1 1 1
同一包的不同類 1 1 1
不同包的子類 1 1
不同包的非子類 1
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容