[解決済み】なぜJavaでnullを投げることができるのですか?[重複)。
質問
これを実行すると
public class WhatTheShoot {
public static void main(String args[]){
try {
throw null;
} catch (Exception e){
System.out.println(e instanceof NullPointerException);
System.out.println(e instanceof FileNotFoundException);
}
}
}
という応答があります。
true
false
これは私にとってはかなり衝撃的なことでした。私は、これはコンパイル時のエラーになると思っていました。
なぜJavaではnullを投げることができ、それをNullPointerExceptionにアップキャストするのでしょうか?
(実は、nullを投げているので、quot;upcast"かどうかは分かりませんが)
本当に本当にくだらない面接の質問を除けば(頼むから面接でこんなこと聞かないでくれ)、私は以下のような理由が見当たりません。
throw null
. クビになりたいのかもしれないけど、それは......。つまり、なぜ他の人が
throw null
?
楽しい事実
IntelliJ IDEA
12が教えてくれたのは、私のセリフ。
e instanceof NullPointerException
は常に偽になります。これは全く真実ではありません。
どうすれば解決するの?
というわけではなさそうです。
null
として扱われます。
NullPointerException
を行おうとする行為であること。
throw null
それ自体
を投げる。
NullPointerException
.
言い換えると
throw
は、その引数が非NULLであることをチェックし、NULLの場合は
NullPointerException
.
JLS 14.18 指定する という動作があります。
Expression の評価が正常に完了し、NULL 値が生成されると、NULL の代わりにクラス NullPointerException のインスタンス V' が作成され、スローされます。その後、throw文は突然終了し、その理由は値V'を持つthrowである。
関連
-
[解決済み] javaで部分クラスを実装する方法
-
[解決済み] Java Swingで複数のボタンに対して複数のActionListenersを追加する方法
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み】なぜJavaの+=, -=, *=, /=複合代入演算子はキャスティングを必要としないのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] なぜJPAには@Transientアノテーションがあるのですか?
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] JOGLまたはLWJGLの既成のプロジェクト
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] java.lang.ClassCastException: java.lang.Long を java.lang.Integer にキャストできない(java 1.6
-
[解決済み] java.sql.SQLRecoverableException: IO エラーです。NL Exceptionが発生しました
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない