はじめまして。

最近JAVAを始めようと思ったんですが、早くも行き詰まってしまいました。

コンパイルは出来るんですが、実行されないのです。
以下のような文章が出てきます。

Exception in thread "main" java.lang.NoClassDefFoundError: Hello

ちなみに、買った本のサンプルプログラムでも同じでした。

これは何が原因なんでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

これは初心者の人がよく引っかかるところですね。


JavaFAQのサイトがあるので、そちらをご覧ください。
今回の件以外にも、いろいろ参考になることが載って
いますので、目を通しておくとよいです。

参考URL:http://www.gimlay.org/~javafaq/S002.html#S002-08
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

初心者がよく引っ掛かるトコだったんですね!

無事に実行できるようになりました。

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:13

CLASSPATHは何も指定しないときのデフォルトがカレントディレクトリ、


指定した場合、指定した物のみ
(なので、カレントディレクトリもCLASSPATHに含める場合は
指定しなければならない)、

となるはずなのですが。

カレントディレクトリでjavaを実行しているか、CLASSPATHにclassファイルの有る
ディレクトリを参照しているか、確認してください。
あとは、".class"は実行時に指定しませんので念のため。
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

皆さんの言う通りでした。

無事に実行できました!

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:15

arya_520さんは、最近Javaを始めたということなので、JDKのバージョンは1.3であると思います。


DOSプロンプト(コマンドプロンプト)にて、javacでコンパイルした後、
> java Hello
というコマンドでjava.lang.NoClassDefFoundErrorの例外が発生するのであれば、
> java -classpath . Hello
というように、-classpathオプションで、カレントディレクトリを指定することにより、クラスパスが見つかります。
なお、毎回例外が発生するようであれば、setコマンドで環境変数CLASSPATHの設定内容を確認し、
> set CLASSPATH=.;%CLASSPATH%
というコマンドを実行すれば、javaコマンドで-classpathオプションが不要となります。
    • good
    • 0
この回答へのお礼

返事遅れてスイマセン。

結局、『set CLASSPATH=.;%CLASSPATH%』としたら完全に消えました。

どうもありがとうございました。m(__)m

お礼日時:2001/12/11 11:19

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

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

Qコンパイルした後 java (classファイルの名前) が実行できない

すみません。本当につまらない質問かもしれませんが
コンパイルまではDOS窓でできるんですが。できたCLASS
ファイルを java (できたclassファイル名) を実行しよう
としても、
Exception in thread "main" java.lang.NoClassDefFoundError: (できたファイルの名前)
と表示されてしまい、まったく実行できません。
これはどうしたら実行できるのでしょうか?
なお、最新版のSDKとJava 2 Runtime Environmentはインストールしています。
どうかお願いします。

Aベストアンサー

1. .classまでクラスファイル名つけてませんか?
2. カレントディレクトリがclassファイルのある場所にあるかまたはクラスパスがclassファイルのある場所に追加されていますか?
3. クラスファイル名間違ってませんか?
4. CLASSPATHを設定した場合、.(現在のディレクトリ)を指定していますか?
5. 2番目の回答者の方と同じです、ファイル名とクラス名一致してますか?

JDKが古いバージョンの物も必要というのはちょっと聞いたことがないですが・・・。

Qコンパイルできない

javaファイルをコンパイルしようとして
コマンドを入力すると
C:\java>javac file928.java
'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
となってしまいます・・・

SDKのインストール
パスの設定は行っているのですが・・・
OSはXPのホームエディション/SP2です
わかる方いらしたらよろしくお願いします

Aベストアンサー

とりあえず、ここを読んでPATHを設定しなおしてみて下さい。
http://www.smg.co.jp/seminar/java/index.html

設定する際はフォルダ名を良く確認して下さいね。
あと、何度も言いますが、必要な環境変数はPATHだけですので。くれぐれもCLASSPATHは設定しないで下さい (たとえ参考書に書いてあったとしても)。へたにCLASSPATHを設定するとろくなことがないので。

