亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁(yè) Java Java入門 深入理解static關(guān)鍵字

深入理解static關(guān)鍵字

Nov 27, 2019 pm 04:15 PM
java static

深入理解static關(guān)鍵字

在開始講static之前,我想讓各位看一段有趣的程式碼:

public class Test {
     
    static{
        System.out.println("test static 1");
    }
  
    static{
        System.out.println("test static 2");
    }
    
    public static void main(String[] args) {
         
    }
}

看完程序,小白童鞋發(fā)話了:啥玩意? main方法中啥都沒有,能運(yùn)行啥?部落客你星星...

運(yùn)行結(jié)果:
test static 1
test static 2

小白童鞋:那啥...那啥...部落客我說啥了,我啥都沒說...

其實(shí),上面的程式碼懂的自然懂,不懂的自然就不懂了,因?yàn)樯厦娴某淌酱a涉及到JVM的類別載入了!當(dāng)然不在這篇部落格文章的範(fàn)疇內(nèi),如果有興趣理解上面的程序,這篇文章可能會(huì)對(duì)你有所幫助

1、static存在的主要意義

static的主要意義在於創(chuàng)建獨(dú)立於具體物件的領(lǐng)域變數(shù)或方法。 以致於即使沒有建立對(duì)象,也能使用屬性和呼叫方法!

static關(guān)鍵字還有一個(gè)比較關(guān)鍵的功能就是 用來形成靜態(tài)程式碼區(qū)塊以優(yōu)化程式效能#。 static區(qū)塊可以置於類別中的任何地方,類別中可以有多個(gè)static區(qū)塊。在類別初次載入的時(shí)候,會(huì)依照static區(qū)塊的順序執(zhí)行每個(gè)static區(qū)塊,且只會(huì)執(zhí)行一次。

為什麼說static區(qū)塊可以用來最佳化程式效能,是因?yàn)樗奶匦?只會(huì)在類別載入的時(shí)候執(zhí)行一次。因此,很多時(shí)候會(huì)將一些只需要進(jìn)行一次的初始化操作都放在static程式碼區(qū)塊中進(jìn)行。

【推薦學(xué)習(xí):java影片教學(xué)

#2、static的獨(dú)特之處

1、被static修飾的變數(shù)或方法是獨(dú)立於該類別的任何對(duì)象,也就是說,這些變數(shù)和方法不屬於任何一個(gè)實(shí)例對(duì)象,而是被類別的實(shí)例對(duì)象所共用

怎麼理解 「被類別的實(shí)例物件所共享」 這句話呢?就是說,一個(gè)類別的靜態(tài)成員,它是屬於大伙的【大夥指的是這個(gè)類別的多個(gè)物件實(shí)例,我們都知道一個(gè)類別可以創(chuàng)建多個(gè)實(shí)例! 】,所有的類別物件共享的,不像成員變數(shù)是自個(gè)的【自個(gè)指的是這個(gè)類別的單一實(shí)例物件】...我覺得我已經(jīng)講的很通俗了,你明白了咩?

2、在該類別被第一次載入的時(shí)候,就會(huì)去載入被static修飾的部分,而且只在類別第一次使用時(shí)載入並進(jìn)行初始化,注意這是第一次用就要初始化,後面依需求是可以再次賦值的。

3、static變數(shù)值在類別載入的時(shí)候分配空間,以後建立類別物件的時(shí)候不會(huì)重新分配。賦值的話,是可以任意賦值的!

4、被static修飾的變數(shù)或方法是優(yōu)先於物件存在的,也就是說當(dāng)一個(gè)類別載入完畢之後,即使沒有創(chuàng)建對(duì)象,也可以去存取。

3、static應(yīng)用程式場(chǎng)景

因?yàn)閟tatic是被類別的實(shí)例物件所共享,所以如果#某個(gè)成員變數(shù)是被所有物件所共享的,那麼這個(gè)成員變數(shù)就應(yīng)該定義為靜態(tài)變數(shù)。

因此比較常見的static應(yīng)用程式場(chǎng)景有:

1、修飾成員變數(shù)
2、修飾成員方法
3、靜態(tài)程式碼區(qū)塊
4、修飾類別【只能修飾內(nèi)部類別也就是靜態(tài)內(nèi)部類別】
5、靜態(tài)導(dǎo)包

以上的應(yīng)用場(chǎng)景將會(huì)在下文陸續(xù)講到...

#4、靜態(tài)變數(shù)和實(shí)例變數(shù)的概念

