スポンサーサイト





上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

  • Comments (Close): -
  • TrackBack (Close): -

NullPointerException





NullPointerExceptionが発生する場合


NullPointerExceptionとは、null値(定義されていない値のこと)の参照型変数を参照しようとした時に発生する例外とされます。

レファレンスによると、

オブジェクトが必要な場合に、アプリケーションが null を使おうとするとスローされます。たとえば、以下のような場合があります。

  • null オブジェクトのインスタンスメソッドの呼び出し
  • null オブジェクトのフィールドに対するアクセスまたは変更
  • null の長さを配列であるかのように取得
  • null のスロットを配列であるかのようにアクセスまたは修正
  • null を Throwable 値であるかのようにスロー

とのこと。

では、nullの値を出力しようとするとNullPointerExceptionになるでしょうか?

package kihon;

public class Sample {
public static void main(String[] args) {

String str=null;
System.out.println(str);
}
}


実行結果:

null



上のプログラムでは、NullPointerExceptionは発生しません。

strは、nullオブジェクトです。String型と定義されていますが、strはあくまでnullでしかありません。

nullは言うなれば「中身のない箱」で、これを出力するとnull(中身なし)となります。

NullPointerExceptionが発生する場合を以下に書きます。

package kihon;

public class Sample {
public static void main(String[] args) {

String str=null;
System.out.println(str.length());
}
}


実行結果:

Exception in thread "main" java.lang.NullPointerException
at kihon.Sample.main(Sample.java:7)



「null オブジェクトのインスタンスメソッドの呼び出し」でNullPointerExceptionが発生しました。つまり、nullでメソッドを実行させようとすると、NullPointerExceptionが発生するのです。


ポインタとは


コンピュータには、変数や配列など、データを格納する箱がありますが、そのデータがどこにあるかを指し示す背番号のようなものがポインタです。

たとえて言うと、Javaにおいて背番号のない選手(null)は存在しますが、nullがプレーをする(メソッドを実行する)ことは認められず、例外という形で返ってくるのです。


NullPointerExceptionを予防する方法


NullPointerExceptionを予防する最も簡単な方法は、if文を使ってオブジェクトがnullでない場合にのみメソッドを実行することでしょう。

package kihon;

public class Sample {
public static void main(String[] args) {

String str=null;
if(str !=null){
System.out.println(str.length());
}else{
System.out.println("strはnullでした。");
}
}
}


実行結果:

strはnullでした。




ArrayListなどのコレクションを使うときは、null判定とサイズ判定の合わせ技がよく使われます。

package kihon;

import java.util.ArrayList;

public class Sample {
public static void main(String[] args) {

ArrayList list=new ArrayList();
list=null;
if(list !=null && list.size()>0){
System.out.println("listは存在し、中身もあります。");
}else{
System.out.println("listは存在しないか、または中身がありません。");
}
}
}


実行結果:

listは存在しないか、または中身がありません。



関連記事

タグ :

   印刷ボタン       この記事に拍手する       このエントリーをはてなブックマークに追加

Return to page top

Comments:

Comment Form
Only inform the site author.

Trackback+Pingback:

TrackBack URL for this entry
http://javamania.blog25.fc2.com/tb.php/109-820e8310
  • 閉じるボタン
クラスライブラリ解説 目次
クラスライブラリとは
 ├ Java APIの調べ方
 ├ Objectクラスを調べる
 ├ ライブラリのインポート
 ├ 完全修飾クラス名を調べる
 ├ staticインポート
 ├ 外部ライブラリの利用

文字列を扱う
 ├ Stringとイミュータプル
 ├ StringBuilder 文字列の連結
 ├ toString()のオーバーライド
 ├ toXxCase() 大文字と小文字
 ├ compareTo() 値の比較
 ├ parseDouble() 文字を小数値に
 └ 文字列を抜き出す
 ├ char配列からString型へ変換
 ├ 空白文字の除去

日付を扱う
 ├ Calendar 現在の日付
 ├ Date 日付の表示

数値演算を扱う
 ├ round() 切上・切捨・四捨五入
 ├ BigDecimal
 ├ sqrt(),pow() 累乗と平方根
 ├ BigInteger
 ├ int型の最大値・最小値
 ├ random() 乱数作成

ファイルを扱う
 ├ ファイルの存在確認
 ├ ファイルを作成
 ├ ファイルの削除
 ├ ファイルサイズを調べる

入出力ストリーム
 ├ ファイルを読み込む
 ├ 画像ファイルのコピー
 ├ 日本語の読み込みと書き出し
 ├ バッファ入出力
 ├ データ型フリーの出力ストリーム
 ├ getBytes()メソッド

書式つき入出力
 ├ 書式を指定して出力
 ├ 引数インデックス
 ├ 整数値のフォーマット
 ├ 小数値のフォーマット
 ├ 九九の表のフォーマット

例外処理
 ├ printStackTrace()
 ├ NullPointerException
 └ NumberFormatException
月別アーカイブ
カテゴリ
リンク
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。