よく分からなかったらまた聞いて下さい。

参考URL:http://www.smg.co.jp/seminar/java/index.html

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qpackageとimportの関係のコンパイルエラー

現在JAVAの勉強をしております。
サンプルソースを入力しながら行っております。
カレントディレクトリでコンパイルは正常にできました。
しかし、「packageとimport」の処理を追加しファイルを
ディレクトリに移したところうまくコンパイルが通らなく
なりました。
パスの間違えかとも思いつつ色々調べているのですが、原因
がつかめません。

検索サイトを使って色々な事例を見てみたのですが、解決
出来ませんでした。
すみませんが、ご指導のほどお願いします。
詳細は下記の通りです。
漏れなどありましたらご指摘していただければ補記します。

JDK:1.3.1
OS:Windows2000ProSP2

------------------------------------------------------
ディレクトリ
D:\JAVAPRESS
└─jp
└─co
└─gihyo
└─javapress
├─test
│ ATMTest.java

└─account
Account.java
CommissionAccount.java


コンパイル
D:\JavaPress\jp\co\gihyo\javapress\test>javac -classpath D:\JavaPress\Account ATMTest.java
ATMTest.java:2: シンボルを解釈処理できません。
シンボル: クラス ATMFrame
位置 : atm の パッケージ
import jp.co.gihyo.javapress.atm.ATMFrame;