靜態(tài)變數(shù):
static修飾的成員變數(shù)叫做靜態(tài)變數(shù)【也叫做類別變數(shù)】,靜態(tài)變數(shù)是屬於這個(gè)類,而不是屬於是物件。

實(shí)例變數(shù):
沒有被static修飾的成員變數(shù)叫做實(shí)例變量,實(shí)例變數(shù)是屬於這個(gè)類別的實(shí)例物件。

還有一點(diǎn)要注意的是:static是不允許用來修飾局部變數(shù),不要問我問什麼,因?yàn)閖ava規(guī)定的!

5、靜態(tài)變數(shù)與實(shí)例變數(shù)差異【重點(diǎn)常用】

#靜態(tài)變數(shù):

靜態(tài)變數(shù)由於不屬於任何實(shí)例對(duì)象,屬於類別的,所以在記憶體中只會(huì)有一份,在類別的載入過程中,JVM只為靜態(tài)變數(shù)分配一次記憶體空間。

實(shí)例變數(shù):

每次創(chuàng)建對(duì)象,都會(huì)為每個(gè)對(duì)象分配成員變數(shù)記憶體空間,實(shí)例變數(shù)是屬於實(shí)例對(duì)象的,在記憶體中,創(chuàng)建幾次對(duì)象,就有幾份成員變數(shù)。

我相信各位智商都比宜春智商高,應(yīng)該都能理解上面的話。下面舉了例子完全出於娛樂,理解了大可不必看,下面的例子僅供參考,僅供娛樂一下下氣氛,趕時(shí)間的熊dei大可略過!

怎么理解呢?打個(gè)比喻吧...就比方說程序員小王是一個(gè)比較溫柔陽(yáng)光的男孩子,這1024的這一天,老板閑的沒事,非要拉著程序員小王來玩耍,怎么個(gè)玩法呢?老板和小王一人拿著一把菜刀,規(guī)則很簡(jiǎn)單,互相傷害,一人一刀,你一刀,我一刀....游戲一開始,老板二話不說,跳起來就是一刀,程序員小王二話也沒說反手就是一菜刀回去,這個(gè)時(shí)候老板發(fā)飆了,雙眼瞪得忒大,跳起來又是一刀,這個(gè)時(shí)候程序員小王不敢還手了,就沒動(dòng)手。沒想到老板越來越生猛,左一刀右一刀全程下來差不多砍個(gè)半個(gè)時(shí)....程序員小王一直沒有還過手,因?yàn)樾⊥踔浪抢习?..

這個(gè)程序員小王只會(huì)在老板第一次揮刀的時(shí)候,回老板一刀,之后就不還手了,這個(gè)時(shí)候我們把程序員小王看做是靜態(tài)變量,把老板第一次向小王揮刀看做是類加載,把小王回老板一刀看出是分配內(nèi)存空間,而一人一刀這個(gè)回合過程看成是類加載的過程,之后老板的每一刀都看成是創(chuàng)建一次對(duì)象。

連貫起來就是static變量值在類第一次加載的時(shí)候分配空間,以后創(chuàng)建類對(duì)象的時(shí)候不會(huì)重新分配

之后這個(gè)老板挨了一刀之后躺醫(yī)院了一年,一出院回到公司第一件事就是拉程序員宜春出來玩耍,老板殊不知其然,這個(gè)博主程序員宜春性格異常暴躁,老板遞給程序員宜春一把菜刀,博主宜春一接過菜刀,猝不及防的被老板跳起來就是一刀,程序員宜春痛的嗷了一聲,暴躁的程序員宜春還沒嗷完,在嗷的同時(shí)跳起來就是給老板一刀,接著老板跳起來又是一刀,程序員宜春嗷的一聲又是回一刀,老板跳起來又一刀,程序員宜春嗷的一聲又是回一刀,只要老板沒停程序員宜春就沒停,因?yàn)槌绦騿T宜春知道,就自己這曝脾氣,暴躁起來si都敢摸,肯定有幾個(gè)老鐵知道....

程序員宜春就類似實(shí)例變量,每次創(chuàng)建對(duì)象,都會(huì)為每個(gè)對(duì)象分配成員變量?jī)?nèi)存空間,就像老板來一刀,程序員宜春都會(huì)回一刀這樣子的...

6、訪問靜態(tài)變量和實(shí)例變量的兩種方式

我們都知道靜態(tài)變量是屬于這個(gè)類,而不是屬于是對(duì)象,static獨(dú)立于對(duì)象。

