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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java 静态类设置null_JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)...

發(fā)布時(shí)間:2024/9/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 静态类设置null_JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天很好奇,對(duì)null進(jìn)行強(qiáng)轉(zhuǎn)會(huì)不會(huì)拋錯(cuò)。做了如下測(cè)試得到的結(jié)果是,

如果把null強(qiáng)轉(zhuǎn)給對(duì)象,是不會(huì)拋異常的,本身對(duì)象是可以為null的。

但是如果是基本類型,比如 int i = (Integer)obj的強(qiáng)轉(zhuǎn),其實(shí)內(nèi)部會(huì)調(diào)用intvalue方法去賦值給基本類型,所以這時(shí)候是會(huì)報(bào)錯(cuò)的。

代碼如下

Object obj = null;

Integer s1 = (Integer)obj;

上面能正常執(zhí)行,即把null賦值給一個(gè)對(duì)象或者強(qiáng)行類型轉(zhuǎn)換賦值給對(duì)象都是沒有問題的。如果s1是 int的基本類型呢?

代碼如下,編譯時(shí)不會(huì)報(bào)錯(cuò)

int s1 = (Integer)obj;

System.out.println(s1);

執(zhí)行,則報(bào)java.lang.NullPointerException錯(cuò)誤。

我們反編譯后會(huì)發(fā)現(xiàn)調(diào)用了 intValue方法去獲取value,所以拋出空指針錯(cuò)誤:

Object obj = null;

int s1 = ((Integer)obj).intValue();

System.out.println(s1);

---------------------

public class NULL {

private static final String TAG = "NULL";

private void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

以上代碼運(yùn)行時(shí)會(huì)報(bào)錯(cuò):

Exception in thread "main" java.lang.NullPointerException

at com.test.NULL.main(NULL.java:14)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

若將方法abc加上靜態(tài)修飾符static

public class NULL {

private static final String TAG = "NULL";

private static void abc(){

System.out.println("123");

}

public static void main(String[] args) {

((NULL)null).abc();

}

}

程序正常運(yùn)行,輸出

123

1

null可以被強(qiáng)制類型轉(zhuǎn)換成任意類型的對(duì)象,通過這樣的方式可以執(zhí)行對(duì)象的靜態(tài)方法,但如果方法不是靜態(tài)方法的話,由于null對(duì)象并沒有被實(shí)例化(分配空間),因而運(yùn)行時(shí)會(huì)報(bào)空指針錯(cuò)誤。

總結(jié)

以上是生活随笔為你收集整理的java 静态类设置null_JAVA中对null进行强制类型转换(null可以强转为任意对象,并执行对象的静态方法)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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