パッケージ
ATMTest.javaの内容
package jp.co.gihyo.javapress.test;
import jp.co.gihyo.javapress.atm.ATMFrame;
import jp.co.gihyo.javapress.account.*;
class ATMTest {

Account.javaの内容
package jp.co.gihyo.javapress.account;
public class Account {

現在JAVAの勉強をしております。
サンプルソースを入力しながら行っております。
カレントディレクトリでコンパイルは正常にできました。
しかし、「packageとimport」の処理を追加しファイルを
ディレクトリに移したところうまくコンパイルが通らなく
なりました。
パスの間違えかとも思いつつ色々調べているのですが、原因
がつかめません。

検索サイトを使って色々な事例を見てみたのですが、解決
出来ませんでした。
すみませんが、ご指導のほどお願いします。
詳細は下記の通りです。
漏れなど...続きを読む

Aベストアンサー

> その書籍には、
> 「クラスパスは、jpの親パスとパッケージがあるディレクトリ名」
> と記述されており、例題と同じように記述してみました。
> そのため、記述したディレクトリは存在しません。

何かその書籍は嘘をついていませんか? (というより、「クラスパスは、jpの親パスとパッケージがあるディレクトリ名」という日本語自体がわかりづらい)

クラスパスというのは、class ファイルを配置するディレクトリ構造のルートを指定するものです。
今回の場合は、D:\javapress というディレクトリの中にパッケージに対応したサブディレクトリを作っているので、D:\javapress がクラスパスになります。

D:\javapress\jp\co\gihyo\javapress\test>javac -classpath D:\javapress ATMTest.java
でコンパイルできませんか?

他にも
D:\javapress>javac -classpath . jp\co\gihyo\javapress\test\ATMTest.java
D:\javapress>javac -classpath D:\javapress jp\co\gihyo\javapress\test\ATMTest.java
などやり方はいろいろあるのですが……

これでもだめならパスの設定云々の問題ではないような気がします。

> その書籍には、
> 「クラスパスは、jpの親パスとパッケージがあるディレクトリ名」
> と記述されており、例題と同じように記述してみました。
> そのため、記述したディレクトリは存在しません。

何かその書籍は嘘をついていませんか? (というより、「クラスパスは、jpの親パスとパッケージがあるディレクトリ名」という日本語自体がわかりづらい)

クラスパスというのは、class ファイルを配置するディレクトリ構造のルートを指定するものです。
今回の場合は、D:\javapress というディレクト...続きを読む

Qクラスパスの通し方

いつも楽しく拝見させていただいています。
クラスパスのことで質問があります。宜しくお願いします。

クラスパスの通し方が理解できていなくて、もしEclipse上でクラスパスを通す方法があるのであれば教えていただけないでしょうか?よくパスが通っていなくてstrutsのアクションが動かない場合があるんです…。環境変数上でCLASSPATHを通す方法もあるようですがよくわかりません。以前はクラスパスとは何なのか?ということを質問させて頂いたのですが、実際にクラスパス(俗に言うパスを通す?)はどうやって通すのか教えて頂けたらうれしいです。どうか宜しくお願いします。

Aベストアンサー

#2です。
かなりあいまいで恥ずかしくなったのでちゃんと見てみました。
使用したEclipseはversion 3.2.1 英語版です。

プロジェクトに対してクラスパスを設定するには前述したとおり
作成したプロジェクトを右クリックし⇒Properties⇒左側のツリーからJavaBuildPathを選択⇒Librariesタブを選択⇒Add???の好きなものを選びます。
AddJARsはプロジェクト内にあるJarファイルを選択するもので
AddExternalJarsはエクスプローラからJarファイルを選択します。
他にもAddClassHolderでフォルダの指定などがあります。

全てのプロジェクトに反映させたい場合は一番上のメニューから
window⇒preference⇒ツリーのJava⇒BuildPath⇒Classpath Variables⇒右側のNewボタンを押すことでjarやZipの追加ができます。

よく使うのではとりあえずこんなところでしょうか。
今説明したもの以外にもよくみると他プロジェクトを参照させる等いろいろあったりしますのでいろいろ触ってみると良いと思います。

#2です。
かなりあいまいで恥ずかしくなったのでちゃんと見てみました。
使用したEclipseはversion 3.2.1 英語版です。

プロジェクトに対してクラスパスを設定するには前述したとおり
作成したプロジェクトを右クリックし⇒Properties⇒左側のツリーからJavaBuildPathを選択⇒Librariesタブを選択⇒Add???の好きなものを選びます。
AddJARsはプロジェクト内にあるJarファイルを選択するもので
AddExternalJarsはエクスプローラからJarファイルを選択します。
他にもAddClassHolderでフォルダの指定など...続きを読む

Qエラーで式の開始が不正ですと出ます。

質問内容 課題
・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。
・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。

・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。




・ファイル student.txt の内容。
 学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部
0533101 守山春子 生活環境学部
0561101 大森夏子 人間科学部
0552130 名城秋子 現代文化学部
0571201 鶴舞冬子 薬学部

プログラムソース↓
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

class kadai2Frame extends JFrame {
private JTextField tf1,tf2,tf3;
public kadai2Frame() {
setSize(200,100);
addWindowListener(new WindowAdapter() { // ×クリック時の終了処理
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});


Container c=getContentPane();
c.setLayout(new GridLayout(4,2)); // グリッドレイアウト4 行2 列を指定
c.add(new JLabel("学籍番号")); // 最初のラベルを作成して[名前]と表示
c.add(tf1=new JTextField("",8));
c.add(new JLabel("氏名")); // 最初のラベルを作成して[名前]と表示
c.add(tf2=new JTextField("",8));
c.add(new JLabel("学部")); // 次のラベルを作成して[年齢]と表示
c.add(tf3=new JTextField("",8));
JButton bt;
c.add(bt=new JButton("検索")); // ボタンbt を作成して[検索]と表示
bt.addActionListener(new ActionListener() { // ボタンbt のリスナーを登録
public void actionPerformed(ActionEvent e) { // ボタンが押された時

string s6 = tf1.getText();
if(s1.equals(s6)){tf2.setText(str1Ary[1]);

string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);



string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);




string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);



string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);


}


public static void main(String[] args) {
JFrame w=new kadai2Frame();
w.setVisible(true);


try{
BufferedReader br =
new BufferedReader(new FileReader("student.txt"));
}
catch (FileNotFoundException e) {


String str1 = br.readLine();
String str2 = br.readLine();
String str3 = br.readLine();
String str4 = br.readLine();
String str5 = br.readLine();

String[] str1Ary = str1.split(" ");
for (int i=0; i<str1Ary.length; i++) {
System.out.println(str1Ary[i]);
}



String[] str2Ary = str2.split(" ");
for (int i=0; i<str2Ary.length; i++) {
System.out.println(str2Ary[i]);
}

String[] str3Ary = str3.split(" ");
for (int i=0; i<str3Ary.length; i++) {
System.out.println(str3Ary[i]);
}

String[] str4Ary = str4.split(" ");
for (int i=0; i<str4Ary.length; i++) {
System.out.println(str4Ary[i]);
}

String[] str5Ary = str5.split(" ");
for (int i=0; i<str5Ary.length; i++) {
System.out.println(str5Ary[i]);
}


String s1 = "str1Ary[0]";
String s6 = "tf1";
String s2 = "str2Ary[0]";
String s3 = "str3Ary[0]";
String s4 = "str4Ary[0]";
String s5 = "str5Ary[0]";

}
}
});
}
}

