人に聞けない痔の悩み、これでスッキリ >>

Javaを学び始めて3日のものです。

別に知る必要はないかもしれないのですが、
java.langパッケージのようなimport文を必要としない
ライブラリはハードディスクのどのファイルの中に収まって
いるのでしょうか?

なぜ使用できるのかがわからないと気分が悪いです。

ちなみにWindows98でJDKは1.3.1で
「C:\Program Files\jdk1.3.1」にインストールしました。

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

A 回答 (1件)

そのディレクトリの jre\lib\rt.jar を適当な場所にコピーし、


「rt.zip」にリネームして展開してみましょう。

参考URL:http://java.sun.com/j2se/1.3/ja/docs/ja/tooldocs …
    • good
    • 1
この回答へのお礼

ありました!!

ありがとうございます!
おかげさまでJavaの構造を少し理解できました。

お礼日時:2001/06/21 06:35

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

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

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

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

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

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クラス」ができるっていうのが自然な考え方でしょう?

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

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

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になっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Q動的配列確保

JAVA初心者です。
VBでのRedim Preserve、CのreallocみたいなものはJAVAには無いのでしょうか?
要はあらかじめ配列数がわかっていない時に動的配列確保を行いたいのです。
Objectではなく、基本クラスのint、byte等の配列に使いたいと思っております。
ArrayListが近い事が出来そうだったのですが、Objectにしか使用出来ないので、
断念しました。教えてください。

Aベストアンサー

ラップするというのは、こんな感じです。

byte value = 1;
ArrayList list = new ArrayList();
list.add(new Byte(value));

byte や int に対応する、java.lang.Byte や java.lang.Integer などのクラスを使います。例えば new Byte(3) とやると、3 の byte 値を持つ Byte クラスのオブジェクトができます。あくまでもオブジェクトですので、そのままでは足し算や掛け算はできませんが、ArrayList にオブジェクトとして追加できるようになります。

オブジェクトから元の数値に戻すには、byteValue() や intValue() などのメソッドが各クラスに用意されているのでそれを使います。

もちろん、質問者さんが補足に書いたように、文字列に変換して ArrayList にいれる方法でもかまいません。ただし、Byte や Integer クラスのオブジェクトを使うと、
○「文字列⇔数値」の相互変換の必要が無いので、(一応)速い。
○元の数値が byte だったのか、int だったのか、short だったのか、…… が判別できる。
などの利点があります。

ラップするというのは、こんな感じです。

byte value = 1;
ArrayList list = new ArrayList();
list.add(new Byte(value));

byte や int に対応する、java.lang.Byte や java.lang.Integer などのクラスを使います。例えば new Byte(3) とやると、3 の byte 値を持つ Byte クラスのオブジェクトができます。あくまでもオブジェクトですので、そのままでは足し算や掛け算はできませんが、ArrayList にオブジェクトとして追加できるようになります。

オブジェクトから元の数値に戻すには、byteValue() や...続きを読む

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

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コマンドライン引数の例外処理について

整数a、bをコマンドライン引数として受け取るプログラムを作成するとします。この時、入力するコマンドライン引数を整数であるa、b2つのみとします。

次の事柄について教えて下さい。

(1)コマンドライン引数を2個入力しなかった時の例外処理の仕方
(例えば、コマンドライン引数を入力しなかったり3個入力した時)

(2)整数のコマンドライン引数を入力しなかった時の例外処理の仕方
(例えば、「abc」などと入力した場合)

(3)コマンドライン引数を数の小さいものから入力しなかった時の処理の仕方
(例えば、「3 5」ではなく「5 3」と入力した場合)

初心者なもので…。どなたかお教え下さい。宜しくお願いします。

Aベストアンサー

public static void main(String[] args) {
//引数の範囲チェック
int nLen = args.length;
if(nLen != 3){
System.out.prinln("引数の個数が違います");
return;
}
int nCheck = 0;
for(int nRpCnt=0;nRpCnt<nLen;nRpCnt+){
int nNum = 0;
try{
nNum = Integer.parseInt(args[nRpCnt],10);
}catch(NumberFormatException nfe){
System.out.prinln(
     "引数["+nRpCnt+"]が数字ではありません");
    return;
}
//昇順チェック

}

}

以上。。。。。

Qtimestampのデータはどのようにして入力

するのでしょうか?

create table tablex(no serial primary key,time timestamp);

insert into tablex(time) values(?);

において?の部分に入れる文字列のフォーマットはどうなるのでしょうか?

例えば
2005年5月5日5時55分55秒
を入れるにはどうしたらいいのでしょうか?

Aベストアンサー

'2005-05-05 05:55:55'

Qコマンドプロンプトから「javac」が使えなくて、困ってます。

JDK5.0をインストールして環境設定も終わり、使おうとしたら、エラーが出て困ってます。コマンドプロンプトからjavacを入力すると「'javac'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」というエラーメッセージが出てきて困ってます。javaに詳しい方、教えてください。よろしくお願いします。本当に困ってます。

Aベストアンサー

PATHの設定が違っているためだと思います。javac.exeが入っているフォルダを確認し、PATHの確認をしてください。以下のリンクが参考になると思います。

http://tyche.pu-toyama.ac.jp/~ko-ji/java-in/
http://www.gihyo.co.jp/book/2000/179111/download/index1.html

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。


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

人気Q&Aランキング