【プログラム勉強中】NullPointerException ぬるぽをちゃんと理解しよう!

プログラムPG・PC効率UP・ブログ
プログラム

当サイト「ドロイドブログ」を運営しています、ゆーちゃまさんです^^

Webアプリ開発3年位、その後10年位Androidアプリを開発しています。

様々な例外がありますが、圧倒的にお目にかかる機会の多い例外ぬるぽになります。

javaを勉強中や開発を始めたばかりの方で

  • NullPointerExceptionって結局どーしたら発生するの?
  • 自分でヌルぽの説明ができない

と疑問に思っている方、たくさんいると思います。

ちなみに僕も、javaを勉強している当時はどうして発生するか説明が出来ませんでした。

今では現役で10年以上も開発をしているので、当然わかりますし、分からない気持ちも分かります。

なので、当時の僕と同じように

  • nullを変数に代入したらダメなのかな??
  • 良く分からないから発生した場所が分かっても対処できない

と疑問に思っている方に対して、現役でアプリ開発している僕が

こーやって説明されてればわかりやすかった!という内容で解説します!

何となくで、ちゃんと理解していなくてもコーディングできてしまうのですが、

そのままだと後々困ります。
(実際に結構現役エンジニアでもいます…言えないですけど。。)

ゆーちゃま
ゆーちゃま

簡単ですよ^^今の内に理解しちゃいましょう。

スポンサーリンク

結論

チェックポイント

何も参照していない変数」のメソッドを使おうとすると発生します

ゆーちゃま
ゆーちゃま

何となく分かるような…分からないような…の方も大丈夫!

ではわかりやすく解説します^^

スポンサーリンク

例文

2行目は文字列の長さが表示されますね。

4行目で nullを代入して、5行目で再度testStrの長さを表示すると…

ここでNullPointerExceptionが発生します。

この例外の内容は、何も参照してないです!ってことなんですよね。

testStr変数は箱のようなもので、中に実際にものが入っているわけではありません。

メモリ上に存在している”あいうえお”がある住所が入っています。

“あいうえお”の場所・住所が testStrに入っているので

testStr.length() とすると、パソコンがtestStrの中の住所を見て”あいうえお”がある場所を知って、length()を実行する感じですね。

null というのは、参照なしっていう意味です。

null を変数に代入するということは、その変数は何も参照していませんよーと言う事です。

言い換えると中に住所は入ってません。

4行目でnullを代入しているので、testStrはnull 何も住所が入っていない状態になります。

住所が入っていないのに、length()を使用すると・・・

length()使えって言われても、住所が入っていないから使えないよ!

と怒るって事ですね。

まとめ

チェックポイント

変数にnullを代入するだけでは、NullPointerは発生しません

ゆーちゃま
ゆーちゃま

これ、よく勘違いしている人がいるんですよ。

変数は何も参照していませんよーと設定しているだけなので特に怒られることはないです。

nullの変数.XXXX() 何も参照していない変数の関数を使用すると、NullPointerExceptionが発生するという事になります。

これで、例外ログをみて あ、この変数がnullだから例外出てるんだなーというのが分かるわけですね!

説明うまく出来ているか少し不安ですが、この記事をみてなるほど!

って思ってもらえたらうれしいです!

因みに、kotlinだと testStr?.length() で、testStrがnullの場合実行されません。

nullチェックの必要が無いです!

今回はjavaで説明していますが、他の言語のぬるぽも同じです。

ありがとうございました!

皆さん頑張りましょー!

こちらの記事もどうぞ^^

(Visited 176 times, 1 visits today)
スポンサーリンク
スポンサーリンク
スポンサーリンク
PG・PC効率UP・ブログプログラミング
ドロイドブログ

コメント

タイトルとURLをコピーしました