以上です。誰か教えてください!!(ToT)

質問内容 課題
・ファイル student.txt に学生データ(学籍番号、氏名、所属学部)が入っている。
・半角文字で学籍番号を入れて、検索ボタンを押すと、氏名と学部が表示される。

・存在しない学籍番号を入れて、検索ボタンを押すと、「該当なし」が表示される。




・ファイル student.txt の内容。
 学籍番号 氏名 学部の間は半角スペースで区切る。 0521201 金城花子 文学部
0533101 守山春子 生活環境学部
0561101 大森夏子 人間科学部
0552130 名城秋子 現代文化学部
0571201 鶴舞冬子 薬学...続きを読む

Aベストアンサー

動かないこと前提に。
まず,
if文の構文がおかしいので直します。最後に}をつける

if(s1.equals(s6)){tf2.setText(str1Ary[1]);}
string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);}
string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);}
string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);}
string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);}

53行目の閉じ括弧に対応するのは
28行目の括弧です。

つまり public static void mainも
bt.addActionListener(new ActionListener(){ 27行目
}) 111行目
の中に入っているのでしょうが,
おそらくメソッドを二つ入れる形になっているのでエラーがでているんだと思います。

111行目を取り除いて
54行目に
});
を記述します

次に mainの前に
public kadai2Frame() {
を閉じていないことがわかるので
55行目に
}
を補います。
これで応急処置は終わりです。それまでに閉じているはずのものを全然閉じてないからエラーが出ていたんです。

61行目のtry{は64行目
65行目のcatch{はfor文は対応関係が正しいから無視して}109行目。
mainの終了は
110行目。
すると
112行目がクラスの終わりだから
113行目はいらない。

そうすると,シンボルが見つからない云々というエラーだらけになります。

これは,変数の宣言位置とスコープの問題なのでそのエラーとは別に解決してください。

変数宣言をきちんとやれば,コンパイルは通るはずです。
#思い通りには動かないと思うけど。

動かないこと前提に。
まず,
if文の構文がおかしいので直します。最後に}をつける

if(s1.equals(s6)){tf2.setText(str1Ary[1]);}
string s6 = tf1.getText();
if(s2.equals(s6)){tf2.setText(str2Ary[1]);}
string s6 = tf1.getText();
if(s3.equals(s6)){tf2.setText(str3Ary[1]);}
string s6 = tf1.getText();
if(s4.equals(s6)){tf2.setText(str4Ary[1]);}
string s6 = tf1.getText();
if(s5.equals(s6)){tf2.setText(str5Ary[1]);}

53行目の閉じ括弧に対応するのは
28行目の括弧です。

...続きを読む

Qメインクラス○○.classが見つからなかったか…

JAVA 初心者です。

