最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java System類從基礎(chǔ)到實(shí)戰(zhàn)的進(jìn)階指南

 更新時(shí)間:2025年07月30日 11:11:01   作者:生當(dāng)鼎食死封侯  
Java System類是Java與操作系統(tǒng)交互的核心,提供流操作、數(shù)組復(fù)制、時(shí)間處理等基礎(chǔ)功能,JDK8優(yōu)化性能并引入高精度時(shí)間API,實(shí)戰(zhàn)中需注意避免濫用gc()和currentTimeMillis(),本文將從版本演進(jìn)到實(shí)戰(zhàn)應(yīng)用,全面剖析System類的奧秘,感興趣的朋友一起看看吧

Java System類全解析:從基礎(chǔ)到實(shí)戰(zhàn)的進(jìn)階指南

在Java開發(fā)中,有一個(gè)類幾乎貫穿了我們編程生涯的始終——java.lang.System。這個(gè)看似簡(jiǎn)單的類,卻隱藏著與操作系統(tǒng)交互的核心能力。無(wú)論是打印日志、獲取時(shí)間戳,還是操作數(shù)組、控制虛擬機(jī),System類都扮演著不可替代的角色。本文將從版本演進(jìn)到實(shí)戰(zhàn)應(yīng)用,全面剖析System類的奧秘。

一、System類的"前世今生":版本演進(jìn)中的功能迭代

System類自JDK 1.0誕生以來(lái),就成為了Java與底層系統(tǒng)交互的"橋梁"。隨著Java版本的迭代,其功能不斷完善,我們可以通過(guò)關(guān)鍵版本的變化,看清它的進(jìn)化軌跡:

1. JDK 1.0:奠定基礎(chǔ)功能

作為最初版本,已經(jīng)包含了三大核心能力:

  • 標(biāo)準(zhǔn)流操作:in/out/err三大輸入輸出流
  • 系統(tǒng)控制:exit()終止虛擬機(jī)、gc()觸發(fā)垃圾回收
  • 時(shí)間獲?。?code>currentTimeMillis()提供毫秒級(jí)時(shí)間戳

這些功能構(gòu)成了System類的基本骨架,至今仍在廣泛使用。

2. JDK 1.2:強(qiáng)化對(duì)象標(biāo)識(shí)

新增identityHashCode(Object x)方法,這個(gè)方法有個(gè)特殊之處——它返回的哈希碼基于對(duì)象的內(nèi)存地址,不受Object.hashCode()重寫的影響。這在需要嚴(yán)格區(qū)分對(duì)象身份的場(chǎng)景(如集合去重、緩存key設(shè)計(jì))中非常有用。

3. JDK 5:泛型適配與性能優(yōu)化

雖然沒(méi)有新增核心方法,但對(duì)系統(tǒng)屬性操作相關(guān)方法進(jìn)行了泛型適配,同時(shí)優(yōu)化了arraycopy()的參數(shù)校驗(yàn)邏輯,減少了運(yùn)行時(shí)異常的發(fā)生概率。

4. JDK 7:提升數(shù)組操作效率

對(duì)arraycopy()的底層實(shí)現(xiàn)進(jìn)行了重大優(yōu)化,通過(guò)直接操作內(nèi)存塊的方式,將跨數(shù)組類型復(fù)制的效率提升了30%以上。同時(shí)增強(qiáng)了系統(tǒng)屬性的安全校驗(yàn),防止惡意代碼通過(guò)修改系統(tǒng)屬性破壞程序運(yùn)行環(huán)境。

5. JDK 8:高精度時(shí)間支持

在保持核心API穩(wěn)定的前提下,重點(diǎn)優(yōu)化了nanoTime()的精度,使其真正支持納秒級(jí)時(shí)間間隔測(cè)量。這對(duì)并發(fā)編程中的性能基準(zhǔn)測(cè)試(如線程切換耗時(shí)、鎖競(jìng)爭(zhēng)代價(jià))提供了關(guān)鍵支持。

6. JDK 9+:模塊化與便捷方法

隨著Java模塊化系統(tǒng)的引入,System類的部分功能受到java.base模塊的權(quán)限控制。最顯著的變化是新增lineSeparator()方法,直接返回系統(tǒng)默認(rèn)換行符(Windows為\r\n,Linux為\n),替代了此前通過(guò)getProperty("line.separator")的間接獲取方式。

