String[];
s.length;

これをコンパイルするとコンパイルエラーになりますが、なぜNullPointerExceptionではないのですか?

通常オブジェクトが生成されていないものに対し、メソッド、フィールドの呼び出しを行うとNullPointerExceptionになるはずなのですが…。

配列のlengthがメソッドでもフィールドでもないという事は聞いたことがありますが、これはいったい何なのですか?

A 回答 (4件)

> なぜNullPointerExceptionではないのですか?



を、次のどちらの意味で使ってますか?

(1) このプログラムは コンパイル時に「NullPointerException」というエラーになるはず。
ところで、NullPointerException ではなく別のエラーになってしまう

(2) このプログラムは正常にコンパイルできて、実行時に「NullPointerException」が発生するはず。
ところが、コンパイル自体がエラーでできない。


(1) の場合
NullPointerException は 実行時に発生する例外です。
コンパイル時には発生しません。
// コンパイラのバグ等で、異常事態が発生して.. という可能性は0ではありませんが、そんな特殊な例は無視していいです。


(2)の場合
この例では、文法間違いがあり、正常にコンパイルできません。
それが理解できないのなら、Javaの文法を基礎から勉強しましょう。
    • good
    • 0

そもそも。

変数の宣言がない。初期化がなされていない。

それらを満たした上でなら、NullPointerExceptionになります。
    • good
    • 0

コンパイラにバグがない限り, NullPointerException が「コンパイルエラー」で出ることはそもそもあり得ないんじゃ

ないかなぁ....
    • good
    • 0

>これをコンパイルするとコンパイルエラーになりますが、なぜNullPointerExceptionではないのですか?



その理由はエラーメッセージとして書かれているはずですけど、
エラーメッセージは読まれていますか?

>String[];

これ、何をさせようとしてるのか説明お願いします。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QJavaのダウンロードについて

さっきパソコンの電源をいれたら

ダウンロード準備完了  Java(TM) Update

Java(TM) Updateを使って最新版をコンピュータにダウンロードすることができます。
最適なセキュリティーとパフォーマンスのため、今すぐ最新版をダウンロードすることをお勧めします。

Java(TM)6 Update 2 Available
Java(TM)6 Update 2 includes features and fixes to accelerate
your Java applications as well as updates to keep Java secure.

後で通知する   ダウンロード

という表示がでたのですが、ダウンロードしても問題ないのでしょうか?

Aベストアンサー

こんばんは
お持ちのPCにJavaがインストールされていれば Updateは自動で配信されます 
Java(TM)6 Update 2は今のJavaの最新ですから ダウンロードしても問題は有りません
ただ Javaはかなりの容量を使いますから(140MB位)新しいのを入れたら 以前のバージョンは削除した方がいいですよ
UpdateでHDDが一杯に成ってしまいますからね
                            参考まで

Q[クラス名].[メソッド名].[メソッド名]という書き方。

javaを勉強している者です。

少しピンと来ない書き方があるのですがそれはタイトルの通りの書き方で、具体的には

Main.getMailStore().isNewMail()

という書き方です。MailというのがクラスでgetMailStore()というのがそのクラスで宣言されているメソッドで下記のように実装されています。(MailStoreというのはインターフェースとして別のファイルで宣言されています。)

private static MailStore _mailStore;

public static MailStore getMailStore(){
return _mailStore;
}

(MailStoreというインターフェースの中にisNewMailというメソッドは宣言されています。)

public interface MailStore{
public boolean isNewMail(String uid);
}

これらだと、最初のMain.getMailStore().isNewMail()というのは、
「まず、MainクラスのgetMailStoreメソッドを呼び出して、そこでreturnされてくるMailStore型のクラスの中の、isNewMailメソッドを呼び出している」というのを一回で書いてしまっている書き方ということで合っているでしょうか?少しピンと来ないので・・(特にreturnされるメソッド(getMailStore)にそのまま.[メソッド]という書き方をのっけるあたりが)

よろしくお願いします。

javaを勉強している者です。

少しピンと来ない書き方があるのですがそれはタイトルの通りの書き方で、具体的には

Main.getMailStore().isNewMail()

という書き方です。MailというのがクラスでgetMailStore()というのがそのクラスで宣言されているメソッドで下記のように実装されています。(MailStoreというのはインターフェースとして別のファイルで宣言されています。)

private static MailStore _mailStore;

public static MailStore getMailStore(){
return _mailStore;
}