簡単な Hello World プログラムを作って実行しましたが、
「エラー: メインクラスHello.classが見つからなかったかロードできませんでした」
と表示されエラーになっています。

>javacc -version
javac 1.7.0_03
>java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

>cd c:\Users\me\Documents\java_test
>javac Hello.java
としてコンパイルは通るのですが、
>java Hello.class
とすると、上記エラーメッセージが表示されます。

システム環境変数には
C:\glassfish3\jdk7\bin
を追加しました。

初歩的なところでつまずいていると思うのですが、ご教示のほどよろしくお願いします。

JAVA 初心者です。

簡単な Hello World プログラムを作って実行しましたが、
「エラー: メインクラスHello.classが見つからなかったかロードできませんでした」
と表示されエラーになっています。

>javacc -version
javac 1.7.0_03
>java -version
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)

>cd c:\Users\me\Documents\java_test
>javac Hello.java
としてコンパイルは通るのですが、
>java Hello.class...続きを読む

Aベストアンサー

java Hello.class ではなく
java Hello としてみてください

Helloパッケージのclassクラスを実行しようとしましたが見つかりませんというエラーになってます。

QJavaで改行などが出来ないのです。

 Java の事で質問です。 
 

 System.out.println("このようにしても\n");

 改行できません。
 
 このようにしても\n   

 と表示されてしまいます。どうしてでしょう。ちなみにOSはMacOS9.1です。なにか関係があるのでしょうか?

Aベストアンサー

> class amigo{
> public static void main(String args[]) {
> System.out.print("aaaaaaaa");
> System.getProperty("line.separator");
> System.out.print("bbbbbbbb");
> }
> }
> のような使い方でしょうか?

String line_sep = System.getProperty("line.separator");
System.out.println("あいうえお" + line_sep + "かきくけこ");

こうです。

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Qjavaの簡単なソースがコンパイル出来ません

Javaを始めてみましたが、最も簡単なjavaのソースがどうしてもコンパイル出来ません。
どうしたらいいのか教えて下さい。

デスクトップの以下の Hello.java に対して、
public class Hello {
public static void main(String[] args) {
System.out.println("Hello,World");
}
}

以下の3通りの方法でコンパイルを掛けてみると、

‥デスクトップ>javac Hello.java
javac:ファイルが見つかりません:Hello.java
使い方:javac <ptions> <source files>
使用可能なオプションのリストについては-helpを使用します

>javac Hello.java.txt
エラー:クラス名 ‘Hello.java.txt’が受け入れられるのは、注釈処理が明示的に要求された場合だけです
エラー1個

>javac Hello
エラー:クラス名 ‘Hello’が受け入れられるのは、注釈処理が明示的に要求された場合だけです
エラー1個

でどの場合もコンパイルされません。
なお、javaのバージョンは “1.6.0_06”で、パスも
C:\Program Files\Java\jdk1.6.0_06\bin\;
と設定してあります。

どうしたらコンパイルが出来るのか、教えて下さい。

Javaを始めてみましたが、最も簡単なjavaのソースがどうしてもコンパイル出来ません。
どうしたらいいのか教えて下さい。

デスクトップの以下の Hello.java に対して、
public class Hello {
public static void main(String[] args) {
System.out.println("Hello,World");
}
}

以下の3通りの方法でコンパイルを掛けてみると、

‥デスクトップ>javac Hello.java
javac:ファイルが見つかりません:Hello.java
使い方:javac <ptions> <source files>
使用可能なオプシ...続きを読む

Aベストアンサー

>対象のHello.javaですが、ファイル名は確かにこの通りでした(当該ファイル上で右クリック→プロパティでもHello.javaです)。

XPなら、マイコンピュータかどこかをエクスプローラで開き、メニューで
ツール→フォルダオプション→表示タブ→登録された拡張子を表示しない
のチェックをはずしてみてください
デフォルトでは拡張子(.txtなど)は表示されていません

Vistaでも同じような設定がどこかにあると思います。


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

人気Q&Aランキング