【初心者】Java質問・相談スレ23【大歓迎】

このエントリーをはてなブックマークに追加
>>949 そのmainメソッド、一番最後でSystem.exit(0);してる。
ああいう雑誌のサンプルプログラムはあくまでも機能の使い方を学ぶ
ものなんだから、そしゃくしてちゃんと自分でコード起こさないと駄目だよ。
オレジャヴァ暦1ヶ月なんだけど、今からブロック崩し作ろうと思うんだ。
そいでまずはブロックとボール動かすとこまでは来たわけ。
次はさ、マシーンみたいのをキーボードで操って
そっからボールが出てくるみたくしたいんだけど
キーボードからの入力がぜんぜんわからんくてさ
教えてください。
954デフォルトの名無しさん:03/05/10 21:07
>>953
Cで実装して、JNIで拾え
>>953
KeyEvent とか KeyListener とか。
えーと、Canvsクラスを継承してpaintをオーバライドしますよ?
paintってどこでも呼び出せてないのに、どうしてちゃんとイメージが描写されるんでつか?
>>956
awtたんとかswingたんが呼んでまつ。
>>956
ウィンドウ(Frame)の再描画イベントで呼び出されます。
>>956
ん?どゆことでつか?
awtが呼ぶようになってるのはどうしてでつか?
Canvasを継承したらそういうふうになるの?
ごめんなさい。見つけますた。
paint()メソッドは Canvasが Componentから継承したメソッドです。
すべての JDKのコンポーネントは、再描画が必要になった時(
それを知らせるイベントが伝達された時)、
この paint()メソッドが自動的に呼び出される仕組みになっています。つまり描画処理のメソッド名はあらかじめ定められているわけです。また描画に必要となる Graphicsのオブジェクトは、 paint()の引数として与えられます。
原則として描画の処理はすべて
paint()のような描画専用のメソッド
(もしくはそこから間接的に呼び出される下請けのメソッド)
の内部にまとめて記述します。そうしておかないと、
再描画の処理が完全に実行できないからです。
>>956 java.awt.GraphicsCallback
ソースうpするとこないの?
964デフォルトの名無しさん:03/05/10 23:08
java のコンパイラがソースをどの程度最適化してくれるのか
知りたいのですが, どこで勉強できるのでしょうか?

最適なコードを見やすく書きたいのでよろしくお願い致します.
>>964
結構改善の動きが早いから昔の情報は役に立たないし、
http://www.gimlay.org/~andoh/hatena/JavaPerformanceTuning/
から関係ありそうな話題をピックアップしてくとかかなあ。
もちろん自分でバイトコードとかベンチマークを調べるのは当然として。
966964:03/05/10 23:32
>>965 さん 感謝.

なるほど, 見てみます.

964 質問の追記.
# 私が知りたいことを簡単に書きますと,
2 つの連続したSystem.out.print() が
バイトコードに変換された際には1 つに結合される
と言ったことなんですけど.
>>964
まずはここからJDKのソースを入手する。
http://wwws.sun.com/software/java2/download.html

で、展開されたソースの hotspot/src/share/vm 以下とか
hotspot/src/cpu/i486/vm 以下を読んでみると良いんでない?
968967:03/05/10 23:49
って、Hotspot VMの最適化について知りたいわけじゃなかったのね。
忘れてちょ。
969デフォルトの名無しさん:03/05/10 23:52
超初心者の質問イイっすか?
インターフェイスってなんの為にあるんですか?
インターフェイスの宣言で、メソッドの中身って書かないじゃないですか。
じゃあ、なんで実装する必要があるの??
継承はメソッドの中身等も全て引き継ぐから分かるんですけど。
アホな質問スマソ。
>>969
オレも初心者だが、Javaでは多重継承(二つ以上継承すること)ができないため
インタフェイスがあると思われ。インタフェイスなら複数実装可能だから、
ほとんどすべてのクラスに共通するような変数とかまとめてインタにしておいて
全部で実装とかだと思ってるんだけど