二、JDK8 System類深度剖析:從源碼看本質(zhì)

JDK8作為目前企業(yè)級(jí)開發(fā)中使用最廣泛的版本,其System類的實(shí)現(xiàn)既保留了兼容性,又具備足夠的功能完整性。我們通過(guò)源碼解析,從屬性到方法逐一拆解。

1. 三大靜態(tài)屬性:標(biāo)準(zhǔn)流的奧秘

System類的三個(gè)靜態(tài)屬性是我們最早接觸的成員,但很多開發(fā)者未必真正理解其底層機(jī)制:

public final static InputStream in = null;
public final static PrintStream out = null;
public final static PrintStream err = null;
表面與實(shí)際的反差

源碼中初始值為null,這是因?yàn)樗鼈兊膶?shí)際初始化由JVM在啟動(dòng)時(shí)完成——通過(guò)本地方法initializeSystemClass()綁定到系統(tǒng)的標(biāo)準(zhǔn)輸入(鍵盤)、標(biāo)準(zhǔn)輸出(控制臺(tái))和標(biāo)準(zhǔn)錯(cuò)誤流。

特性與應(yīng)用場(chǎng)景
  • in:默認(rèn)關(guān)聯(lián)鍵盤輸入,常用于控制臺(tái)程序的用戶交互(配合Scanner使用)
  • out:默認(rèn)輸出到控制臺(tái),具有緩沖機(jī)制,適合常規(guī)日志打印
  • err:無(wú)緩沖機(jī)制,直接輸出,優(yōu)先級(jí)高于out,專門用于錯(cuò)誤信息輸出
實(shí)戰(zhàn)技巧:重定向流

我們可以通過(guò)setIn()/setOut()/setErr()方法重定向這些流,例如將日志輸出到文件:

// 將System.out重定向到文件
try (FileOutputStream fos = new FileOutputStream("app.log");
     PrintStream ps = new PrintStream(fos)) {
    System.setOut(ps);
    System.out.println("這行日志會(huì)寫入文件");
} catch (IOException e) {
    e.printStackTrace();
}

2. 核心方法分類詳解

System類的方法多為native修飾(底層由C/C++實(shí)現(xiàn)),這保證了與系統(tǒng)交互的高效性。我們按功能分類解析:

(1)系統(tǒng)屬性操作:線程安全與性能陷阱

系統(tǒng)屬性是JVM存儲(chǔ)配置信息的鍵值對(duì)集合,System類提供了完整的操作方法:

// 獲取指定屬性值
public static String getProperty(String key)
// 獲取所有系統(tǒng)屬性
public static Properties getProperties()
// 設(shè)置系統(tǒng)屬性(需權(quán)限)
public static String setProperty(String key, String value)

線程安全的雙重性

  • getProperties()方法本身是線程安全的,調(diào)用時(shí)會(huì)通過(guò)SecurityManager檢查權(quán)限
  • 但其返回的Properties對(duì)象在JDK8中繼承自Hashtable,所有方法都用synchronized修飾,導(dǎo)致高并發(fā)下的性能瓶頸

當(dāng)多個(gè)線程頻繁調(diào)用getProperty()時(shí),會(huì)競(jìng)爭(zhēng)同一個(gè)鎖對(duì)象,導(dǎo)致大量線程進(jìn)入BLOCKED狀態(tài)。這也是為什么在高并發(fā)場(chǎng)景中,推薦啟動(dòng)時(shí)緩存系統(tǒng)屬性

// 優(yōu)化方案:初始化時(shí)緩存系統(tǒng)屬性
public class AppConfig {
    private static final String JAVA_VERSION;
    private static final String OS_NAME;
    static {
        Properties props = System.getProperties();
        JAVA_VERSION = props.getProperty("java.version");
        OS_NAME = props.getProperty("os.name");
    }
    // 提供訪問(wèn)方法
    public static String getJavaVersion() {
        return JAVA_VERSION;
    }
}

常用系統(tǒng)屬性表

