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