>>949 そのmainメソッド、一番最後でSystem.exit(0);してる。
ああいう雑誌のサンプルプログラムはあくまでも機能の使い方を学ぶ
ものなんだから、そしゃくしてちゃんと自分でコード起こさないと駄目だよ。
オレジャヴァ暦1ヶ月なんだけど、今からブロック崩し作ろうと思うんだ。 そいでまずはブロックとボール動かすとこまでは来たわけ。 次はさ、マシーンみたいのをキーボードで操って そっからボールが出てくるみたくしたいんだけど キーボードからの入力がぜんぜんわからんくてさ 教えてください。
954 :
デフォルトの名無しさん :03/05/10 21:07
>>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 のコンパイラがソースをどの程度最適化してくれるのか 知りたいのですが, どこで勉強できるのでしょうか? 最適なコードを見やすく書きたいのでよろしくお願い致します.
>>965 さん 感謝.
なるほど, 見てみます.
964 質問の追記.
# 私が知りたいことを簡単に書きますと,
2 つの連続したSystem.out.print() が
バイトコードに変換された際には1 つに結合される
と言ったことなんですけど.
って、Hotspot VMの最適化について知りたいわけじゃなかったのね。 忘れてちょ。
969 :
デフォルトの名無しさん :03/05/10 23:52
超初心者の質問イイっすか? インターフェイスってなんの為にあるんですか? インターフェイスの宣言で、メソッドの中身って書かないじゃないですか。 じゃあ、なんで実装する必要があるの?? 継承はメソッドの中身等も全て引き継ぐから分かるんですけど。 アホな質問スマソ。
>>969 オレも初心者だが、Javaでは多重継承(二つ以上継承すること)ができないため
インタフェイスがあると思われ。インタフェイスなら複数実装可能だから、
ほとんどすべてのクラスに共通するような変数とかまとめてインタにしておいて
全部で実装とかだと思ってるんだけど
合ってまつか?(((((( ;゚Д゚)))))ガクガクブルブル
クラスを使う人が便利になる。
>>963 ごめん。ソースまるごとうpできるやつないでつか?
>>969 そのインターフェース実装してるクラスは、必ずそのインターフェースで定義されてるメソッドを実装している。
つまり窓口があらかじめ決められてるのと同じなので、他の人から見ても扱いやすくなる。
なるほど。じゃあ更に質問イイっすか? スレッドではRunnable、アクションイベントではActionListenerといった様に 実装させないといけないのは何故ですか? 「クラスを使う人が便利になる・扱いやすくなる」 っていうだけだったら、別に必要ないような気もするんですけど・・。 あぁ、なかなか理解できない・・。
>>975 ん?実装すればいいだけだから便利だろ?
スレッドの時はRunnnable使えばいいってそれだけ覚えておけば
自分のやりたいことが出来るしょ?
たとえばスレッド処理をしたい場合に 別に Runnable を実装しなくても run() メソッドを書けばいいのでは? と思っているのかもしれない。 言語によっては実際にこういうことも可能である。 しかし Java では人間が run() メソッドを書き忘れるという可能性をなくすために スレッド処理では Runnable を実装して run() メソッドがあることを保証する というアプローチになっている。
>>975 適切な Interface を実装しているかどうかコンパイル時にチェックできる。
う〜ん、結局何の利点があるのかは微妙に分からないです・・。 よく参考書等に、「javaは多重継承を認めていないが、インターフェイスの 実装により、多重継承を可能にしている」みたいな文が書かれているが、 中身を引き継いでいないなら意味ないジャン!って思ってしまいます。 こんな超初心者に色々答えてくれてアリガトウございました。
>>979 気持ちはよくわかる。漏れも勉強したての頃は必要性がよくわからなかった。
>>979 要するに、「このインターフェースを継承してるクラスは、確実にこういうメソッドを実装していることを保証しますよ」ということだ。
982 :
デフォルトの名無しさん :03/05/11 00:45
interfaceはデザインパターンでも有効に使われてるし、ものは使いよう。 個人的には、C++とOMTなんて時代の人間なので多重継承できなくて モデリングで悩む事がしばしばあるが。
>>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" ); } } 簡略化するとこんな感じのクラスを作りました。 しかし、コンストラクタが呼ばれていないようでなにも表示されません。 仕方がないので、コンストラクタは空っぽにして、メソッドで実行しています。 これはどこがマズいのでしょうか、ご指摘をお願いします。
また、コンストラクタを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
992 :
デフォルトの名無しさん :03/05/11 01:17
>>988 つまり、おまえさんのコードは、
常にデフォルトコンストラクタを呼び出す作りってことよ。
>>987 SJC-Pの問題に出てきそうなネタだ。
くくしゲーーーット!!
Java厨は氏ねよ
JavaはC#のパクリ
import microsoft.csharp.specification.*;
import sun.java.license.*;
Javaは死滅
C#はJavaのパクリ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。