屬性鍵含義示例值(JDK8)
java.versionJava版本1.8.0_301
os.name操作系統(tǒng)名稱Windows 10
user.dir當(dāng)前工作目錄D:\projects\demo
user.name當(dāng)前用戶名Administrator
java.homeJRE安裝目錄C:\Program Files\Java\jre1.8.0_301
(2)數(shù)組復(fù)制:arraycopy()的高效秘訣
public static native void arraycopy(
    Object src,  // 源數(shù)組
    int srcPos,  // 源數(shù)組起始索引
    Object dest, // 目標(biāo)數(shù)組
    int destPos, // 目標(biāo)數(shù)組起始索引
    int length   // 復(fù)制長(zhǎng)度
);

這個(gè)方法是Java中數(shù)組復(fù)制的"性能王者",比for循環(huán)快數(shù)倍,其底層實(shí)現(xiàn)暗藏玄機(jī):

原生實(shí)現(xiàn)原理

  • native關(guān)鍵字標(biāo)記,由JVM內(nèi)部的C/C++代碼實(shí)現(xiàn)
  • 直接調(diào)用操作系統(tǒng)的內(nèi)存復(fù)制函數(shù)(如C語(yǔ)言的memmove),跳過(guò)Java層循環(huán)開銷
  • 在HotSpot虛擬機(jī)中,實(shí)現(xiàn)入口位于jvm.cpp,復(fù)制邏輯分散在copy.cpp,會(huì)根據(jù)數(shù)組類型(int/long/byte等)選擇最優(yōu)函數(shù)

JIT內(nèi)聯(lián)優(yōu)化
JDK8中arraycopy()@IntrinsicCandidate注解標(biāo)記,JIT編譯器會(huì)將其替換為平臺(tái)相關(guān)的機(jī)器碼,甚至省去JNI調(diào)用開銷。例如在x86架構(gòu)上,可能直接生成REP MOVSB匯編指令,實(shí)現(xiàn)高速內(nèi)存塊復(fù)制。

Arrays.copyOf()的關(guān)系:
后者本質(zhì)是arraycopy()的封裝,自動(dòng)創(chuàng)建新數(shù)組并計(jì)算長(zhǎng)度:

// Arrays.copyOf()的簡(jiǎn)化實(shí)現(xiàn)
public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) {
    T[] copy = (T[]) Array.newInstance(newType.getComponentType(), newLength);
    System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));
    return copy;
}

使用注意事項(xiàng)

  • 支持內(nèi)存重疊處理:當(dāng)源數(shù)組和目標(biāo)數(shù)組為同一對(duì)象且復(fù)制區(qū)域重疊時(shí),能保證結(jié)果正確(類似memmove的行為)
  • 批量操作更高效:合并多個(gè)小復(fù)制請(qǐng)求為一次調(diào)用,減少方法調(diào)用開銷

示例

// 數(shù)組擴(kuò)容
int[] original = {1, 2, 3};
int[] expanded = new int[5];
System.arraycopy(original, 0, expanded, 0, original.length);
// 結(jié)果:expanded = [1,2,3,0,0]
(3)時(shí)間操作:毫秒與納秒的區(qū)別
// 返回當(dāng)前時(shí)間戳(毫秒,從1970-01-01 UTC開始)
public static native long currentTimeMillis();
// 返回虛擬機(jī)啟動(dòng)后的納秒數(shù)(不關(guān)聯(lián)實(shí)際時(shí)間)
public static native long nanoTime();

這兩個(gè)方法看似相似,實(shí)則有本質(zhì)區(qū)別:

currentTimeMillis()的特性:

  • 反映"墻鐘時(shí)間",用于記錄事件發(fā)生時(shí)間(如日志時(shí)間戳)
  • JDK8中精度提升至1毫秒(JDK7為10-15毫秒),但仍依賴操作系統(tǒng)
  • 存在非單調(diào)性:系統(tǒng)時(shí)間調(diào)整(如NTP同步)可能導(dǎo)致時(shí)間倒退

nanoTime()的特性:

  • 高精度:理論支持納秒級(jí),實(shí)際精度取決于硬件(通??蛇_(dá)微秒級(jí))
  • 單調(diào)性:不受系統(tǒng)時(shí)間影響,后一次調(diào)用值必不小于前一次
  • 適合測(cè)量時(shí)間間隔(如代碼執(zhí)行耗時(shí))

