JavaA2Z

KAB-studio > プログラミング > JavaA2Z > コンパイルタイムエラーとは

コンパイルタイムエラー

日本語 翻訳時誤り
英語 compile time error
ふりがな こんぱいるたいむえらー
フリガナ コンパイルタイムエラー

解説

コンパイル時に発生するエラー
コンパイルエラー」と言われることが多い。
プログラムが文法的に誤っており、コンパイラコンパイルすることができない場合に発生する。
Eclipseの場合、一応クラスファイルは作られるが、これは未完成の物であり、実するとError例外投げられる
当然、正しく動くプログラムはコンパイルタイムエラーは発生しない。
 
コンパイルタイムエラーの発生時には、同時に「どのようなエラーか」というエラーメッセージと、エラーの発生箇所が出力される。
Eclipseでは、コンパイルタイムエラーの発生箇所に「赤い波線のアンダーライン」が引かれ、そのの左端に「赤いバツマーク」が表示される。
 
コンパイルタイムエラーが発生する理由は「プログラムが文法的に誤っている」からである。コンパイラプログラムコンパイルする際に「プログラムが理解できない」ためにコンパイルタイムエラーが発生する。
エラーメッセージは「コンパイルできない理由」が出力されるため、必ずしも「プログラムが誤っている根本的な原因」を指しているわけではない。実際には、エラーメッセージが出力された箇所とは別の箇所が原因の可能性もある。
コンパイルタイムエラーを解決するためにはその点を踏まえて原因を特定する必要がある。「ありがちなコンパイルタイムエラー」は数が限られているため、ノウハウとしてエラーのパターンを憶えることが重要となる。
また、Eclipseではエディタの左端に「バツマーク」と「ランプマーク」が表示されている場合、左クリックで解決策が表示され、それを選択するだけで解決する場合もある。
 
コンパイルタイムエラーが発生することは「論外」であり、Java言語を完全に理解していれば決して発生しないものである。
Javaを学び始めた頃はコンパイルタイムエラーの解決に悩まされる事になるが、この解決こそがJavaプログラマーへの一歩であると言える。
ただしその際、闇雲に試してコンパイルタイムエラーを取り除くのではなく、言語仕様を理解した上で取り除くこと。無理矢理取り除いたコンパイルタイムエラーは、得てしてバグの原因となるためである。

参考サイト

  • (参考サイトはありません)

(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // ※本辞書の使用例では、「コンパイルエラー:」の上の行の「//」を
        // 取り除けば、コンパイルタイムエラーを再現できます。
        
        // コンパイルタイムエラーの例。
        // args;
        // コンパイルエラー:
        // 文としては無効な式です。

        // 一応クラスファイルは作られるため、実行することもできますが、
        // 実行時に例外が投げられます。
        // Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。
        //         文としては無効な式です。
        //         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        //         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        //         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        //         at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
        //         at Sample.main(Sample.java:7)

        // コンパイルタイムエラーの発生箇所が、直接の原因とは限りません。
        long I;
        // l = 100;
        // コンパイルエラー:
        // l は解決できません。

        // このコンパイルタイムエラーの理由は、long型の変数の変数名が
        // 「l」(小文字のエル)ではなく「I」(大文字のアイ)だからです。
        // これは「long l」とすることで解決します。
        long l;
        l = 100;

        // コンパイルタイムエラーは、ちゃんと理解して解決しないとダメです。
        Object object = new Object();
        // たとえば、ObjectクラスからIntegerクラスへは暗黙的キャストができません。
        // Integer integer = object;
        // コンパイルエラー:
        // 型の不一致: Object から Integer には変換できません。

        // これはキャストすると解決しますが、実行するとエラーになります。
        try
        {
            Integer integer = (Integer)object;
        }
        catch( ClassCastException e )
        {
            e.printStackTrace();
            // java.lang.ClassCastException
            //     at Sample.main(Sample.java:46)

            // このように、インスタンスの型とは関係ない型にキャストしたので
            // ClassCastException例外が投げられました。
            // このように、理解せずにコンパイルタイムエラーを取り除くための
            // プログラムを書かないようにしましょう。
        }
    }
}
// Sample.java
public class Sample
{
    public static void main( String[] args )
    {
        // ※本辞書の使用例では、「コンパイルエラー:」の上の行の「//」を
        // 取り除けば、コンパイルタイムエラーを再現できます。
        
        // コンパイルタイムエラーの例。
        // args;
        // コンパイルエラー:
        // 文としては無効な式です。

        // 一応クラスファイルは作られるため、実行することもできますが、
        // 実行時に例外が投げられます。
        // Exception in thread "main" java.lang.Error: コンパイル問題が未解決です。
        //         文としては無効な式です。
        //         at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        //         at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        //         at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        //         at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
        //         at Sample.main(Sample.java:7)

        // コンパイルタイムエラーの発生箇所が、直接の原因とは限りません。
        long I;
        // l = 100;
        // コンパイルエラー:
        // l は解決できません。

        // このコンパイルタイムエラーの理由は、long型の変数の変数名が
        // 「l」(小文字のエル)ではなく「I」(大文字のアイ)だからです。
        // これは「long l」とすることで解決します。
        long l;
        l = 100;

        // コンパイルタイムエラーは、ちゃんと理解して解決しないとダメです。
        Object object = new Object();
        // たとえば、ObjectクラスからIntegerクラスへは暗黙的キャストができません。
        // Integer integer = object;
        // コンパイルエラー:
        // 型の不一致: Object から Integer には変換できません。

        // これはキャストすると解決しますが、実行するとエラーになります。
        try
        {
            Integer integer = (Integer)object;
        }
        catch( ClassCastException e )
        {
            e.printStackTrace();
            // java.lang.ClassCastException
            //     at Sample.main(Sample.java:46)

            // このように、インスタンスの型とは関係ない型にキャストしたので
            // ClassCastException例外が投げられました。
            // このように、理解せずにコンパイルタイムエラーを取り除くための
            // プログラムを書かないようにしましょう。
        }
    }
}

この単語を含むページ

「みだし」に含まれているページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2006/01/12
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。