• 締切済み

コメントアウトされたエスケープシーケンスについて

Java初心者です。 コメントアウトされた中のエスケープシーケンスの使い方について質問があります。 class sample{ public static void main(String args[]){ System.out.println("16進数 :\u0001") // System.out.println("16真数 :\ugggg") } } 上記のようなソースコードがあった場合、 System.out.println("16進数 :\u0001") については、当然Unicodeの16進数範囲内なので、 コンパイルエラーにならないのですが、 コメントアウトされている行 // System.out.println("16真数 :\ugggg") については、 コンパイルエラーになります。 エラーメッセージは「エスケープシーケンスが不正です。」 コメントアウトされているので、この行は無視されるものだと思っていたのですが、コンパイルエラーになるのは何故でしょうか。 どうかご教授願います。

みんなの回答

  • deadlock
  • ベストアンサー率67% (59/87)
回答No.3

>おそらく、そのためにユニコードのエスケープシーケンスに関してのみは、コメント内であってもコードが16進数の範囲外だとエラーになってしまうのでしょう。 あっていますよ。試しに、\uggggを\u000Aに変えてみてください。 今度は「ダブルクォートが閉じていないよ」(意訳)とエラーが出ると思います。 \u000Aは改行なので、こういったことになります。 逆に、↓はコンパイルエラーになりそうですが、正常に動作します。 public class A { public static void main(String[] args) { System.out.print( // "\u000A"Test"); } }

shotwobridge
質問者

お礼

ありがとうございます! 解決できました!

全文を見る
すると、全ての回答が全文表示されます。
noname#49664
noname#49664
回答No.2

// System.out.println("16真数 :?ugggg") ?uggggが16進数の範囲から外れているからでしょう。 JLS(Java Language Specification)によると、Javaのコンパイラは、ソースコードを読み込んでからコンパイルを完了するまでに以下のようなステップを踏む、とあったように記憶しています。 ユニコード変換→字句解析→構文解析→コード生成 ユニコードのエスケープシーケンスは、最初のユニコード変換のところで処理されます。つまり、具体的な字句や構文の解析(ここで、その行がコメントかどうかチェックされる)より前にユニコード変換は行われるようです。  おそらく、そのためにユニコードのエスケープシーケンスに関してのみは、コメント内であってもコードが16進数の範囲外だとエラーになってしまうのでしょう。 (うろ覚えなので、もし微妙に違っていたらどなたか補足を)

参考URL:
http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html
shotwobridge
質問者

お礼

ありがとうございます! 解決できました!

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんにちは。 コメントアウトされているのにエラーになるのはおかしいですね。ひとつ気になるのは;が無いということです class sample{ public static void main(String args[]){ System.out.println("16進数 :\u0001"); // System.out.println("16真数 :\ugggg") } } 真ん中の行の最後に";"を追加してみました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Lomboz2.1.3のエスケープシーケンスエラー

    EclipseでServlet/JSPを学び始めたものです。 以下JSP(一部抜粋)のスクリプトレットの2行目(VALUEに申請承認代入)で 『エスケープ・シーケンスが無効です。(有効なものは \b \t \n\f \r \" \' \\ です)』 というコンパイルエラーが出てしまいました。 <% out.println("<FORM METHOD=POST ACTION=\"./SearchServlet\">"); out.println("<INPUT TYPE=submit VALUE=\"申請承認\"></FORM>"); %> Webで調べましたが、特に参考ページがなく打つ手なしになってしまいました。 Eclipse等の設定で回避できるのしょうか? ご教授ください。 【環境】 WinXP J2SE1.4.2_05 Eclipse2.1.3 Tomcat4.1.24 Lomboz2.1.3

    • ベストアンサー
    • Java
  • throw文について

    上と下のソースプログラムがよく似ているのにもかかわらず上記のプログラムでコンパイルエラー発生する理由がわかりません。 解決方法はpublic static void badMethod()throws IOException{に書き換えるということが分かっていますがイマイチ理屈が分からない次第であります。 たぶん、上記のプログラムはimport文があるからだと思うのですが回答のほどよろしくお願い致します。 (コンパイルエラー) import java.io.IOException; class TryCatch{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(IOException ex){ System.out.println("B"); } catch(Exception e){ System.out.println("C"); } System.out.println("E"); } public static void badMethod(){ throw new IOException(); } } (コンパイル正常) public class X{ public static void main(String args[]){ try{ badMethod(); System.out.println("A"); } catch(Exception ex){ System.out.println("B"); } finally{ System.out.println("C"); } System.out.println("D"); } public static void badMethod(){ throw new RuntimeException(); } }

  • ダブルクォートがエスケープできない

    public static final String HOGE = "¥"hogehoge¥""; public static void main(String[] args){ System.out.println(HOGE); } eclipseで上記のようなコードがエラー表示されます。しかし実行はできます。 実行結果:"hogehoge" エラー表示を取る事は出来ますか? よろしくお願いします 環境 mac osx eclipse 4.2 java 1.6

    • ベストアンサー
    • Java
  • 「エディターにはメイン型が含まれていません。」

    いつもお世話になっております。 public class Sample2 { public static void main(String[] args) { System.out.println("こんにちは、Java!"); System.out.println("私の名前はこうぞうです。"); } } 「エディターにはメイン型が含まれていません。」 とコメントが出ます。エラーです。 どう直せばいいでしょうか? ご回答のほど宜しくお願い申し上げます。

    • ベストアンサー
    • Java
  • エラーの理由がわからない。

    サンプル問題をといてます。下記をイクリプスでコンパイルするとエラーがでます。 エラーの場所は1行目のc とD の部分と 12行目の new Dogです。なぜエラーなのでしょうか? -------------- class Dog { String name; int energy; } class PlayWithDog2 { public static void main(String[] args) { Dog x; x = new Dog(); x.name = "太郎"; x.energy = 100; System.out.println("僕の名前は" + x.name + "だ。わん。"); System.out.println("エネルギーは" + x.energy + "だ。わん。"); System.out.println("わん、わん!"); x.energy--; System.out.println("僕の名前は" + x.name + "だ。わん。"); System.out.println("エネルギーは" + x.energy + "だ。わん。"); } }

    • ベストアンサー
    • Java
  • 内部文字コードとは?

    javaは内部では文字をユニコードとして扱うとは、 どういう事でしょうか? 例えば、javaのブログラムをwindows上で作ったとして、 「こんにちわ」と出力させるプログラムを作ったとすると、 public class Hello{ public static void main(String[] args) { System.out.println("こんにちわ"); } } となりますよね、この時、このjavaのソースファイルを、 ユニコードとして保存して、コンパイル、実行しないと、 正常に動かないという事でしょうか? つまり、ソースをシフトJISで保存してJAVAでコンパイルをしようとすると、ソースコード中の文字をユニコードとして扱うため、 文字化けして、コンパイラは一体何の事か分からずエラーみたいな感じになるのでしょうか?(それとも自動で文字コードをユニコードに変換してくれるのかな?) 要するに、「内部文字コード」という言葉が何を指しているのかが分からないですが、よろしくお願いします。

  • java 実行できない

    javaで public class HelloWorld{ public static void main(String[] args){ System.out.println("Hello World!"); } } のようなプログラムをかいて、コンパイルして、実行しようとすると エラー: メイン・メソッドがクラスStringで見つかりません。次のようにメイン・メソッドを定義してください。 public static void main(String[] args) またはJavaFXアプリケーション・クラスはjavafx.application.Applicationを拡張する必要がありま というエラーがでます。コンパイルはできます。jdkは1.8.0_25を使っています。

  • boolean型

    class Bool {   static boolean b;   public static void main(String [] args) {     int x=0;     if (b ) {       x=1;     }     else if (b = false){       x=2;     }     else if (b){       x=3;     }     else {       x=4;     }     System.out.println("x = " + x);     System.out.println(b=false);   } } SUNのサイトにあった「どのような結果になるか」と言う問題なのですが、8行目の if(b=false) の部分がifの括弧の中はBoolean型じゃないといけないのに 代入してるからコンパイルエラーだなとおもったのですが あっさりコンパイルは通ってx=4と言う出力です・・・ (b=false) と言うのはどのようにコンパイルされているのですか?? なぜ 代入が、BooleanとしてOKなのでしょうか??

    • ベストアンサー
    • Java
  • エラーが出ます

    public class Test1 { public static void main(String args[]) { My number is 21001100. if(It is able to be divided by 3.){ System.out.println("割り切れます"); } else{ System.out.println("割り切れません"); } } } エラーが一個で、5行目に;がないようなので.のあとに;をつけるとエラーが増えてしまいます。エラーのなくし方を教えてください。(なんか全部文頭につまってるかもしれませんがテキストドキュメントでは文頭をあけてます)

    • ベストアンサー
    • Java
  • コマンドライン引数

    『やさしいJava』で勉強してます。 import java.io.*; class Sam3 { public static void main(String args[]) { if(args.length != 1){ System.out.println("ファイル名が違うよ。"); System.exit(0); } try{ BufferedReader br= new BufferedReader(new FileReader(args[0])); String str; while((str = br.readLine()) != null){ System.out.println(str); } br.close(); }catch(IOException e){ System.out.println("エラー"); } } } で、コンパイルして、 Sam3 test2.txt と実行しても 「準備ができていません。読み取り中・・・」 としかでません。 なにか間違いがあるのでしょうか? お願いします。

    • ベストアンサー
    • Java