JDK8的現(xiàn)代替代方案
Java 8引入的java.time API提供了更健壯的時(shí)間處理:

  • Instant.now():納秒級(jí)精度的時(shí)間點(diǎn),替代currentTimeMillis()
  • Clock.systemUTC().millis():與currentTimeMillis()功能相同但更清晰

最佳實(shí)踐

// 記錄事件時(shí)間戳(用現(xiàn)代API)
Instant eventTime = Instant.now();
System.out.println("事件發(fā)生時(shí)間:" + eventTime);
// 測(cè)量代碼執(zhí)行時(shí)間(必須用nanoTime)
long start = System.nanoTime();
processData();
long end = System.nanoTime();
double costMs = (end - start) / 1_000_000.0; // 轉(zhuǎn)換為毫秒
System.out.printf("執(zhí)行耗時(shí):%.2f毫秒%n", costMs);
(4)虛擬機(jī)控制:exit()與gc()的正確使用
// 終止虛擬機(jī),status=0表示正常退出
public static void exit(int status) {
    Runtime.getRuntime().exit(status);
}
// 建議JVM執(zhí)行垃圾回收(僅為建議,不保證執(zhí)行)
public static void gc() {
    Runtime.getRuntime().gc();
}

exit()的強(qiáng)硬性:

  • 調(diào)用后虛擬機(jī)立即終止,finally塊可能不執(zhí)行
  • 狀態(tài)碼遵循慣例:0表示正常退出,非0表示異常(可被腳本捕獲)
// 程序正常結(jié)束
if (taskCompleted) {
    System.exit(0);
} else {
    System.exit(1); // 異常結(jié)束
}

gc()的誤區(qū):

  • 僅為"建議",JVM可忽略(HotSpot中默認(rèn)會(huì)執(zhí)行,但不確定時(shí)機(jī))
  • 生產(chǎn)環(huán)境中不建議顯式調(diào)用:會(huì)打破JVM的自動(dòng)回收策略,可能導(dǎo)致長(zhǎng)時(shí)間"Stop-the-World"暫停
(5)對(duì)象標(biāo)識(shí):identityHashCode()的特殊用途
public static native int identityHashCode(Object x);

返回基于對(duì)象內(nèi)存地址的哈希碼,不受hashCode()重寫影響。在需要區(qū)分對(duì)象實(shí)例時(shí)非常有用:

class Person {
    private String name;
    public Person(String name) { this.name = name; }
    // 重寫hashCode
    @Override
    public int hashCode() {
        return name.hashCode();
    }
}
public class Test {
    public static void main(String[] args) {
        Person p1 = new Person("張三");
        Person p2 = new Person("張三");
        // 重寫的hashCode可能相同
        System.out.println(p1.hashCode() == p2.hashCode()); // true
        // 身份哈希碼不同(不同實(shí)例)
        System.out.println(System.identityHashCode(p1) == System.identityHashCode(p2)); // false
    }
}
(6)本地庫(kù)加載:load()與loadLibrary()
// 加載指定路徑的本地庫(kù)(.dll/.so)
public static native void load(String filename);
// 從系統(tǒng)庫(kù)路徑加載本地庫(kù)
public static native void loadLibrary(String libname);

用于加載原生庫(kù),實(shí)現(xiàn)Java與C/C++交互。例如加載Windows下的mydll.dll

// 使用絕對(duì)路徑加載
System.load("C:\\libs\\mydll.dll");
// 從系統(tǒng)庫(kù)路徑加載(需將庫(kù)文件放入java.library.path指定的目錄)
System.loadLibrary("mydll"); // 自動(dòng)匹配系統(tǒng)后綴(.dll/.so)

三、實(shí)戰(zhàn)案例:System類的典型應(yīng)用場(chǎng)景

1. 實(shí)現(xiàn)高效的數(shù)組工具類

基于arraycopy()封裝高性能數(shù)組操作:

