java中引用的概念 java synchronized鎖對象,當(dāng)對象引用是null的時候,鎖的是什么?
java synchronized鎖對象,當(dāng)對象引用是null的時候,鎖的是什么?謝邀!Java語言規(guī)范中明確指出如果鎖住的對象是null,則會NullPointerException,規(guī)范內(nèi)容如下:
java synchronized鎖對象,當(dāng)對象引用是null的時候,鎖的是什么?
謝邀!
Java語言規(guī)范中明確指出如果鎖住的對象是null,則會NullPointerException,規(guī)范內(nèi)容如下:
The type of Expression must be a reference type, or a compile-time error occurs. A synchronized statement is executed by first evaluating the Expression. Then: If evaluation of the Expression completes abruptly for some reason, then the synchronized statement completes abruptly for the same reason. Otherwise, if the value of the Expression is null, a NullPointerException is thrown.
Java的哪個語法特性讓你覺得寫Java代碼很享受?
本人在日常主要使用的語言為c#和Java,就語法而言,寫c#更讓人享受。主要原因為c#更多的語法糖,linq真的好用,其次visual studio號稱宇宙第一IDE。但是個人還是更愿意用java。
從java8出來后,感覺java在追趕著c#的步伐, java和c#的語法上越來越像(本來也挺像的,哈哈)。以下做一個小小的比較。
c#
java
以上實現(xiàn)的功能差不多,在java8中加入lambda表達(dá)式后,個人感覺越來越像c#了。
拋開語法層面,現(xiàn)在來說一說為什么更愿意用java
1、首先當(dāng)然是看收益啦,在國內(nèi)基本上沒有用c#的大廠,本來攜程在用,后來也轉(zhuǎn)為java了。
2、從技術(shù)層面來講,因為java造輪子的多,有很多優(yōu)秀的框架可以使用。在實際做項目中你遇到的問題,其他人肯定遇到過,能夠很好的找到問題關(guān)鍵。
3、從生態(tài)上來講,Java無疑是最好的選擇之一,因為其開源的早,建立生態(tài)的時間早。
4、從性能來說,Sun/Oracle的HotSpot JVM內(nèi)置的JIT編譯器在運行時對字節(jié)碼已經(jīng)做出了非常大的優(yōu)化努力,如果不是對性能十分敏感的應(yīng)用,java足夠用了。
謝謝。
Java中的注解到底是如何工作的?
注解是用來描述Java類的,可以自定義注解,然后通過反射獲取注解執(zhí)行指定的動作。
舉個簡單的例子
這樣就可以通過反射來獲取到一些元信息了,相當(dāng)于配置和業(yè)務(wù)邏輯實現(xiàn)了分離。
當(dāng)然這個自定義注解還需要依賴一些特定的注解,我們稱為元注解。一共有5種:
@Retention:存活的周期
RetentionPolicy.SOURCE
保留在源碼階段RetentionPolicy.CLASS
編譯RetentionPolicy,RUNTIME 運行階段
@Documented 將注解中的元素包含到JavaDoc中
@Target 注解可以用到的地方 有類、方法、屬性等
@Inherited 繼承
@Repeatable 可重復(fù)
Java對象使用后設(shè)置為null會減少內(nèi)存占用嗎?
首先科普一下,Java對象是引用變型的,它會用兩種內(nèi)存區(qū):堆內(nèi)存、棧內(nèi)存。Java對象是存儲在堆內(nèi)存中的,而對此對象的引用(理解為變量)存儲在棧內(nèi)存中。
比如:String str=new String("字符串") 這行代碼用的是兩塊內(nèi)存,new String("字符串") 存在堆內(nèi)存中,str 變量存儲在棧內(nèi)存中。
當(dāng)我們設(shè)置對象為 null 后(即:str=null),此時str變量與堆內(nèi)存中的數(shù)據(jù)就斷開聯(lián)系了,GC算法會在必要時回收 str 及堆內(nèi)存中的對象,但這個GC任何回收我們是無法干預(yù)的。
總結(jié)說就是:Java對象在使用后設(shè)置為null,在GC對此對象回收后,內(nèi)存會相應(yīng)減少,但不是說將一個對象引用設(shè)置為null后內(nèi)存就立馬釋放了。GC會在合適的時間來回收垃圾數(shù)據(jù)。