但是各位有木有想過:靜態(tài)成員變量雖然獨(dú)立于對(duì)象,但是不代表不可以通過對(duì)象去訪問,所有的靜態(tài)方法和靜態(tài)變量都可以通過對(duì)象訪問【只要訪問權(quán)限足夠允許就行】,不理解沒關(guān)系,來個(gè)代碼就理解了

public class StaticDemo {

        static int value = 666;

        public static void main(String[] args) throws Exception{
            new StaticDemo().method();
        }

        private void method(){
            int value = 123;
            System.out.println(this.value);
        }

}

猜想一下結(jié)果,我猜你的結(jié)果是123,哈哈是咩?其實(shí)

運(yùn)行結(jié)果: 666

回過頭再去品味一下上面的那段話,你就能非??陀^明了了,這個(gè)思想概念要有只是這種用法不推薦!

因此小結(jié)一下訪問靜態(tài)變量和實(shí)例變量的兩種方法:

靜態(tài)變量:

類名.靜態(tài)變量

對(duì)象.靜態(tài)變量(不推薦)

靜態(tài)方法:

類名.靜態(tài)方法

對(duì)象.靜態(tài)方法(不推薦)

7、static靜態(tài)方法

static修飾的方法也叫做靜態(tài)方法,不知道各位發(fā)現(xiàn)咩有,其實(shí)我們最熟悉的static靜態(tài)方法就是main方法了~小白童鞋:喔好像真的是哦~。由于對(duì)于靜態(tài)方法來說是不屬于任何實(shí)例對(duì)象的,this指的是當(dāng)前對(duì)象,因?yàn)閟tatic靜態(tài)方法不屬于任何對(duì)象,所以就談不上this了。

還有一點(diǎn)就是:構(gòu)造方法不是靜態(tài)方法!

8、static靜態(tài)代碼塊

先看個(gè)程序吧,看看自個(gè)是否掌握了static代碼塊,下面程序代碼繼承關(guān)系為 BaseThree——> BaseTwo——> BaseOne

BaseOne類

package com.gx.initializationblock;

public class BaseOne {

    public BaseOne() {
        System.out.println("BaseOne構(gòu)造器");
    }

    {
        System.out.println("BaseOne初始化塊");
        System.out.println();
    }

    static {
        System.out.println("BaseOne靜態(tài)初始化塊");

    }

}

BaseTwo類

package com.gx.initializationblock;

public class BaseTwo extends BaseOne {
    public BaseTwo() {
        System.out.println("BaseTwo構(gòu)造器");
    }

    {
        System.out.println("BaseTwo初始化塊");
    }

    static {
        System.out.println("BaseTwo靜態(tài)初始化塊");
    }
}

BaseThree 類

package com.gx.initializationblock;

public class BaseThree extends BaseTwo {
    public BaseThree() {
        System.out.println("BaseThree構(gòu)造器");
    }

    {
        System.out.println("BaseThree初始化塊");
    }

    static {
        System.out.println("BaseThree靜態(tài)初始化塊");
    }
}

測(cè)試demo2類

package com.gx.initializationblock;

/*
     注:這里的ABC對(duì)應(yīng)BaseOne、BaseTwo、BaseThree 
 * 多個(gè)類的繼承中初始化塊、靜態(tài)初始化塊、構(gòu)造器的執(zhí)行順序
     在繼承中,先后執(zhí)行父類A的靜態(tài)塊,父類B的靜態(tài)塊,最后子類的靜態(tài)塊,
     然后再執(zhí)行父類A的非靜態(tài)塊和構(gòu)造器,然后是B類的非靜態(tài)塊和構(gòu)造器,最后執(zhí)行子類的非靜態(tài)塊和構(gòu)造器
 */
public class Demo2 {
    public static void main(String[] args) {
        BaseThree baseThree = new BaseThree();
        System.out.println("-----");
        BaseThree baseThree2 = new BaseThree();

    }
}

運(yùn)行結(jié)果

BaseOne靜態(tài)初始化塊
BaseTwo靜態(tài)初始化塊
BaseThree靜態(tài)初始化塊
BaseOne初始化塊

BaseOne構(gòu)造器
BaseTwo初始化塊
BaseTwo構(gòu)造器
BaseThree初始化塊
BaseThree構(gòu)造器
-----
BaseOne初始化塊

BaseOne構(gòu)造器
BaseTwo初始化塊
BaseTwo構(gòu)造器
BaseThree初始化塊
BaseThree構(gòu)造器

至于static代碼塊運(yùn)行結(jié)果不是很清晰的童鞋,詳細(xì)講解請(qǐng)看這篇Static靜態(tài)代碼塊以及各代碼塊之間的執(zhí)行順序