public class ArrayUtils {
    // 數(shù)組擴(kuò)容
    public static int[] expand(int[] array, int newLength) {
        if (newLength <= array.length) {
            return array;
        }
        int[] newArray = new int[newLength];
        System.arraycopy(array, 0, newArray, 0, array.length);
        return newArray;
    }
    // 合并兩個(gè)數(shù)組
    public static String[] merge(String[] a, String[] b) {
        String[] result = new String[a.length + b.length];
        System.arraycopy(a, 0, result, 0, a.length);
        System.arraycopy(b, 0, result, a.length, b.length);
        return result;
    }
}

2. 生成唯一訂單號(hào)

結(jié)合currentTimeMillis()identityHashCode()

public class OrderUtils {
    public static String generateOrderNo() {
        // 時(shí)間戳(13位)+ 隨機(jī)數(shù)(3位)+ 進(jìn)程標(biāo)識(shí)(4位)
        long timestamp = System.currentTimeMillis();
        int random = (int) (Math.random() * 1000);
        int pidHash = System.identityHashCode(Thread.currentThread()) % 10000;
        return String.format("%d%03d%04d", timestamp, random, pidHash);
    }
}

3. 性能基準(zhǔn)測(cè)試工具

使用nanoTime()實(shí)現(xiàn)代碼性能測(cè)試:

public class PerformanceTester {
    // 測(cè)試方法執(zhí)行時(shí)間
    public static void test(Runnable task) {
        long start = System.nanoTime();
        task.run();
        long end = System.nanoTime();
        double costMs = (end - start) / 1_000_000.0;
        System.out.printf("執(zhí)行耗時(shí):%.2f毫秒%n", costMs);
    }
    // 使用示例
    public static void main(String[] args) {
        test(() -> {
            // 待測(cè)試的代碼
            for (int i = 0; i < 1000000; i++) {
                Math.sqrt(i);
            }
        });
    }
}

四、避坑指南:System類使用的常見誤區(qū)

  • 混淆outerr的輸出順序
  • 由于out有緩沖而err無(wú)緩沖,同時(shí)使用時(shí)可能出現(xiàn)輸出順序錯(cuò)亂。建議錯(cuò)誤信息統(tǒng)一用err,正常輸出用out,避免混合使用。
  • 濫用gc()方法
    • 手動(dòng)調(diào)用gc()不僅不能保證垃圾回收,還可能干擾JVM的優(yōu)化策略。只有在明確知道內(nèi)存緊張(如大型對(duì)象處理后)時(shí)才考慮使用。
  • currentTimeMillis()做高精度計(jì)時(shí)
    • 該方法受系統(tǒng)時(shí)間調(diào)整影響,可能出現(xiàn)時(shí)間"回退"現(xiàn)象。測(cè)量代碼執(zhí)行時(shí)間應(yīng)優(yōu)先使用nanoTime()。
  • 忽略arraycopy()的類型檢查
    • 嘗試復(fù)制不同類型的數(shù)組(如int[]String[])會(huì)拋出ArrayStoreException,使用前需確保類型兼容。
  • 高并發(fā)下頻繁調(diào)用getProperty()
    • Hashtable的同步特性,會(huì)導(dǎo)致鎖競(jìng)爭(zhēng)。應(yīng)在應(yīng)用啟動(dòng)時(shí)緩存所需屬性。

總結(jié)

System類作為Java與底層系統(tǒng)交互的核心接口,其功能遠(yuǎn)比表面看起來(lái)更豐富。從JDK1.0到JDK8的演進(jìn)歷程,我們看到了Java團(tuán)隊(duì)對(duì)系統(tǒng)交互能力的持續(xù)優(yōu)化。

在JDK8中,arraycopy()憑借原生實(shí)現(xiàn)和JIT優(yōu)化成為數(shù)組復(fù)制的性能標(biāo)桿;getProperties()雖線程安全但存在并發(fā)瓶頸,需通過(guò)緩存規(guī)避;currentTimeMillis()nanoTime()的差異化設(shè)計(jì),提醒我們根據(jù)場(chǎng)景選擇合適的時(shí)間API。

理解這些細(xì)節(jié),不僅能幫助我們寫出更高效的代碼,更能深入領(lǐng)會(huì)Java"平臺(tái)無(wú)關(guān)性"背后的實(shí)現(xiàn)智慧。在實(shí)際開發(fā)中,既要善用System類的底層能力,也要學(xué)會(huì)結(jié)合java.time等現(xiàn)代API,在兼容性與先進(jìn)性之間找到平衡。