(MailSt...続きを読む

Aベストアンサー

あってます。

QJAVAダウンロード出来ません。

JAVAソフトウェアダウンロードのページでダウンロードを試みましたが、
http://www.java.com/ja/
ダウンロードを開始すると
"設定を確認中"と出てダウンロードが開始されません。
どうすればダウンロードできますか?

Aベストアンサー

手動で一旦ダウンロードしてから、インストールもできませんか?
http://www.java.com/ja/download/manual.jsp

Q[iアプリ][実機で通信エラー]com.nttdocomo.io.ConnectionException

エラーが発生する状況を以下に示します。

*doja3.0などエミュレーター上では正常に動作しました。
*実機D506iで実行するとエラーが発生。
*cgiはperlで作成し http://isweb.www.infoseek.co.jp/ のiswebライト(無料)サーバーに置いています。

プログラムの概要は下記アドレスへscore=30000とid=abcdeのデータをcgiへ送り、ランキング情報を取得するプログラムです。

//----------------以下通信プログラムの一部--------
HttpConnection con = null;

String url = IApplication.getCurrentApp().getSourceURL() + "/cgi-bin/test/test3.cgi?score="30000"&id=abcde";

con = (HttpConnection)Connector.open(url, Connector.READ, true);

con.setRequestMethod(HttpConnection.GET);

try{
con.connect();
}catch (com.nttdocomo.io.ConnectionException e) {
System.out.println("status=" + e.getStatus());
con.close();
}
------------------------以下省略-------------------
con.connect();でエラーが発生し、トレース情報には

status=10

という結果が表示されます。

http://acerola.org/motokazu/iap/manual/Doja4.0/com/nttdocomo/io/ConnectionException.html#HTTP_ERROR

上記アドレスを見てみたのですが、結局何が原因で何を改善したら良いのか分からない状態です。
他に必要な情報などがありましたら言っていただければ思います。
どうぞ宜しくお願いいたします。

エラーが発生する状況を以下に示します。

*doja3.0などエミュレーター上では正常に動作しました。
*実機D506iで実行するとエラーが発生。
*cgiはperlで作成し http://isweb.www.infoseek.co.jp/ のiswebライト(無料)サーバーに置いています。

プログラムの概要は下記アドレスへscore=30000とid=abcdeのデータをcgiへ送り、ランキング情報を取得するプログラムです。

//----------------以下通信プログラムの一部--------
HttpConnection con = null;

String url = IApplication.getCurrentA...続きを読む

Aベストアンサー

ADF設定の
UseNetwork = http
してますか?

あとは接続先URLが間違っているかのどっちかかと
String url
をの中身を確認してください

QJAVA開発キットのダウンロード法。

プログラミング全くの初心者ですが、JAVAを始めてみたいと思っています。ところがJAVAの入門書を手に入れたところ、JAVAの開発キットをダウンロードしようとしてみましたが、入門書が古いせいか、そのダウンロードサイトの様子が変わっていたり、また英語表記だったりして自分なりにいろいろとやってたものの、よくわかりません。どなたか、最新のJAVA開発キットのダウンロード法を詳しく教えて頂けないでしょうか…。使用OSは、WindowsXPです。

Aベストアンサー

Windows版でいいんですよね?
下記のURLから、

・「JDKのダウンロード」をクリック
・「ACCEPT」にチェック
・Windows Platform - J2SE(TM) Development Kit 5.0 Update 6の「Windows Offline Installation, Multi-language」をクリック
・もう一度 Windows Platform - J2SE(TM) Development Kit 5.0 Update 6の「Windows Offline Installation, Multi-language」をクリック

で、ダウンロード出来ます。

参考URL:http://java.sun.com/j2se/1.5.0/ja/download.html

QIEの[ツールバー]-[標準のボタン]、[アドレスバー]を消したい。

IEのツールバーの
・標準のボタン
・アドレスバー
を消す命令ってありませんか?
「Open時にダイアログ形式で開く」以外の方法を教えてください。
要は、ページ初期表示時に強制的に消したいのですが。。。

Aベストアンサー

・・・たしか、無い筈、ですねぇ。
強いて言えば、IEをキオスクモードで起動する手はありますね。

IEXPLORE -k 'ファイル名'

ですね。
目的が不明なので、役にたたないかもしれませんが(^^;

QJAVAのコンパイラのダウンロードについて

 最近、JAVAを勉強しようと思い、JAVAのコンパイラができるというJDKと呼ばれるものををダウンロードしようとしたのですが、ページが英語のせいでどうすればダウンロードできるのか全く分かりません。

 今のところ、勉強するだけなので無償と言うこれをダウンロードしたいのですが、いったいどこをどうすれば落とせるんでしょうか。

 あと、ほかにもForte for Javaを使えば便利と聞いたのですが、確かJAVAはテキストエディタとJDKがあれば作れると聞いたのですが、これはどういうことなのでしょうか。

 JAVAを始める以前の問題のような気もしますが、初心者なので誰か教えてください。

Aベストアンサー

http://java.sun.com/j2se/1.3/ja/download-windows.html を開いたら、
ページのやや下のほうにある、

Java 2 SDK, v 1.3.1_02 ソフトウェア Windows 95 / 98 / 2000 / NT 4.0 /Me (Intel プラットフォーム) 版のダウンロード

のところにあるcontinueボタンを押します。
そうすると、英語で使用契約書が表示されるので、
ページの最下部にあるACCEPT(同意する)というボタンを押すと、ダウンロード画面に進みます。
たくさんボタンが並んでいますが(やっぱり英語)、どれか1つをクリックするとダウンロードが始まります。

こんな感じでダウンロードがんばってください。

QString(byte[] bytes, int offset, int length)の文字コードは?

String(byte[] bytes, int offset, int length)は、バイト配列(8bitずつのまとまり)を、文字列型に直す、というものだと思うのですが文字コードは何にしたがって直すのでしょうか?

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html

Aベストアンサー

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいから移植性も高まると考えるため)

どうしてもデフォルトがほしけりゃ
http://java.sun.com/javase/6/docs/api/java/nio/charset/Charset.html#defaultCharset%28%29
があるわけですし

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int%29

>プラットフォームのデフォルト文字セットを使用して、

日本語WindowsならShift_JISでしょう。他の環境では解りません。

#なので僕は

http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#String%28byte[],%20int,%20int,%20java.lang.String%29

で指定するほうが好きです。(コードを読む人に,誤解を与えにくく,異なる環境でも挙動を一致させやすいか...続きを読む

Qjavaのapiをダウンロードしたいです。

Java EEをダウンロードするのではなくてJava SEをダウンロードして、必要に応じてapiをダウンロードしたいのですが、apiはどこからダウンロードすればよいのでしょうか?

javaxが含まれるのを使いたいです。

かなり調べたのですが、意外とどこにも回答がなく困っております。
初心者ですが、よろしくお願いします。

Aベストアンサー

eclipse なんかの初期設定だと、APIドキュメントはネット上のものが見れるようになっています。
API を zip でダウンロードしておきたいということなら、以下のページからダウンロードできます。(Java SE 7 を除く)
http://www.oracle.com/technetwork/jp/java/javase/documentation/api-jsp-316041-ja.html

---
Java SEのバージョン 1.3.0、1.4.0、5.0、6 の日本語ドキュメントは、こちらのページでアーカイブ・ファイルも提供しています。
---
このように書いてある部分のリンクをクリックしてください。

Q正規表現 ^[^./][^/]*$ は

どういうものを意味しているでしょうか?

Aベストアンサー

> どうも[]の中では[.]は「任意の1字」ではなく文字「.]と認識されるようです

そうですよ。

正規表現 [] の中では、特別にエスケープしなくてはいけないのは、] と \ だけです。
後注意をしなければいけないのが - か。