以上僅僅是讓各位明確代碼塊之間的運(yùn)行順序,顯然還是不夠的,靜態(tài)代碼塊通常用來對(duì)靜態(tài)變量進(jìn)行一些初始化操作,比如定義枚舉類,代碼如下:

public enum WeekDayEnum {
    MONDAY(1,"周一"),
    TUESDAY(2, "周二"),
    WEDNESDAY(3, "周三"),
    THURSDAY(4, "周四"),
    FRIDAY(5, "周五"),
    SATURDAY(6, "周六"),
    SUNDAY(7, "周日");
 
    private int code;
    private String desc;
 
    WeekDayEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }
 
    private static final Map<Integer, WeekDayEnum> WEEK_ENUM_MAP = new HashMap<Integer, WeekDayEnum>();
 
    // 對(duì)map進(jìn)行初始化
    static {
        for (WeekDayEnum weekDay : WeekDayEnum.values()) {
            WEEK_ENUM_MAP.put(weekDay.getCode(), weekDay);
        }
    }
 
    public static WeekDayEnum findByCode(int code) {
        return WEEK_ENUM_MAP.get(code);
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int code) {
        this.code = code;
    }
 
    public String getDesc() {
        return desc;
    }
 
    public void setDesc(String desc) {
        this.desc = desc;
    }
} 

當(dāng)然不僅僅是枚舉這一方面,還有我們熟悉的單例模式同樣也用到了靜態(tài)代碼塊,如下:

public class Singleton {
    private static Singleton instance;
 
    static {
        instance = new Singleton();
    }
 
    private Singleton() {}
 
    public static Singleton getInstance() {
        return instance;
    }
}

9、static變量與普通變量區(qū)別

static變量也稱作靜態(tài)變量,靜態(tài)變量和非靜態(tài)變量的區(qū)別是:靜態(tài)變量被所有的對(duì)象所共享,在內(nèi)存中只有一個(gè)副本,它當(dāng)且僅當(dāng)在類初次加載時(shí)會(huì)被初始化。而非靜態(tài)變量是對(duì)象所擁有的,在創(chuàng)建對(duì)象的時(shí)候被初始化,存在多個(gè)副本,各個(gè)對(duì)象擁有的副本互不影響。

還有一點(diǎn)就是static成員變量的初始化順序按照定義的順序進(jìn)行初始化。

10、靜態(tài)內(nèi)部類

靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類之間存在一個(gè)最大的區(qū)別,我們知道非靜態(tài)內(nèi)部類在編譯完成之后會(huì)隱含地保存著一個(gè)引用,該引用是指向創(chuàng)建它的外圍內(nèi),但是靜態(tài)內(nèi)部類卻沒有。沒有這個(gè)引用就意味著:

1、它的創(chuàng)建是不需要依賴外圍類的創(chuàng)建。
2、它不能使用任何外圍類的非static成員變量和方法。

代碼舉例(靜態(tài)內(nèi)部類實(shí)現(xiàn)單例模式)

public class Singleton {
    
   // 聲明為 private 避免調(diào)用默認(rèn)構(gòu)造方法創(chuàng)建對(duì)象
    private Singleton() {
    }
    
   // 聲明為 private 表明靜態(tài)內(nèi)部該類只能在該 Singleton 類中被訪問
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }
}

當(dāng) Singleton 類加載時(shí),靜態(tài)內(nèi)部類 SingletonHolder 沒有被加載進(jìn)內(nèi)存。只有當(dāng)調(diào)用 getUniqueInstance()方法從而觸發(fā) SingletonHolder.INSTANCE 時(shí) SingletonHolder 才會(huì)被加載,此時(shí)初始化 INSTANCE 實(shí)例,并且 JVM 能確保 INSTANCE 只被實(shí)例化一次。

這種方式不僅具有延遲初始化的好處,而且由 JVM 提供了對(duì)線程安全的支持。

11、靜態(tài)導(dǎo)包

靜態(tài)導(dǎo)包格式:import static

這兩個(gè)關(guān)鍵字連用可以指定導(dǎo)入某個(gè)類中的指定靜態(tài)資源,并且不需要使用類名調(diào)用類中靜態(tài)成員,可以直接使用類中靜態(tài)成員變量和成員方法

//  Math. --- 將Math中的所有靜態(tài)資源導(dǎo)入,這時(shí)候可以直接使用里面的靜態(tài)方法,而不用通過類名進(jìn)行調(diào)用
//  如果只想導(dǎo)入單一某個(gè)靜態(tài)方法,只需要將換成對(duì)應(yīng)的方法名即可
 