希望本文能帶你真正走進(jìn)System類的世界,讓這個(gè)"老朋友"在你的開發(fā)工作中發(fā)揮更大的價(jià)值。如果有任何疑問(wèn)或補(bǔ)充,歡迎在評(píng)論區(qū)交流討論!

到此這篇關(guān)于Java System類從基礎(chǔ)到實(shí)戰(zhàn)的進(jìn)階指南的文章就介紹到這了,更多相關(guān)Java System類全解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Swagger時(shí)Controller中api接口顯示不全的問(wèn)題分析及解決

    使用Swagger時(shí)Controller中api接口顯示不全的問(wèn)題分析及解決

    swagger是一個(gè)十分好用的api接口管理、測(cè)試框架,現(xiàn)在越來(lái)越多的人使用這個(gè)做接口的測(cè)試和管理,但經(jīng)常遇到Controller中的api接口顯示不全的問(wèn)題,所以本文給大家詳細(xì)分析了問(wèn)題以及解決方法,需要的朋友可以參考下
    2024-02-02
  • SpringBoot集成內(nèi)存數(shù)據(jù)庫(kù)Sqlite的實(shí)踐

    SpringBoot集成內(nèi)存數(shù)據(jù)庫(kù)Sqlite的實(shí)踐

    sqlite這樣的內(nèi)存數(shù)據(jù)庫(kù),小巧可愛,做小型服務(wù)端演示程序,非常好用,本文主要介紹了SpringBoot集成Sqlite,具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-09-09
  • Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    Java二維碼登錄流程實(shí)現(xiàn)代碼(包含短地址生成,含部分代碼)

    近年來(lái),二維碼的使用越來(lái)越風(fēng)生水起,本篇文章主要介紹了Java二維碼登錄流程實(shí)現(xiàn)代碼,其中包含短地址生成,有興趣的可以了解一下。
    2016-12-12
  • Java接口回調(diào)的本質(zhì)詳解

    Java接口回調(diào)的本質(zhì)詳解

    大家好,本篇文章主要講的是Java接口回調(diào)的本質(zhì)詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • MyBatis中基于別名typeAliases的設(shè)置

    MyBatis中基于別名typeAliases的設(shè)置

    這篇文章主要介紹了MyBatis中基于別名typeAliases的設(shè)置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的全過(guò)程

    SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的全過(guò)程

    最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,主要是一些分類入庫(kù)以及記錄日志等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 使用SpringBoot2.x配置靜態(tài)文件緩存

    使用SpringBoot2.x配置靜態(tài)文件緩存

    這篇文章主要介紹了使用SpringBoot2.x配置靜態(tài)文件緩存的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • pf4j spring 集成幾個(gè)問(wèn)題記錄

    pf4j spring 集成幾個(gè)問(wèn)題記錄

    文章介紹了在使用pf4j和Spring框架時(shí)遇到的一些問(wèn)題及其解決方法,包括類加載器沖突、Bean注入問(wèn)題、父子Spring上下文的使用以及擴(kuò)展類的處理,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • Java線程(Thread)四種停止方式代碼實(shí)例

    Java線程(Thread)四種停止方式代碼實(shí)例

    這篇文章主要介紹了Java線程(Thread)四種停止方式代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • JavaWeb中web.xml初始化加載順序詳解

    JavaWeb中web.xml初始化加載順序詳解

    本篇文章主要介紹了JavaWeb中web.xml初始化加載順序詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05

最新評(píng)論

寿宁县| 滕州市| 昌邑市| 遂溪县| 外汇| 石屏县| 仁怀市| 牟定县| 图木舒克市| 阳江市| 邯郸县| 正宁县| 奇台县| 丰都县| 东海县| 巢湖市| 九江县| 左权县| 三原县| 清镇市| 朔州市| 灵台县| 璧山县| 奈曼旗| 教育| 来宾市| 镶黄旗| 阳城县| 都安| 西华县| 张掖市| 荔波县| 巴林左旗| 罗定市| 武安市| 民权县| 茶陵县| 同心县| 分宜县| 镶黄旗| 彩票|