1.定義一個User類如下:
/**
* @author lizhibiao
* @date 2018/11/27 17:21
*/
public class User
{
private String userName;
private int age;
private int cutScore;
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public int getCutScore() {
return cutScore;
}
public void setCutScore(int cutScore) {
this.cutScore = cutScore;
}
}
2.測試null是否可以轉為User類
public class Test
{
public static void main(String[] args)
{
User user = (User)null;
System.out.println(user);
}
}
運行結果如下:
null
也就是輸出值為null,所以null可以強轉為某個類編譯不報錯,但是強轉后還是為null
3.如果null來調用方法則會報錯
public class Test
{
public static void main(String[] args)
{
User user = (User)null;
System.out.println(user.getUserName());
}
}
運行結果如下:
Exception in thread "main" java.lang.NullPointerException
at str.Test.main(Test.java:11)
報空異常
4.今天有網友加好友,給我發了一個例子,發現null強轉某個對象后,調用方法居然不報空指針。然后我按他的意思寫了個例子如下:
/**運行結果:
* Hello world!
*
*/
public class App
{
private void commonMethod()
{
System.out.println("commonMethod");
}
private static void staticMethod()
{
System.out.println("我是靜態方法");
}
public static void main(String[] args)
{
App app = (App)null;
//調用靜態方法,不報錯
app.staticMethod();
//調用普通方法,報空指針
app.commonMethod();
}
}

分析:發現沒,null強轉為對象后,調用靜態方法居然是不會報錯的,調用普通方法會報空指針。原因是,我們在進行App app = (App)null強轉操作時,雖然對象app是為null沒有引用的,但是java里調用靜態方法不需要創建實例對象,靜態成員應該通過類型來訪問,也就是類名.靜態方法()就可以調用了靜態方法了。所以,app.staticMethod()調用靜態方法不報錯。
感謝這位網友,也歡迎大家有疑問添加微信:lizb0907,進行交流。
最后,以后不怎么在博客園上寫文章了,在新搭的博客上寫文章:
有興趣的伙伴們可以來交流,
堅持做好一件事!
有疑問,掃我二維碼添加微信,歡迎騷擾!
堅持做一件事,一起學習。

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">