import static java.lang.Math.;
//  換成import static java.lang.Math.max;具有一樣的效果
 
public class Demo {
    public static void main(String[] args) {
 
        int max = max(1,2);
        System.out.println(max);
    }
}

靜態(tài)導(dǎo)包在書寫代碼的時(shí)候確實(shí)能省一點(diǎn)代碼,可以直接調(diào)用里面的靜態(tài)成員,但是會(huì)影響代碼可讀性,所以開發(fā)中一般情況下不建議這么使用。

12、static注意事項(xiàng)

1、靜態(tài)只能訪問靜態(tài)。
2、非靜態(tài)既可以訪問非靜態(tài)的,也可以訪問靜態(tài)的。

13、final與static的藕斷絲連

到這里文章本該結(jié)束了的,但是static的使用始終離不開final字眼,二者可謂藕斷絲連,常常繁見,我覺得還是很有必要講講,那么一起來看看下面這個(gè)程序吧。

package Demo;

class FinalDemo {
    public final double i = Math.random();
    public static double t = Math.random();
}

public class DemoDemo {
    public static void main(String[] args) {

        FinalDemo demo1 = new FinalDemo();
        FinalDemo demo2 = new FinalDemo();
        System.out.println("final修飾的  i=" + demo1.i);
        System.out.println("static修飾的 t=" + demo1.t);
        System.out.println("final修飾的  i=" + demo2.i);
        System.out.println("static修飾的 t=" + demo2.t);

        System.out.println("t+1= "+ ++demo2.t );
//      System.out.println( ++demo2.i );//編譯失敗
      }
}
運(yùn)行結(jié)果:
    final修飾的  i=0.7282093281367935
    static修飾的 t=0.30720545678577604
    final修飾的  i=0.8106990945706758
    static修飾的 t=0.30720545678577604
    t+1= 1.307205456785776

static修飾的變量沒有發(fā)生變化是因?yàn)?span style="color:red">static作用于成員變量只是用來表示保存一份副本,其不會(huì)發(fā)生變化。怎么理解這個(gè)副本呢?其實(shí)static修飾的在類加載的時(shí)候就加載完成了(初始化),而且只會(huì)加載一次也就是說初始化一次,所以不會(huì)發(fā)生變化!

至于final修飾的反而發(fā)生變化了?是不是巔覆你對(duì)final的看法?關(guān)于final詳細(xì)講解博主也準(zhǔn)備好了一篇文章程序員你真的理解final關(guān)鍵字嗎?

ok,文章就先到這里了,希望這篇文章能夠幫助到你對(duì)static的認(rèn)識(shí),若有不足或者不正之處,希望諒解并歡迎批評(píng)指正!

本文來自?java入門?欄目,歡迎學(xué)習(xí)!

以上是深入理解static關(guān)鍵字的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
VSCODE設(shè)置。 JSON位置 VSCODE設(shè)置。 JSON位置 Aug 01, 2025 am 06:12 AM

settings.json文件位於用戶級(jí)或工作區(qū)級(jí)路徑,用於自定義VSCode設(shè)置。 1.用戶級(jí)路徑:Windows為C:\Users\\AppData\Roaming\Code\User\settings.json,macOS為/Users//Library/ApplicationSupport/Code/User/settings.json,Linux為/home//.config/Code/User/settings.json;2.工作區(qū)級(jí)路徑:項(xiàng)目根目錄下的.vscode/settings

如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

在Java的掌握依賴注入春季和Guice 在Java的掌握依賴注入春季和Guice Aug 01, 2025 am 05:53 AM

依賴性(di)IsadesignpatternwhereObjectsReceivedenciesenciesExtern上,推廣looseSecouplingAndEaseerTestingThroughConstructor,setter,orfieldInjection.2.springfraMefringframeWorkSannotationsLikeLikeLike@component@component,@component,@service,@autowiredwithjava-service和@autowiredwithjava-ligatiredwithjava-lase-lightike

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類替代舊的Date和Calendar類;2.通過LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過Instant與舊日期類型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

Google Chrome無法打開本地文件 Google Chrome無法打開本地文件 Aug 01, 2025 am 05:24 AM

ChromecanopenlocalfileslikeHTMLandPDFsbyusing"Openfile"ordraggingthemintothebrowser;ensuretheaddressstartswithfile:///;2.SecurityrestrictionsblockAJAX,localStorage,andcross-folderaccessonfile://;usealocalserverlikepython-mhttp.server8000tor

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

See all articles