合ってまつか?(((((( ;゚Д゚)))))ガクガクブルブル
クラスを使う人が便利になる。
972953:03/05/10 23:57
>>963
ごめん。ソースまるごとうpできるやつないでつか?
http://www.h5.dion.ne.jp/~tuyano/JavaTutor/JavaTutorZ3.html
↑ここに書いてあるとおりにjarファイルを作ってみたんですが、
ダブルクリックしても
Could not find the main class. Program will exit!
とか出て実行できないんです。
ちゃんとMain-Class: P1って指定してるのに。
なぜだかわかる人いませんか?
コマンドプロンプトでなら実行できるんですが、めんどいんです。
>>969
そのインターフェース実装してるクラスは、必ずそのインターフェースで定義されてるメソッドを実装している。
つまり窓口があらかじめ決められてるのと同じなので、他の人から見ても扱いやすくなる。
975969:03/05/11 00:08
なるほど。じゃあ更に質問イイっすか?
スレッドではRunnable、アクションイベントではActionListenerといった様に
実装させないといけないのは何故ですか?
「クラスを使う人が便利になる・扱いやすくなる」
っていうだけだったら、別に必要ないような気もするんですけど・・。
あぁ、なかなか理解できない・・。
976953:03/05/11 00:10
>>975
ん?実装すればいいだけだから便利だろ?
スレッドの時はRunnnable使えばいいってそれだけ覚えておけば
自分のやりたいことが出来るしょ?
たとえばスレッド処理をしたい場合に
別に Runnable を実装しなくても run() メソッドを書けばいいのでは?
と思っているのかもしれない。
言語によっては実際にこういうことも可能である。

しかし Java では人間が run() メソッドを書き忘れるという可能性をなくすために
スレッド処理では Runnable を実装して run() メソッドがあることを保証する
というアプローチになっている。
>>975
適切な Interface を実装しているかどうかコンパイル時にチェックできる。
979969:03/05/11 00:28
う〜ん、結局何の利点があるのかは微妙に分からないです・・。
よく参考書等に、「javaは多重継承を認めていないが、インターフェイスの
実装により、多重継承を可能にしている」みたいな文が書かれているが、
中身を引き継いでいないなら意味ないジャン!って思ってしまいます。
こんな超初心者に色々答えてくれてアリガトウございました。
>>979
気持ちはよくわかる。漏れも勉強したての頃は必要性がよくわからなかった。
>>979
要するに、「このインターフェースを継承してるクラスは、確実にこういうメソッドを実装していることを保証しますよ」ということだ。
982デフォルトの名無しさん:03/05/11 00:45
interfaceはデザインパターンでも有効に使われてるし、ものは使いよう。
個人的には、C++とOMTなんて時代の人間なので多重継承できなくて
モデリングで悩む事がしばしばあるが。
983名無しさん@monalipse:03/05/11 00:46
>>979
中身を引き継がなくてもいい場合というのがある。例えば件のActionListenerなんてそう。
ActionListener.actionPerformed()にデフォルトの実装があったって誰も使わないでしょ。
だから、
>中身を引き継いでいないなら意味ないジャン!
ってことは無い。
インタフェースは役割を果たせるとか能力があるといったこと(英語が話せる)ことを示すもので、
実装を引き継ぐこと(アメリカ人である、とか、帰国子女である)とは区別します。
985デフォルトの名無しさん:03/05/11 00:56
インターフェースは多重継承の代わりではない。
チーム開発の場合、インターフェースの威力は凄まじい。
変更に強いコードも作り易い。
インターフェースに対してプログラミングしろ!
986デフォルトの名無しさん:03/05/11 00:59
インターフェースの理解を深めたかったら、java.sqlパッケージを見てみろ。
987デフォルトの名無しさん:03/05/11 01:01
test.javaファイル

public class test{
public static void main (String args[]){
Chart c = new Chart();
}
}

Chart.javaファイル

public class Chart{
public void Chart(){
System.out.println( "called" );
}
}

簡略化するとこんな感じのクラスを作りました。
しかし、コンストラクタが呼ばれていないようでなにも表示されません。
仕方がないので、コンストラクタは空っぽにして、メソッドで実行しています。
これはどこがマズいのでしょうか、ご指摘をお願いします。
988続きです:03/05/11 01:01

また、コンストラクタをChart(String name)として、
文字列を引数に取るコンストラクタにして、
インスタンス化のときも、Chart c = new Chart( "aaaa" );
のような感じにするとシンボルが解決できませんと
コンパイルエラーになってしまいます。
これについても、ご指摘をお願いします。

環境は
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-39)
Java HotSpot(TM) Client VM (build 1.4.1_01-14, mixed mode)
となっています。

FAQのコンストラクタ編とか、過去ログを「コンストラクタ」で検索はしました。
public void Chart(){}
そもそもこれがコンストラクタだと思っているのかと小一時間
>988
1000直前で質問ってのはかなりきわどいぞ。
あ、あとエラーメッセージはちゃんとこぴぺしてね。
といいつつ、おれ、スレ立てられないから誰かよろしく。
じゃ、おやすみ。
991デフォルトの名無しさん:03/05/11 01:14
>>989
ワロタ
992デフォルトの名無しさん:03/05/11 01:17
>>988
つまり、おまえさんのコードは、
常にデフォルトコンストラクタを呼び出す作りってことよ。
993名無しさん@monalipse:03/05/11 01:19
>>987
SJC-Pの問題に出てきそうなネタだ。
くくしゲーーーット!!
Java厨は氏ねよ
JavaはC#のパクリ
import microsoft.csharp.specification.*;
import sun.java.license.*;
Javaは死滅
C#はJavaのパクリ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。