> 例 4-4より安全なファイル名の確認

パスの区切りである / を許しちゃうと、プログラムが期待しているファイルの置き場所以外に
ファイルを置かれちゃう可能性がある、という意味で「安全」という表現をしているのでしょう。

また、unix 系では、ファイル名の先頭がピリオドだと、ls で -a をつけないと見えなくなっちゃうので、
そういうファイル名もはじいておこう、ということでしょう。


> オペレーティングシステムにより、注意するべきファイルは大きく変化し ます。

こういうのは、ファイル名のパターンマッチではじくのではなく、ファイルシステムのパーミッションで
はじくのが正解。

ファイルアクセスに権限がないような OS では、cgi や php などを安直に動かしてはいけない、ってこと。

# 今時では、気にすることではないけれど...

> どうも[]の中では[.]は「任意の1字」ではなく文字「.]と認識されるようです

そうですよ。

正規表現 [] の中では、特別にエスケープしなくてはいけないのは、] と \ だけです。
後注意をしなければいけないのが - か。

> 例 4-4より安全なファイル名の確認

パスの区切りである / を許しちゃうと、プログラムが期待しているファイルの置き場所以外に
ファイルを置かれちゃう可能性がある、という意味で「安全」という表現をしているのでしょう。

また、unix 系では、ファイル名の先頭がピリオ...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング