【初心者】Java質問・相談スレッド64【大歓迎】
2 :
◆magic.fu7c :2005/03/24(木) 15:11:30
Aゲト
3 :
デフォルトの名無しさん:2005/03/24(木) 15:23:53
Classクラスはどのようなクラスなのでしょうか。
APIドキュメントや参考書を読んでもイマイチ理解できませんでした。
どなたか教えて下さいお願いします。
>>3 Classクラスは、そのクラスの構成を表しているクラスです
例えば、(実装は違ったと思うけど)内部に、
Method[] methods:
Field[] fields;
等というフィールドを持っていて、Stringクラスを表すインスタンスなら、
methodsには、indexOf() とか、toCharArray()
とかのメソッドを表すオブジェクトが入ってるし、
Threadクラスを表すインスタンスなら、methodsには、join()とか、wait()
とかのメソッドを表すオブジェクトが入ってる、という感じ
実際使ってみるのが一番だと思うので、やってみたら?
例えば、こんな課題
コマンド引数で入力された文字列で表されるクラスで定義されている
publicなメソッドを全て表示するプログラムを作れ
Classがわからないというのなら必要に迫られてないってことかと
リソースとかクラスローダとかそういう仕組みがわかってはじめて使えるかと
wikiが404なんだけど、独習Java第3版って初心者が見るにはいい本ですか?
>>6 個人的にはあまりおすすめしない。
Javaのコーディングレベルとか勉強したいんだったら、
SunのJava2とかの試験対策本買って解くほうがいいような気も。
クラスやオブジェクト指向の概念を勉強したいんだったら、
Javaとか関係ないオブジェクト指向の本買うほうがいいよ。
JavaScriptだってオブジェクトを含んだスクリプト言語ではある。
>>6 推薦図書スレ向きな気がしないでもないけど答えとく。
例題を解いて覚えるスタイルがあっているという人にはお勧めかも。
Cなどの他言語経験者にはいいかもしれない。
ただ、ライブラリ周りの解説が相変わらず古いままというのが残念なところ。
個人的にはこっちの方がいいと思う。
明解JAVAプログラミング入門 2nd Edition
ttp://www.amazon.co.jp/exec/obidos/ASIN/479800779X プログラム初心者に対してもわかりやすくていい。
コマンドライン初心者向けのQ&Aもあるので、
>>1にあるような
Java以前の質問をすることはないと思う。
けど、例題がないのは人によって評価が分かれそう。
9 :
デフォルトの名無しさん:2005/03/24(木) 19:32:31
public class HOGEHOGE{
static final int hoge_int=10;
//コンストラクタ1
public HOGEHOGE(String hoge_string){
this(hoge_string,hoge_int);
}
//コンストラクタ2
public HOGEHOGE(String hoge_string,int hoge_int){
〜
}
public static void main(string[] args ){
String hoge_string;
HOGEHOGE hoge=new HOGEHOGE(hoge_string);
〜
}
}
上のプログラムはコンストラクタを二つ作って
コンストラクタ1の方はコンストラクタ2を呼び出す事しかしていません
今勉強しているサンプルがこういうプログラムなんですかこれって
メイン文から直接コンストラクタ2でオブジェクト作成してもかわりませんよね
なにか上のプログラムのようにするメリットはあるのでしょうか?
>>9 hoge_intを指定しなくても規定値でオブジェクトが生成できるということです
全部書くことにすると面倒だったり書き間違えたりいろいろ大変そうじゃないですか
11 :
9:2005/03/24(木) 20:19:03
>>10 え〜よくわかんないよ
上例だとメイン文から
HOGEHOGE hoge=new HOGEHOGE(hoge_string,hoge_int);
の二つ目の引数を書く事が面倒という事ですか?
そうかな、コンストラクタ一つ作った方が面倒だし
若いにくい用に思えるんですが・・・
例えばたくさんこのオブジェクトを作るコードがあったとして
hoge_intからhogehoge_intに書き換える
このときはコンストラクタ1の一文のhoge_intを書き換えればいい
これは手間が省けるかもしれないけどどうなんだろう
でも思い返してみたらj標準のAPIのコンストラクタ・メソッドにも
こういうパターンがありますね
ともかく有難うございました
>>11 このクラスを使う側から見ると、指定する必要のない引数まで指定するのは無駄でしかないし、
結果としてプログラムが煩雑になればバグの原因にもなりやすいということです。
>>9 そんなひとつと二つみたいなレベルで考えるからわからんのだ。しかも引数がStringと
プリミティブじゃな。
public HOGEHOGE(int a, myClass b, myClass2 c, myClass3 d, myClass4 e, myClass5 f, myClass6 g, myClass7 h, myClass8 i, myClass9 j)
というコンストラクタが一つだけしかなかったらどんなに面倒か。
とりあえずaだけ指定させてくれたら他はどうでも適当でもいいし、もうmyClassを
さくっとnewしたもんでいいよ、ということもある。
そこで、
public HOGEHOGE( int a) {
this( a, new myClass1(), new myClass2(), /*あと面倒なんで省略 */);
}
というコンストラクタがあったら便利だということだよ。むしろ全部指定する事のほうが珍しいような
クラスも考えられるからね。
常道としては、一番引数の多いコンストラクタをベースとして、より引数の少ないコンストラクタは、
少ない分の引数を内部的に作って、最終的には一番引数の多いコンストラクタを呼び出す、という
パターンだね。インスタンスを生成するための一番基本的なところは、引数の多いコンストラクタに
集中化できる。
ByteBuffer bb = ByteBuffer.allocateDirect(2048);
bb.putInt(257);
bb.rewind();
System.out.println(bb.get());
System.out.println(bb.get());
System.out.println(bb.get());
System.out.println(bb.get());
この結果は0,0,1,1と表示されるのですが
ByteBufferのデフォルトってBIG_ENDIANですよね?
どうして1,1,0,0にならないのでしょうか?
プラットフォームはWindowsでLITTLE_ENDIANなのですが
ByteBuffer.order()ってもしかして意味無いのですか?
>>15 オマエ、ビッグエンディアンとリトルエンディアンの並び方間違っておぼえてない?
byte[0]->[1]->[2]->[3]と繰り上がるのがLITTLE_ENDIANで
byte[3]->[2]->[1]->[0]と繰り上がるのがBIG_ENDIANじゃないのですか?
>>18 他人に聞く前にWebでタダで見られるIT関係用語集とかで調べて来い。
0x00FFって表記はビックエンディアンなのか。よくわからんけど。
>>13 そだよ。
>>15 下位バイトから順に並べる = リトルエディアン
つまり 0x11223344 は 0x44, 0x33, 0x22, 0x11 の順に現れる。
ファイルに表した場合、下位=先頭の方って覚え方でいい?
webサーバみたいに裏で静かに動きつづけるためのプログラムがあるとして、
メンテとかのためにあえてそのプログラムを終了させたいときもある場合、
そのプログラムを終了させるための別のプログラムを呼べばいいんですよね?
そういう、別のプログラムに干渉したい場合、どう書けばいいんでしょうか?
public class MyProgram {
public static MyProgram instance;
public static void main(String[] args) {
MyProgram instance = new MyProgram();
MyProgram.instance = instance;
instance.start();
}
private void start() {...}
public void stop() {...}
}
public class MyProgramStopper {
public static void main(Stirng[] args) {
MyProgram.instance.stop();
}
} として
%java MyProgramStopper で確実にMyProgramインスタンスのメソッドを呼べますか?
Socket
>>26 呼べますが Java VM が違うので意味がありません。
29 :
デフォルトの名無しさん:2005/03/24(木) 22:45:32
EclipseでWeb開発をやるのに最もいいプラグインは何ですか?
LombozとかTomcatプラグインとかいろいろあるみたいですが…
WebSphere Application Developer
31 :
26:2005/03/24(木) 22:51:02
>>27-28 そうか、ローカルホストのソケットに何か送れば・・・
ありがとうございました
32 :
デフォルトの名無しさん:2005/03/24(木) 23:04:20
33 :
デフォルトの名無しさん:2005/03/24(木) 23:10:30
>>25 >ファイルに表した場合、下位=先頭の方って覚え方でいい?
それは良くない。
あくまでメモリの配置順が「下位バイト=若い番地」という覚え方をしる。
>>13 辞書で引けばわかるがトイレで水をジャーっと流すことなんかをflushするという。
たまっているデータをジャーっと流すということだ。
Flash ニフラム
Flush タイダルウェイブ
>>前スレ996
> byte[] utf8 = str.getBytes("UTF-8");
> str = new String(utf8,Charset.defaultCharset().name());
UTF-8で符号化されたバイト列を、デフォルトエンコーディングで文字
列化しようとしているので、間違い。
String にはエンコーディングなんて概念はありません。
デフォルトエンコーディングのバイト列 byte[] def とUTF-8エンコー
ディングのバイト列 byte[] utf の相互変換は、以下のようになる。
utf = new String(def).getBytes("UTF-8");
def = new String(utf, "UTF-8").getBytes();
ボクは全くプログラムとかわかんないですけど
友達が「再ダンプ」の意味がわかんないって言ってるんです
用語集とか見たりググっても全くわからなくて…
goo見てもわかんなくて…
何か良い用語集などありませんでしょうか?
>37
その友達は「ダンプ」の意味は分かってるのかいな。
大概は「プログラムで処理している何者か(データとか)を、なるべくプログラムの中の形に
近い形でどこかに出力すること」なんだ(と思う)が、
つまりその頭に「再」ってついてるってことは、文字通り
「もういっぺんダンプ(する)」
ということでなかろうか。
ダンプ再来
つまりアジャコングのこと
辞書を引けばわかるが荷台からゴミなんかをどさっとおろすことをdumpという。
用語集なんかを調べる前にまず英和辞書を引け。
するとこれはプログラム用語なワケですね?
>38さんくす!
//呼び出しメソッド
public void hogeYobidasi(){
BufferedReader keyin = new BufferedReader(new InputStreamReader(System.in));
String indt = keyin.readLine(); //キー入力
byte[] buf = indt.getBytes();//バイト変換と文字数取得
int count = indt.length();
hogeUketori(buf,k);//メソッド
〜
}
//受け取りメソッド
public void hogeUketori(byte[] buf,int count){
String keyinstr=new String(buf,0,count); //バイト→String
String sendData="hoge"+keyinstr;
byte[] sendbuf=sendData.getBytes();
〜
}
ちょっと失礼しますね
今ネットワーク系のプログラミングの勉強してるんですが
(質問の本質自体は入出力の問題だとは思うのですが)
参考にしてる本で気になるところがあります
よく(上は一例)、あるメソッドから別のメソッドを呼び出す時に
@String型をbyte[]に変換(その際、文字数も取得)
Aメソッドを呼び出す(引数としてそのバイト配列(byte[])とその長さ(int))
B受取側でbyte[](その際、長さも利用)からString型に変換
CそしてそのString型を利用〜
という形式があります
道考えても(僕だけかな?)String型をそのまま渡して処理した方がいいと思うのですが…
これはこの著者のただの趣味なのか? それともネットワーク系のプログラミングで
データを受け渡す時はバイト型という定石かなにかがあるのか?
ちょっと皆さんの意見をお聞かせください。もしバイト型を引数として扱うメリットも
あるなら教えてください
受け手はどうやって可変長データの終端を探し出す気?
ざくっと言ってしまえば定石なんだけどね
そのまま渡すとスタック領域無駄に使うから
アドレスとバイト数渡す方が省エネ
45 :
42:2005/03/25(金) 02:29:53
>>43-44 レス有難うございます
一様、m(__)m
×hogeUketori(buf,k);//メソッド
○hogeUketori(buf,count);//メソッド
>受け手はどうやって可変長データの終端を探し出す気?
え?この場合終端を知る必要がないと思うんですが・・・終端というとcountですよね
受け側のプログラムずら〜っと見たけどString型の変換した後
count(bufももちろん)を扱ってるコードはないですよね
あれ、なにか勘違いしてるのかな、頭がポックリ働かなくなってきた・・・
それより定石というなら従いますけどね
>そのまま渡すとスタック領域無駄に使うから
>アドレスとバイト数渡す方が省エネ
ムムー、なるほど。よくわからないけどなるほどです
お二方どうもありがとうございました
46 :
45:2005/03/25(金) 02:31:29
×count(bufももちろん)を扱ってるコードはないですよね
○count(bufももちろん)を扱ってるコードはなかったです
もう、逝って来るよ
47 :
40:2005/03/25(金) 03:00:40
>>41 40を読んでなぜその結論に至ったのかを知りたい。
48 :
デフォルトの名無しさん:2005/03/25(金) 10:14:45
>>44 スタック領域って。。。。
javaのオブジェクトは参照渡しだろ。
んな処理入れるより、String渡したほうがいいに決まってるよ。
>>45 回答をすべて鵜呑みにするなよ
つか、ネットワーク上のデータのやりとりならバイトデータ渡すしかないだろ。
スタック運云々はまったく関係ない。
>>45 このスレにもちょくちょく登場するByteBufferを調べてみなさい。
あとそのサンプルでサイズが必要とされてなく見えるのは
keyin.readLine(); //これのせい
練習でStringを使わないファイル入出力処理を自力で考えてみよう。
51 :
デフォルトの名無しさん:2005/03/25(金) 11:01:34
これからJavaのGUIについて勉強しようかと思っているのですが
AWT、Swing、SWTなどありますが、どれが一番ポピュラーなんでしょうか?
それとも全部覚えた方がいいのでしょうか。
SwingでもSWTでもいいけど、AWTの知識は必須。
SwingとSWTは、好みのほうを。
>>51 全部使ってみろ。
んで、好きな奴とか自分にあった奴を使え。
54 :
デフォルトの名無しさん:2005/03/25(金) 11:40:33
>>52>>53 ありがとうございます。とりあえずAWTから初めてみようと思います。
AWTのlightweightって何?
低級APIみたいな意味と受け取っておけばよい?
56 :
デフォルトの名無しさん:2005/03/25(金) 11:59:15
javaのWebアプリで「〜」が化けてしまいます。
どうすれば化けませんかちなみにjspはWindows-31jです
エンコード部分のコード晒しなさい。
といいますかUTF-8にしろやとか言いたいけど言わない毒
>>56 ちゃんとOS、Java、アプリケーションサーバの種類とバージョンもね。
60 :
デフォルトの名無しさん:2005/03/25(金) 14:28:28
スレッドの実行について質問したいのですが
Thredクラスを継承する方法と
Runnableインターフェイスを継承して、Threadクラスのコンストラクタの引数がありますよね
サンプルソースで↓の用にRunnableを使う方法だとrunメソッドの中でwhileでループを
作らないとスレッドの実行が繰り返されないのは何故なんでしょうか。
61 :
60:2005/03/25(金) 14:29:01
======================================================================
class ThreadX extends Thread {
public void run() {
try {
while(true) {
Thread.sleep(2000);
System.out.println("Hello");
}
}
catch(InterruptedException ex) {
ex.printStackTrace();
}
}
}
======================================================================
class RunnableY implements Runnable {
public void run() {
try {
while(true) {
Thread.sleep(1000);
System.out.println("Hello");
}
}
catch(InterruptedException ex) {
ex.printStackTrace();
}
}
}
> Runnableを使う方法だとrunメソッドの中でwhileでループを
> 作らないとスレッドの実行が繰り返されないのは何故なんでしょうか。
Thread#runだってそうだと思うけど
スレッドは run() メソッドが終われば終了する。
64 :
60:2005/03/25(金) 14:33:19
>>62 すいません、自分でサンプル貼り付けてたのに気がついてませんでした。
スレ汚しすいません。。。。
GUI部品てのは、ふつー、すべてウィンドウという扱いになってる。
だから、ボタン1つでもウィンドウのためのデータ構造(Win32だとhWnd、
XだとWINDOW*などで指されているもの)が付随している。ボタン1つ
のためにこのデータを作ったり破棄したりしなければならない。
lightweightな部品は、ウィンドウとして存在するのではなく、親ウィン
ドウの一部の領域を拝借してそこにボタンの絵を描き、マウスクリッ
クやキーボードに反応するようにしているだけなので、負担が減る
=軽い。
AWTはHEAVY SwingがLIGHT
>>66 Swing が鳴り物入りでデビューしたときはそう言われてたなw
書籍だか雑誌だかに「Swing は lightweight コンポーネントだ。今は重いがマシンスペックが
上がれば軽くなる。」とか書いてあって ワロタ 覚えがある。ソフトの軽さは過去と比べられるの
ではなく、同じプラットフォームで動く別のものと比べられるから、遅いソフトはいつまでたっても
遅いと言われ続けるよ。
脱線失礼
>>67 そういう意味での軽さではないと思う
でもなんかSwingが好き
そしてオレはSwing Girlsが好き
やっぱSWTだろ。使ったことないけど。
StringBufferのインスタンスを5つ生成したいのですが、
StringBuffer[] sbuf = new StringBuffer()[5]ではJava.util.StringBufferが見つかりました になってコンパイル出来ません。どこが間違っているんですか?
new StringBuffer[] { new StringBuffer(), new StringBuffer(), new StringBuffer(), new StringBuffer(), new StringBuffer() }
>>70 J2SE5のSwing使えばわかるが非常に軽い
NetBeans4はEclipse3より軽いのがその証拠か
>>71 StringBuffer[] sb = new StringBuffer[5];
for(int i=0; i<sb.length; i++) sb[i] = new StringBuffer();
>>71 配列のインスタンスを作ることと、StringBufferのインスタンスを作ることを混同している。
「StringBuffer配列のインスタンスを作る 」(StringBufferはまだ作っていない)
StringBuffer[] sbuff = new StringBuffer[2];
「StringBufferのインスタンスを作る」
sbuff[0] = new StringBuffer();
sbuff[1] = new StringBuffer();
>Java.util.StringBufferが見つかりました
よかったね
72はスルーか
80 :
60:2005/03/25(金) 16:54:25
先ほどは失礼しました。
スレッドの同期でjoin()の動作がつかめません。
join()が一つの時は、呼び出し元が待機しているのを確認できるのですが。
複数のスレッドを実行したときに、1つのスレッドにjoin()を実行しても
呼び出し元が待機せずに実行が続くのですが、その理由がわかりません。
どなたかご教授お願いします。
>>81 わかりやすいようにサンプルソース書いていってくれ
83 :
おしえて厨:2005/03/25(金) 17:26:22
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at TetrisWindow.paint(tetriswindow.java:185)
at TetrisWindow.update(tetriswindow.java:179)
at sun.awt.RepaintArea.updateComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
こんなエラー、どういうときに出るのさ・・・paintかrepaintあたりが原因?
誰かおしえてください
>>83 > どういうときに出る?
君の貼ったそのソースにありありと描かれてるじゃないか
>>83 そのまま描いてあるだろ
tetriswindow.javaの185行目でNULL参照した、って
86 :
& ◆hJb7GWrzxo :2005/03/25(金) 17:38:54
>>84 それじゃあ君のその推理を聞かせてもらおうか
87 :
おしえて厨:2005/03/25(金) 18:02:28
>>87 それだとdimが初期化される前にスレッドで使われるぞ
89 :
& ◆Di83K0DpQA :2005/03/25(金) 18:20:31
>>88 dimの初期化をinit()のスレッドのインスタンス作成前にコピーしてみたが
やっぱりヌルポ発生したぞ
エラーが起きている行は
if (ct == null) ct = buf.getGraphics();
こんなだがこれが何か不味いんですかね?
dim = getSize();
この直後にNULLチェックコード入れたらどうなる?
92 :
デフォルトの名無しさん:2005/03/25(金) 18:28:52
はじめまして初心者です。なんかjavaやるためにMS-DOSの設定変えて再起動したら全画面のMS-DOSモードになっちゃったんで、しかたなくセーフティーモードでPCやってるんですが、いろいろ機能の制限があって困ってます!どうすればいいか教えて下さい!
createImage は、
Returns:
an off-screen drawable image, which can be used for double buffering. The return value may be null if the component is not displayable. This will always happen if GraphicsEnvironment.isHeadless() returns true.
って事なので、nullを返す可能性あります
だからnullチェックしましょう
95 :
デフォルトの名無しさん:2005/03/25(金) 18:35:53
あの、自分Javaやろうとしてるんですけど、Java2 SDKってありますよね。
あれの1.4.1_01をダウンロード&インストールしたんです。
それで、Java組みますよね。
コマンドフロンプトでコンパイルしますよね。
PATHのパスは正しいはずなのに、Javac.exeが起動できないんです…。
全パス(?)で入力しても起動できませんorz
PATHのパス以前の問題でしょうか?
Jが大文字なのは書き間違いで良いんだな?
pathが正しくないんだろ?OSは?
つか、Winなら大文字でもおkだろ
99 :
デフォルトの名無しさん:2005/03/25(金) 18:38:43
PATHのパスって言い方がおかしかったです。
すいません。
100 :
デフォルトの名無しさん:2005/03/25(金) 18:41:38
>>97 パスは正しいと思います…。OSはXPです…。
101 :
デフォルトの名無しさん:2005/03/25(金) 18:42:19
>>96 ごめんなさいorz 俺が見てた本では大文字だったので
大文字で書いてしまいました…orz
pathコマンドの結果あげてみそ
103 :
デフォルトの名無しさん:2005/03/25(金) 18:45:17
javacを実行しようとすると、どういうエラーになるの?
起動できません、って書くよりも
こういう操作をしたら、これこれこういうエラーが出ましたが、
何故か分かりません
って書いた方が、解決は早いよ
フルパスでもダメって事は、別のOSのJDKをダウソしてきた可能性もある
環境変数JAVA_HOMEに解凍したフォルダ
環境変数Pathに%JAVA_HOME%\bin
これでPathが通らない筈がない
>>103 それがいいね見せるが早い
107 :
デフォルトの名無しさん:2005/03/25(金) 18:47:17
>>104 すいませんでしたorz
えっと、エラー:ファイル名.javaを読み込めません。
エラー:一個
です。
そっちかよ!
じゃあ、ファイル名.javaがカレントにないんだろ
正直わらた
質問しているのに情報の出し惜しみしてるとこうなる
・・・javacはうごいてんじゃねーか
cmdでコマンドプロンプトを立ち上げる
cd半角スペースと入力してソースの入ってるフォルダを開いてアドレスをプロンプトにドラッグ
仮にそのフォルダがeドライブにあるならe:とも打つ(cドラなら聞かなかったことにしとけ)
そしてjavacだ
FAQに載ってない高度な質問ワラタ
113 :
デフォルトの名無しさん:2005/03/25(金) 18:53:18
114 :
デフォルトの名無しさん:2005/03/25(金) 18:55:07
いや、もうそれはイラネ
dirしてみろ。
拡張子が.java.txtになっていないことを確認しる。
ワラタw
118 :
Java馬鹿:2005/03/25(金) 18:59:26
馬鹿でごめんなさい…。
dirって何ですか?
名前つけましたorz
C:\hogehoge>
ってなってるだろ?
これが示しているのがカレントディレクトリだ
パス抜きでプログラムやファイルを指定した場合、カレントディレクトリに
それが存在しているものとして処理される
別のディレクトリにある物を示したいなら
・相対パスか絶対パスで場所を示す
・PATHを設定する
のどちらかを行う必要がある
>>118 お前がバカなのであってJavaはバカじゃねーYO!
あやまれ!
121 :
Java馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:02:04
フォルダの中に表示されてる名前がtxtになってないかどうかチェックするんですか?
Javaファイルって出てますけど…。
馬鹿ですいませんorz
しかもJava以前のOSの知識のほうだしなぁ
123 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:02:56
>>120 すいません。国語能力が低かったですorz
ちょっと言わせてくれ...
質問する時は、
>>104とか
>>110が言うように情報を出し惜しみしない事
最初からエラーの内容を書いていれば、>>96-
>>106のような、
結果として意味の無かったレスが省けた
また、操作内容、ソース、出力されたエラー等は、書き写しではなく
「必ずコピペする」こと
>エラー:一個
俺にはこれがコピペとは思えない
ここは ◆11lf1o9R42 にDOSプロンプトの操作を教えるスレになりました
でも正直みんな優しいなとおもた
c:\hoge\Hoge.javaってファイルをコンパイルするなら、
コマンドプロンプトでhogeフォルダに移動してから
javac Hoge.java
と入力する。
うお!スレ伸びまくっててワロタw
>>124 プロンプトのコピペってC-vじゃできないからじゃない?
ちなみに、プロンプトでコピペをするには右クリックして範囲指定をしてから
コピペしたいとこを反転(ドラッグして色を変える)させてエンターをプッシュ!
>>127 さらに補足してみるか
そのフォルダの移動をするのに
c:
cd \hoge
とすると1行目でドライブの移動、2行目でディレクトリの移動をする
あ、みすった。
>>128の
>プロンプトのコピペってC-vじゃできないからじゃない?
C-cの間違いだ。
>>128 なるほどな、そこまで頭まわらんかった...
dirって何ですかと言っている◆11lf1o9R42 にそれを要求した漏れが悪かった
Javaで「引数を省略したときにデフォルトの値で処理する」というのを、
引数を必要とするメソッドを用意し、引数が省略された場合に対しては
デフォルトの値を引数として引数を必要とするメソッドを呼び出すような
同名のメソッドを作成しオーバーロードすることによって実現しています。
ところが、よく考えてみると、これだと省略した場合にメソッドを
二重に呼び出すことになるので、引数を値渡しするときに
メモリに2重にコピーされて、特に大きなクラスを引数とする場合などは
メモリを消費することにならないでしょうか?
もしそうだとすれば、このような場合にはどういう書き方を
するのがよいでしょうか?
>>129みたいなのをbatファイルにしてドラックして使うと早い
って教えるのは今は混乱するだけだろうからやめておく。
>>132 ソース貼って。
C++のデフォルト引数を無理やり実装しようとしてるんだろうけど
いまいち要領を得ない。
別にクラス(インスタンス)全部渡してるわけじゃないよ
参照(多分4バイト)を渡してるだけだよ
だからその分が倍になるだけだよ
だからその書き方で良いんだよ
137 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:17:12
> 大文字小文字は区別されますか?
聞くより試せよ
139 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:19:30
>>128 実はやりかたわからなかったです…orz
Ctrlができなかったもんで…orz
教えてくれてありがとうございますorz
馬鹿ですいませんorz
みんな、最初はわからないよ!
がんばれ。
>>132 Javaは全て参照を値渡し
気にしなくていい
142 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:26:10
D:\Java\Chapter3>javac Lesson2.java
エラー: Lesson2.java を読み込めません。
エラー 1 個
143 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:26:43
すいません、本みながらやってたので、フォルダがチャプター3ですorz
D:\Java\Chapter3>dir
エンターしてみ。
>>143 色々試してわからないことをまとめてから書け
146 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:28:10
147 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:29:18
えっと、本では、Cドライブに入れてたんですけど。
ウィンドウズとかあってちょっと怖かったんでDに移したんですorz
>>146 そのいろいろ出てきたものはChapter3フォルダの中身。
”dir”は今いるフォルダ(この場合D:\Java\Chapter3)にあるファイル一覧を見るコマンド
>>142の意味はこのフォルダにはLesson2.javaが無いって意味と同義。
149 :
おしえて厨:2005/03/25(金) 19:30:18
>>93 createImage()はどうやら画面表示されてなかったり隠れてたりするときに
nullを返すようだな。Frameをshow()する順番とinit()呼ぶ順番とかのほうも
いじっていたら、
なんとかヌルポ例外一回出るけどそのまま動作し続けるようになった。
でも、例外でないようにはできないもんかね?
151 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:31:45
C:\Documents and Settings\Owner>d:
D:\>cd \Java\Chapter3
D:\Java\Chapter3>javac Lesson2.java
エラー: Lesson2.java を読み込めません。
エラー 1 個
D:\Java\Chapter3>
PATHはあってるはずなんですけど、起動しません…orz
154 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:34:58
D:\Java\Chapter3>dir
ドライブ D のボリューム ラベルがありません。
ボリューム シリアル番号は BC4B-0347 です
D:\Java\Chapter3 のディレクトリ
2005/03/25 19:02 <DIR> .
2005/03/25 19:02 <DIR> ..
2005/03/06 12:35 369 First.class
2005/03/06 12:45 94 First.html
2005/03/06 12:35 169 First.java
2005/03/07 01:08 554 Fun.class
2005/03/07 01:12 92 Fun.html
2005/03/07 01:07 242 Fun.java
2005/03/24 14:46 246 Lesson2.java.java
2005/03/06 12:57 355 Practice1.class
2005/03/06 13:02 99 Practice1.html
2005/03/06 12:55 150 Practice1.java
10 個のファイル 2,370 バイト
2 個のディレクトリ 935,264,256 バイトの空き領域
2005/03/24 14:46 246 Lesson2.java.java
156 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:36:41
さっきJava.javaにしてしまったので直しましたorz
コピペしなくてもいいから、その中に
Lesson2.java
があるかどうか教えて
つーか、Lesson2.javaはどこにおいたの?
158 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:37:14
159 :
157:2005/03/25(金) 19:37:47
遅レススマソ
160 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:38:12
うおおおおおおおおおおおおおおおおおおおお。
できた…。
classファイルが作成されました…。
あー多分、拡張子表示しないようになってるんじゃないかな。
だからExplorerでみてもLesson2.javaとしか見えない。
マイコンピュータ開いてツールからフォルダオプション
表示タブを開いて、登録されている拡張子は表示しないのチェックを外してOK押す。
そしてからもういっかいD:\Java\Chapter3をExplorerで見れば間違いに気づくはず。
162 :
157:2005/03/25(金) 19:38:49
>>156 Lesson2.java.java を Lesson2.java
に直したらうまくいった?
>>160 おめ
次はjava.exe だ、ガンガレ
どうでもいいけどさ、
>>95は何でいまさら 1.4.1_01 をインスコしたわけ?
参考書とかに合わせる必要ないよ。最新の 1.4.2_07 にしておくことをお勧めする。
遅延レスが続いてるぞ
おまえらもちっとバカの動向を待ってから書き込め
乙>バカ
>>149 addNotify()するとpeerが作られるからnullが返らなくなるかも。
169 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:41:20
>>129さんの見てわかりました。
俺、Dドラに移動してなかったみたいです…。
それに、さっきJavaが表示されてないの見て、[.java]をつけてしまって…。
この二つが原因でした。
皆さん迷惑掛けてすいませんでした。
俺の馬鹿な質問にマジレスしてくれてありがとう…。
コピペして自ら気づくんだから、まだマシだよな。
つーかよ、レス早杉て正直ついていけんかった
書いてるうちに3〜4個レスついてるんだもんなー
173 :
馬鹿 ◆11lf1o9R42 :2005/03/25(金) 19:43:16
というわけで自分は密かにここの住人になりますorz
また馬鹿なことあったらサポートお願いします…。
馬鹿ですいませんorz
今後は間違っても馬鹿◆torippuでは書き込むなよ
経験則から言って叩かれるから
愛されるかもしれない。
176 :
永遠のJava初心者 ◆11lf1o9R42 :2005/03/25(金) 19:45:41
>>173 なんかいつの間にか周知の事実になってしまったが、
別にキミは馬鹿でもなんでもない、単に知識が無かっただけ
知識がないなら増やせば良い、それだけだ
その手段としてココを利用するのも良かろう
178 :
永遠のJava初心者 ◆11lf1o9R42 :2005/03/25(金) 19:47:08
>>165 最新だとやっぱり結構違ったりしますか?
179 :
永遠のJava初心者 ◆11lf1o9R42 :2005/03/25(金) 19:48:12
>>177 ありがとうございます…。
そのような事を言っていただいて本当に嬉しいです…。
5.0でいいじゃん
JSPで新機能使えない以外は楽しくていい
>>174はトリップ付で書き込むなと言ったのではないのか?
「次の質問で」コテで現れるなって言っただけだよ
183 :
永遠のJava初心者:2005/03/25(金) 19:51:25
>>181 あ、そうなんですかorz
名前だけにしますねorz
184 :
永遠のJava初心者:2005/03/25(金) 19:51:58
識別する必要がなくなったら消えるのが吉という意味
187 :
永遠のJava初心者:2005/03/25(金) 19:53:49
やっぱ名前だけにしときますね…orz
>>141 いま本を見直してみましたけど、よく見ると確かにそう書いてありますね。
解決しました。ありがとうございます。
>>135 ソースは貼るほどの上手なものではないと思いますので、
エッセンスだけ書いてみます。実際に僕が組んでいるものとは
ちょっと違いますが。
例えば、オセロゲームのプログラムで、
盤面をBoardというクラスで表し、このBoardのメンバとして
現在のカーソルの位置であるint currentというメンバを持っていると
します。(単なる数字であるcurrentと二次元の座標(x, y)とは
適切な方法で変換する。例えば(x, y)⇔10x+yとか。)。
盤上の位置を引数としてその位置に打った場合に返すことのできる
石の数を返す以下のようなメソッドを作成します。
int count(int x, inty){
・・・
}
そして、座標(x, y)を省略した場合にデフォルトとして
現在のカーソルの位置に対する返す石の数を返す関数として、
以下のように書きます。
int count(){
this.count(current/10, current%10)
}
これで、引数なしでboard.count() (boardはBoardクラスのインスタンス)
のように記述した場合、int count()が呼び出されて引数にcurretn/10,
current%10がデフォルトとして代入され、int count(int x, int y)が
呼び出されて処理が行われます。
189 :
永遠のJava初心者:2005/03/25(金) 19:56:22
ちなみに、今まで作ったJavaは…。
【何もしないアプレット】
【文字が出るアプレット】
【何もしない青いアプレット】
【斜めに線を引くアプレット】ですorz
>>188 普通だね。気にするレベルじゃないし、一般的に綺麗な使い方。
まとめ
馬鹿 Javac.exeが起動できないんです…。
pathが正しくないんだろ?
馬鹿 パスは正しいと思います…。
pathコマンドの結果あげてみそ
馬鹿 結果全てですか?
javacを実行しようとすると、どういうエラーになるの?
馬鹿 えっと、エラー:ファイル名.javaを読み込めません。
そっちかよ!
馬鹿 (pathコマンドの結果は)ちょっと長くなりそうです…。
いや、もうそれはイラネ
馬鹿 馬鹿でごめんなさい…。 (Java馬鹿を名乗る)
お前がバカなのであってJavaはバカじゃねーYO! あやまれ!
馬鹿 すいません。国語能力が低かったですorz (馬鹿に改名)
コマンドプロンプトでhogeフォルダに移動しろ
馬鹿 移動するときに大文字小文字は区別されますか?
聞くより試せよ
馬鹿 D:\Java\Chapter3>javac Lesson2.java エラー: Lesson2.java を読み込めません。
D:\Java\Chapter3>dirしろ
馬鹿 何か出てきました
dirで出てきたものコピペ
馬鹿 2005/03/24 14:46 246 Lesson2.java.java !!
馬鹿 うおおおおおおおおおおおおおおおおおおおお。
192 :
永遠のJava初心者:2005/03/25(金) 19:56:48
あ。文字はもともと出てましたねw
194 :
永遠のJava初心者:2005/03/25(金) 19:58:40
みんなイイ仕事したあとはスガスガしいな。
>>191 乙www
まあ、そろそろスレ違いなわけだが。
「初心者」 「大歓迎」
が機能した珍しい例だな
なぜかいつもならDOSコマンドおぼえろやゴルアでおわりなのだが
皆万博で浮かれてるからじゃない?
>>194 の名前がどこか美しいのは万博のせいか?
201 :
永遠のJava初心者:2005/03/25(金) 21:39:32
なあ、これからもこんな奴がどんどんやってくるのか?
ここはJava初心者のスレだと思っていたが
プログラミング初心者どころか
PC初心者ですらなく
コミュニケーション初心者じゃねーか
204 :
デフォルトの名無しさん:2005/03/25(金) 21:59:18
i-Studyのような多肢選択問題のアプリケーションを作りたいんですけど、
これから何を勉強していったらいいか、
効果的な学習の順番などありましたらアドバイスをください。
『JAVAで始めるプログラミングレッスン』を何度か読み通して、
今はアリゴリズムの入門書を読んでます。
CUIの簡単なプログラムをつくれる程度の知識です。
実現したい仕様
ユーダーインタフェースはすべてGUIで、問題はランダムに出題される。
データベース上で、分野ごとに正答率などの集計ができる。
↑こんなのが作りたいです。
まず仕様をつくれるようにしる
その仕様を満たすためになにが必要なのかを考える
技術的に足りないのであれば勉強する
あなたの書き込みを読む限り、無理ですね
208 :
永遠のJava初心者:2005/03/26(土) 01:01:50
プログラム作るとき、なんか行をずらしたりしますよね。
あれって何の意味があるんですか?
見やすくするためなんですか?
インデントは見易さのため
210 :
永遠のJava初心者:2005/03/26(土) 01:16:21
>>209 あ、そうなんですか。
ありがとうございます^^
人に聞く前に少しは考えろよ・・・
212 :
204:2005/03/26(土) 01:24:56
アドバイスありがとうございました。
なんか…具体的にどうこうじゃなくて
書き込み自体に問題があったようですね。
稚拙な書き込みで申し訳ありませんでした。
「永遠の」初心者ってのは、嫌われること確実なので
やめたほうがいいぞ。
「私成長する意思がありません」と言ってるみたいなもんだからな。
というかコテハンにする意味がないだろう。
javaの古いバージョンを
インストールし直したいのですが
もう公式には古いバージョンが置いていないのですがどこかある場所ありませんか?
217 :
デフォルトの名無しさん:2005/03/26(土) 02:12:58
staticメソッドから動的に自分の入ってるクラスオブジェクトを取得する事はできるんでしょうか?
this.getClass()みたいな。
218 :
Java初心者:2005/03/26(土) 02:14:15
>>217 どのへんが動的なんだ??
Hogeクラス内のstaticメソッド内で、Hoge.classて書くのはだめ?
任意のクラスでなくて、自分のクラスなんだったら、これでいいと思うが。
>>217 staticメソッドって クラス.メソッド と指定して呼ぶんだから
それをそのまま クラス.class とすればいいと思うんだけど
そういう話ではなくて?
public class Abc{
public static void main(String[] args){
System.out.println(Abc.class.getName());
return;
}
}
なにがやりたいのか不明だから、やりたいことを書いたほうがいい答えが返ってくる
>>218 「初心者」という名前自体も嫌われているというのがわからないか。
努力の無さを初めてという事にして免罪符にされてはかなわんよ。
>>218 さっそく揉まれ始めてるようだが....
>>213 >というかコテハンにする意味がないだろう。
了解?
「自分が質問者だ」ってことを表すには名前欄にもとの発言番号かくので十分だし、
コテハンで「以前にあの質問した馬鹿です」ってことをバラす必要性なんて何もない。
聞くときは毎回新しい質問者として聞けばいい。
さっさと学習して教える側に回ってもらった方がありがたいんだし。
225 :
デフォルトの名無しさん:2005/03/26(土) 09:50:05
皆さんすいませんでした。
俺が馬鹿でした。
もう名前消しますので。
次からは普通の名無しさんで聞きます。
迷惑掛けてすいませんでした。
227 :
& ◆DL2XKqFsqk :2005/03/26(土) 10:56:32
Class target = Class.forName(SubHoge);
AbHoge = target.newInstance();
これだと引数付きのコンストラクタしか呼び出せそうにありませんが
引数付きコンストラクタで初期化するにはどうしたら良いのでしょうか?
>>228 付きなしどっちが知りたいのかはっきり汁。
すまそ。呼び出したいのは引数付きです。
察してあげると、引数付きのコンストラクタを使うには
たとえばSubHoge(int, String)が呼びたければ、
Class[] argTypes = { Integer.TYPE, String.class };
Constructor cntr = getConstructor(argTypes);
Object[] args = { new Integer(10), "hoge" };
SubHoge hoge = (SubHoge)cntr.newInstance(args);
みたいな感じ。(import&例外処理省略)
Tigerだとキャストなしでいいし、可変配列あるのでもっとシンプルになる。
いつのまにか神スレage
234 :
228:2005/03/26(土) 12:36:29
Class#castでキャストしても、インスタンスを代入の左辺で受けることができるのは
superクラスかインタフェースだけですよね?
subクラス特有のメソッドを使う場合はMethod必須ですか?
>>225 がんばれよ
みんなこれだけいうのは2chだけじゃなくて他の掲示板でも必要な
ネット上のエチケットだから、ぜひ覚えておいてくれ
初心者です。教えてください・・・という題名がでるだけでみんな
嫌気がさしてるからね
>>227 そのままなんじゃないか?
nullのまま渡してるだけかと
>>227 1 Applet a = new test5();
2 f.add(a,BorderLayout.CENTER);
3 f.setVisible(true);
4 a.init();
5 a.start();
3 のところでフレームを表示するように命令してるので、フレームは自分自身を表示するが、
そのとき、自分に addされている Applet も表示しようとすので、 Applet の paint(Gra..)
メソッドも呼び出される。
でも、まだそのときには、init() が呼ばれていないので、フィールド buf の中身は null;
っていう気がする。
初心者を名乗りたいなら
質問する側ではなく
回答する側になって名乗ってはどうか
Javaのコンパイラってすごいね
ひとまず単純にだーっと書いて
その後いろいろ最適化をかけるんだけど効率が上がることなんてめったにないし
たまに負ける…
おまえらJavaコンパイラ様に勝てるか!
バイトコードコンパイルにJITコンパイルという2段構えだからね
バイトコードコンパイル自体がJITコンパイルの為の噛み砕きみたいなもんだから
変に弄らないほうがいいんじゃない?
241 :
デフォルトの名無しさん:2005/03/26(土) 15:03:09
そんな小手先の最適化にしか目が行かないから負けるんだ。
アルゴリズムによる最適化が出来れば余裕で勝てる。
>>242 そんなの当たり前
問題はそこではない
ってか小手先の最適化ってもうだれもしてない?
定数にしたりインライン化したり並列処理にしたり
0と比較したり、シフトしたり
244 :
237:2005/03/26(土) 15:29:28
>>241 そりゃそうだろうな。
public Image createImage(int width, int height)
戻り値:
ダブルバッファリングに使用できるオフスクリーン描画イメージ。
コンポーネントが表示不可能な場合は null を返す。
「 createImage する前に表示する」 → NullPointerException。
「表示する前に createImage する」 → null が返される。
結論:
プログラミングなんかしてないで氏ね。
あるいは、
public void paint(Graphics g) {
if (buf == null) {
dim = getSize();
buf = createImage(dim.width , dim.height);
}
以下略
>>243 当たり前とか言うわりに
> ってか小手先の最適化ってもうだれもしてない?
ケイタイ開発でもなければそんなのに腐心するのが無駄だと認識していないわけ?
> 定数にしたりインライン化したり並列処理にしたり
> 0と比較したり、シフトしたり
並列処理はアルゴリズムによるアプローチだろ。定数はどのみちコンパイラがインライン展開
するから効果なし、0 比較やビット演算は「そう明記したほうが分かりやすい」という理由で書く
ことはある。小手先最適化のプラシーボ効果(誤用の意味)に手間暇割いて設計甘い奴はよくいる。
小手先の最適化まで踏み込むのは「こんな重箱の隅まで改善したのにパフォーマンスが
上がりません」を客に示し、「前任の会社の設計が馬鹿過ぎ」「お前らの要件の詰めが甘すぎ」等を
暗に示すという後ろ向きの理由で敢えてやることはある。
>>245 後ろ向きの理由ウケタ
参考になります。
>>245 > 小手先の最適化まで踏み込むのは「こんな重箱の隅まで改善したのにパフォーマンスが
> 上がりません」を客に示し、
この時点で客から能無しのレッテルが。
客が求めるのは経過じゃなくて結果だからね
いくら難しい言葉使って努力したんです、と言っても
結果が出なけりゃ意味がない
>>247 いや、普通は改善と一緒に調査もして何がボトルネックになってるかも示すから。
フレームワークがボトルネック → 作った会社が馬鹿すぎ
JSP 重すぎ → 客の要望した画面が懲りすぎ
SQL 投げまくり → それだけ要件の業務ロジックが複雑 (またはあいまい) すぎ
もちろんこっちの作りで悪いところがあれば期間交渉しながら叩き潰すけどな。
結果が出ないのを無関係な現場に押し付けられてもかなわんがな。
与えられたブツで作る事ができるかどうかの目測を誤ったやつが悪いだろ
パフォーマンスとアベーラビリティはまた別の話だ。
客も神じゃないから無理解や場の流れ、政治的理由などで関係ないところ叩き始め
たりすることだってあるさ。そんなときは、原因はあそこだからうちら叩いてもしょうが
ないでしょ、と返せないとね。
ただしある程度の信頼関係が無いと逆効果だけど。
今日は休日だから社会人の方が多いですね
自称出来る社会人が、初心者に語ることで満足するスレです。
その通り!
だから次の質問ヨロ
↓
他所がダメで回ってきた案件なのに信頼関係があるってなんだそれ?
社会人ごっこ?
>>257 「安い A さんとこで作らせて見たが駄目そうなので、ちょっと高いけど B さんおねがいします。」
まぁお前みたいな派遣がそういった政治的な話は耳にする機会は一生ないだろうが。
ごっこ確定の模様
プリントゴッコ
どうして整数を0除算すると例外が発生するのに、
小数を0除算すると例外にならないのですか?
「ボッタクリの B に聞いて A にやらせろ。B は利用するだけでいい。」
>>257,259
世界のせまい奴だなー。井の中で飼い殺されてんのか? たまには外へ出ろよw
要件定義や設計だけ開発を他に回すのももちろんあり。それはそれでそういう契約と料金設定するし。
>>263 お前の鼻くそ未満のプライドに何の価値もないんだが。
おまえら、契約云々とか、そんなしょうもないことは営業にやらせろ。
激しくスレ違いだ。ってか板が違うだろ。マ板に逝け。
スレ違い厨ウザ
氏ね
しらねーよ、低賃金ドカタが勝手に絡んでんだしw
プライド? 馬鹿?
自称君がなんか必死だけど終わりにしてくれんかね
趣味プログラマでもでかい顔できる初心者スレに職業プログラマが現れるとアレルギー反応が起きます。
Javaアプリ向けのスクリプトエンジンは何が本命ですか?
そしてお決まりの自称認定w
String string みたいな
クラス名の先頭を小文字にしただけの変数名をよく使っちゃうんだけどまずい?
逆にせっかく意味のある名前思いついても
InputStreamReader hogeInputStreamReader みたいに
末尾にクラス名付けがちなんだけどまずい?
buttonが1個の場合とかそれはあるかな
入力はinとかreaderでいい
ガワさえちゃんとしてれば中身なんて
まずいかどうかは主観。
俺的には名が体を表していればどうでもいい (i, in 等の慣例的簡略名以外)。
変数のスコープが広いなら型が一目でわかるような変数名をつけるのが望ましい。
ただし何でもかんでも長すぎる変数名だと見難いしタイプも面倒だから、
極力狭いスコープを使って、変数名も短くする方がいい。
俺は全部で数行程度のコード中にでてくる変数は短くしてる。もちろん好みの問題もあるけど。
class Hoge { private BufferedReader hogeReader; ... }
と
{
BufferedReader r = new BufferedReader(...);
while (...) {...};
r.close();
}
どちらも使う。
> 型が一目でわかるような変数名をつけるのが望ましい。
超久しぶりにモンゴリアン表記が思い浮かんだ。
>>278 モ、モンゴリアン?prefもsufも付いてそうな・・・
カーン
テラワロス
lpStrSz
>271
本命は知らないが漏れはBeanShellがお気に入り。……誰も聞いてないねスミマセン
他はGroovyとか、Jakarta Commons Jellyとか、なんならJythonとかJRubyとか。
285 :
デフォルトの名無しさん:2005/03/27(日) 00:19:08
lombozでサーブレットのソースを変更しても何にも反映されません
同じ症状の人いる?
マルチには答えません
287 :
デフォルトの名無しさん:2005/03/27(日) 00:38:03
289 :
288:2005/03/27(日) 01:05:55
〇 eclipse\plugins\org.eclipse.update.ui.nl1_3.0.1\plugin_ja.properties - 正常に解凍されました。
〇 eclipse\plugins\org.eclipse.update.ui.nl1_3.0.1\plugin_ko.properties - 正常に解凍されました。
× eclipse\plugins\org.eclipse.update.ui.nl1_3.0.1\plugin_pt_BR.properties - アーカイブファイルが壊れている可能性があります。
〇 eclipse\plugins\org.eclipse.update.ui.nl1_3.0.1\plugin_zh_CN.properties - 正常に解凍されました。
× eclipse\plugins\org.eclipse.update.ui.nl1_3.0.1\plugin_zh_TW.properties - アーカイブファイルが壊れている可能性があります。
エラーが発生しています。
>288
ダウソして、XPのエクスプローラ標準のZIP解凍で解凍したが特にエラー出なかったが。
ついでに7zipで検査してみたが問題なし。
ちなみにサイズは23,939,551バイト、MD5はD429011A50732034A5A56FE66B41452Fになった。
>>289 それ、なんて解凍ツール使ってる?
昔俺もそのツール使ってた気がするけど、同様のエラーが頻発したんでやめた
lhaplusです
参照を渡して値を変化させたいのですが
class inc( object i ){ (int)i++ }
class main(){
int i=0;
inc( i );
}
こんな感じに出来ないのでしょうか?
これだと(int)iが変換できない型ですと怒られます
>>295 > これだと(int)iが変換できない型ですと怒られます
それ以外にもいっぱいエラー出てる筈……
Javaには参照渡しは無い。配列使って参照の真似事するか、
インスタンス変数にする等して再構成するしか無いと思われ。
>Javaには参照渡しは無い
はぁ?
298 :
288:2005/03/27(日) 03:31:23
解凍レンジでチンしたら、うまく解凍できました。
どうもすいませんでした。
>>297 お前こそはぁ?だ。
Javaに参照渡しはないって何度も過去スレでも出てる話題だろ。
JDK1.4.2_07からJDK1.5に変更しようと思って
1.5のインストールを試みたけどインストール中に止まってしまってできなかった
(インストール中です、しばらくお待ちくださいの画面から切り替わらない)
誰か同じ経験した方いませんか?
以前のバージョンが入ってる場合に1.5インストールする時
何か特別なことをする必要があるのでしょうか?
解る方いたら教えてください
とりあえず今はJRE1.5をインストール
bin等の実行ファイルが1.4、他が1.5という状況です
パッケージ名は漏れが使ってるホスト名を逆転させて使うべしって事で
package net.ch2.nanashi;
public class Test {
public static void main(String[] arg) {
System.out.println("hello.");
}
}
ってなコード書いたのよ。で、コンパイルして実行してみたんだけど
E:\>javac Test.java
E:\>java Test
Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: net/ch2/nanashi/Test)
at java.lang.ClassLoader以下略
母さん、漏れは何を勘違いしていますか。
304 :
303:2005/03/27(日) 11:27:45
('A`)ノ いや、ていうか、ごめん
ファイルを net\ch2\nanashi\ の中に置けば解決なんだ。
でも、みんなマジでそんな事やってんの?
そだよ。何故そうなるかはあまり気にしないことだね。
パッケージの中身が充実してきたり、jarにしたりしだすとやめられなくなるよ。
面倒と思うのは今だけ。
>>303 自分で作ったものを外部に公開するとか
外部で公開されているものをライブラリとして取り込む場合とかは
クラス名がかぶらないように「世界中で一意」にする必要があるから
パッケージ名をホスト名を逆転させて使うのが推奨されてるけど
適当なプログラムの場合は適当でもいいよ。
その代わり適当じゃないプログラムのときはしっかりしてくれよ。
307 :
303:2005/03/27(日) 12:45:15
ありがとう。
漏れは今までに、いくつもの言語の、いくつもの理不尽さに慣れてきたさ。
母さん、漏れ強くなるよ。
IPいらないからドメインだけで格安なとこ紹介して
javac -d classes Test.java
少し慣れたらテキストエディタ+cmd.exeからは卒業した方がいい。
310 :
デフォルトの名無しさん:2005/03/27(日) 23:34:34
java.io.IOExceptionでは対応する try 文の本体ではスローされません。
}catch(IOException e){}
^
と出たのですが
InputStreamReaderとBufferedReaderは
IOExceptionでキャッチするんですよね?
↓のエラーメッセージが出るんですが、メッセージの意味がよくわかりません。
test.java:81: シンボルを解決できません。
シンボル: メソッド readLine ()
場所 : java.io.InputStreamReader の クラス
strTmp = in.readLine();
^
>>310 (=312?)
ブロックの書き方がおかしい。
314 :
312:2005/03/28(月) 00:20:06
310じゃないです。
ブロックってのは「^」のことでしょうか。
in.readLine(); のカンマの下についてます。
>>314 in.readLine(); のどこにカンマがあるというのか
317 :
312:2005/03/28(月) 00:24:47
ピリオドですかね。
inのあとなんですが。
318 :
デフォルトの名無しさん:2005/03/28(月) 00:30:55
@
String aaa;
aaa.method(para);
A
String aaa;
aaa=method(para);
@とAではaaaの値って同じですよね?
変数(aaa)にピリオドでメソッドを繋げた@のパターンと
メソッドの結果をaaaに代入するAのパターンの使い方の
違いってなにかあるのでしょうか?
>>318 まず実行してみなさいよ
確実にエラー出るからさ
320 :
デフォルトの名無しさん:2005/03/28(月) 00:40:35
クラス1 変数1;
上記のように変数1を宣言した場合、
変数1に代入できる値はどのような型になるのでしょうか?
上記の場合、クラス型の変数1となると思うのですが
具体的にどんな値を代入できるのかが分からないのです。
>>320 クラス1のインスタンスかクラス1のサブクラスのインスタンスです
うーん、インぬルエンザにかかったっぽい。
>318
とりあえず、
>@とAではaaaの値って同じですよね?
と考えた根拠になる本があるんなら、今すぐ捨てて明日別な本買え。
@とAはまるっきり違う。
>322
ガッ校行く前に医者寄ってけ。
326 :
312:2005/03/28(月) 00:58:24
自己解決できました。
>>326 いろいろアドバイスされておきながら「自己解決できました」ですか
>>320 プリミティブ(int等)については説明するまでもないと思うので
Object派生のものについて聞いてるのだと仮定
>クラス1 変数1;
であれば、「クラス1のインスタンス」を格納できる
それだけではなくクラス1からの派生クラスも格納可能
仮に全てのクラスの基底となる Object の変数を宣言すれば、
なんでも代入可能な変数になる
継承元の型に派生型を代入した場合、その変数はあくまでも継承元のクラス
でしかないので注意
Object x = new String(); として x.substring() はコンパイルエラーとなる
ただし、中身はちゃんと String なので x instanceof String は true となるし
((String)x).substring() とキャストして使用することは可能
>>320 代入をどのようにとらえているかわからないが、
変数にオブジェクトを格納するとか思っているとすると理解の妨げになる。
変数とはオブジェクトを操作するためのリモコンだと思うといい。
変数の型はリモコンの種類。
代入はオブジェクトとそれを操作するためのリモコンである変数を結びつけること。
オブジェクトが主で変数が従だ。
当然ながらリモコンの操作に対応しているオブジェクトは結びつけられるが
対応してないオブジェクトは結びつけられない。
すなわち「ある型 X に代入できる=あるリモコン X で操作できる」というのは
「ある型 X のメソッドをすべて持つ」ことと思っていればよい。
Javaの場合、サブクラスはスーパクラスのメソッドをすべて持つし、
インタフェースを実装している場合はそのインタフェースのメソッドをすべて持つ。
なので class X extends Y implements Z とかであれば X 型のオブジェクトは
X 型の変数にも代入できるし、Y 型の変数にも代入できるし、
Z 型の変数にも代入できることになる。
330 :
デフォルトの名無しさん:2005/03/28(月) 02:45:57
>>329 リモコンというのがよく分からないのですが・・・
クラス 変数;
と宣言した場合、変数にはクラスのインスタンスが入るのですよね?
つまり、そのクラスのフィールドとメソッドのコードが順番に
入ってるとの事でいいのでしょうか?
変数をアクセスする事によって、格納されてるいずれかのメンバに
アクセスできるから、それがリモコンという事なのでしょうか?
それなら分かります。
「クラス 変数」としてもインスタンスはできないぞ。
インスタンス=オブジェクトの実体だからな。
クラス 変数 では、
>>329でいうところのリモコンができるだけだ。
オブジェクト実体はあくまで「new クラス()」でできる。
クラス リモコン = new クラス()
これでクラスの実体ができて、実体を操作するためのリモコンと接続する。
代入が接続な。
ちなみにこのリモコンは「クラス」で指定したものと互換性のあるメーカー(クラス)の
オブジェクトとしか接続できない。
で、重要なポイントだが、Javaではリモコンを通してしかオブジェクトを操作できない。
332 :
デフォルトの名無しさん:2005/03/28(月) 03:20:29
変数はリモコンで、そのリモコンを通してでしかオブジェクトを操作
できないと言われますが、僕が見たプログラムの中に
new Thread(xxx).start();
というのがありました。これはインスタンス(オブジェクト)の
メソッドを操作してるのですよね? つまりインスタンスを直接操作してます。
変数はそのオブジェクトが入ってる入れ物ですから、リモコンというのが
どうも分かりません。
正確にはそうでなくとも、変数=オブジェクトと見て実務上は
差し支えがなければ、そう取り合えず理解しても問題はないのでしょうか?
ちなみに
クラス 変数;
だけだと
・フィールド … null で初期化
・ローカル変数 … 初期化されない
(そのまま使用するとコンパイルエラー)
となる
上で言われてる「接続」が行われてない状態
「new hoge()」がリモコンを生成する操作で、それを変数に格納している
…これでどうや?
335 :
デフォルトの名無しさん:2005/03/28(月) 03:28:01
現在の自分は、クラスはテンプレート(パッシブ)であり、変数は
そのクラスを実行可能(アクティブ)にしたインスタンスだと
考えてるのですが、そうじゃないのですか?
クラス 変数;
だと、変数はクラスのテンプレートそのもので、まだパッシブであり
インスタンスが注入(接続?)されてないので、実行不可能であり
new クラス() とするとクラスがインスタンス化されてアクティブに
なり、それを変数に接続(注入)する事によって実行できる(アクティブ)
になると見てるのですが。
リモコンというのが、どうしても理解できないのです。はっきり言えば
それをする必要性というか意味が分かりません。意味がないと思うのですが・・・
何がわからないのかよく分からん。
337 :
デフォルトの名無しさん:2005/03/28(月) 03:31:42
そのリモコンと使ってアクセスする必要など、全くないのでは?
という事です。
なぜ、必要ないのが存在してるのか? ということです。
なんか混乱させてるみたいだな…
必要云々じゃなく、Javaはオブジェクトを参照で操作するんだ
ここでポインタとか言ってしまうと、他の人に怒られそうだけれども、
全部ポインタなんだよ
インスタンスの生成をすると、それは全く別のところに作られる
「new hoge()」の返り値はあくまでも参照であり、変数にもそれが格納されるだけ
340 :
デフォルトの名無しさん:2005/03/28(月) 04:12:43
>>338 え? new コンストラクタの返り値は、そのクラスのインスタンスの
はずですが・・・
参照はリモコンですよね? なんでコンストラクタからリモコンが
返ってくるのですか? 変数でリモコンを作成してるのに
またコンストラクタで同じのを生成するんですか?
new コンストラクタの返り値は、そのクラスのインスタンスへの参照ですよ。
今まで出てきてる言葉で言えば、「参照」=「リモコン」=「ポインタ」ね。
コンストラクタはインスタンスを作成して、それに対するリモコンを返す。
(オブジェクト本体は重すぎてJavaたんには一切動かせない)
クラス名 変数名; はリモコン置き場を作ってるだけで、
リモコンはコンストラクタからもらったものを使う。
>>340 じゃあ、たとえを出すのをやめよう。
new コンストラクタを実行すると、Javaヒープ上にオブジェクトインスタンスが
生成される。そして、オブジェクトインスタンスへの「参照」を返す。いいか、
きみはインスタンスを返すといっとるが、実際には参照を返す。インスタンスとは
Javaヒープ上にある実体。参照は、その実体にアクセスするためのポインタだ。
で、Javaではインスタンスの操作は参照を介してしか行なえない。
new Thread().start()は、(new Thread()).start()と分解できる。
まず「new Thread()」という式が解釈されて、結果としてThreadインスタンスへの
「参照」が返る。で、その参照に対し「.start()」という呼び出しが解釈される。
さてここで変数だ。「new Thread().start()」みたいに生成した瞬間にstart()を
呼んで終わり、なら変数なんていらんわな。でも、生成したインスタンスを
いろいろ使いたいなら、コンストラクタが返す参照をどっかに保持しとかないと
いけない。理由は、その参照がないと、インスタンスにアクセスする方法が
ないからだ。Javaにはインスタンスへのアクセス方法が「参照」しかない。
参照がなくてオブジェクトインスタンスしかない状態になると、そのインスタンスは
ガーベジ・コレクションの対象になる。要するに参照がなければゴミ扱いされて
破棄される。
で、その参照を保持しておく入れ物が「変数」。変数に代入する意味は、あとで
その参照を使ってインスタンスにアクセスするために、保持しておくためだ。
これでOKか?
344 :
デフォルトの名無しさん:2005/03/28(月) 08:48:10
>参照はリモコンですよね? なんでコンストラクタからリモコンが
>返ってくるのですか? 変数でリモコンを作成してるのに
>またコンストラクタで同じのを生成するんですか?
リモコンのたとえ(たとえは混乱のもとになるから乱用しない方がいいが)を使うと、
変数宣言だけした段階では("クラス 変数;")その新しいリモコンはどこも操作できない
ようになっている(null を"参照")。つぎに、"new クラス();"の段階でそのクラスの
インスタンスがつくられ、そのインスタンスのメソッドやpublicな変数を操作できる
ようにそのインスタンス用のリモコンとして先に宣言されたリモコンが返される、という
イメージはどうだろうか。
かえされたリモコンはいくらでもコピーして良いが、インスタンス
そのものがコピーされるわけではない。
悪いことは言わんから「リモコン」のことは早く忘れろw
>new コンストラクタの返り値は、そのクラスのインスタンスの
>はず
まぁ、並の解説から得られる認識としてはあってるかもね
コンストラクタ=インスタンスの生成
であって、その返り値(定義されて無いでしょ?)がインスタンスそのものではない
public フィールド f (not static)をもつ Hoge クラスがあるとして
Hoge hoge1 = new Hoge(); //インスタンス生成
hoge1.f = 1;
このように使用したとする
で、これを別の変数に代入する
Hoge hoge2 = hoge1
この時、hoge1.f は 1 なのはもちろん hoge2.f も 1 だよな?
ここで hoge1.f = 2 としたときの動作を考えると、変数の中身=インスタンスとするのは
無理があるのが理解できると思う
347 :
デフォルトの名無しさん:2005/03/28(月) 09:54:42
乱数のシード値とは何ですか?
348 :
デフォルトの名無しさん:2005/03/28(月) 09:57:51
種。
>>347 乱数関数・クラスは実際は擬似乱数配列を走査(あるいは何らかのbit演算)をしているだけです。
ですからシード値を元にその配列をシャッフルしなければ、常に同じ配列が使われてしまいます。
シード値は一般に現在秒もしくは現在ミリ秒が使われ、Javaの場合は後者です。
350 :
デフォルトの名無しさん:2005/03/28(月) 10:18:10
351 :
デフォルトの名無しさん:2005/03/28(月) 11:01:04
以下は勝手な乱数発生クラスですが、この中の private 変数 idum の初期値がシードですね。
public class Rnd {
private int idum;
static final int IA = 16807;
static final int IM = 2147483647;
static final int IQ = 127773;
static final int IR = 2836;
static final int MASK = 123459876;
static final double AM = 1.0/((double)IM);
Rnd(){
this.idum = (int)(System.currentTimeMillis() % 640000L);
}
Rnd(int n){
this.idum = n;
}
public final double rnd(){
this.idum ^= MASK;
int k = this.idum / IQ;
this.idum = IA*(this.idum - k*IQ) - IR*k;
if(this.idum < 0) {this.idum += IM;}
double ans = AM * this.idum;
this.idum ^= MASK;
return ans;
}
}
352 :
デフォルトの名無しさん:2005/03/28(月) 14:53:39
現在実行中のJarファイルの絶対パスを取得したいのですがどうすればいいでしょうか?
かならずしもカレントディレクトリにあるとは限らないので…。
お知絵を拝借させてください。
353 :
デフォルトの名無しさん:2005/03/28(月) 16:01:45
JFrameで作成したフォームから外部コマンドかなんかでIEを起動し、あるサイトを表示させたいのですが方法がわかりません。先輩方どうかご教示下さいませ。
354 :
デフォルトの名無しさん:2005/03/28(月) 17:32:59
バイトストリームが本を読んだりしても全然分かりません。誰か助けて・・・
>>354 質問の仕方も分かってないようだな。
がんばれ。
356 :
デフォルトの名無しさん:2005/03/28(月) 17:43:01
>>355 本気で、
>>354みたいな質問になってしまう程、意味がわからないんですよね・・・
とりあえず、がんばってみます
>>356 バイトストリームって、ByteArrayInputStreamとByteArrayOutputStreamのことか?
>>352 無理やりっぽいけど
URL url = Hoge.class.getResource("Hoge.class");
で、そのクラスファイルを含む jar のパス+ jar 内のパスが取得できた
クラスローダーに含まれて居ないと null となるので Hoge は jar 内のクラス
を指定する必要があるっぽい
よくわからんので補足plz
>>353 Runtime.exec() では無理?
>>354 それじゃただの愚痴やがな
359 :
デフォルトの名無しさん:2005/03/28(月) 18:00:58
JavaにはCのsizeofみたいなのはないんでしょうか?
>359
ない。
プリミティブ型のサイズは仕様(規格?)で決まっているぞ。
インスタンスが何者なのかを調べたいってのなら instanceof
>>359 なににつかいたいの?
配列とかのサイズ取得はそういうプロパティあるし
363 :
デフォルトの名無しさん:2005/03/28(月) 19:46:08
String str = "hoge";
System.out.print(str);
str = null;
と書いた場合と
System.out.print("hoge");
と書いた場合とではどちらがGC効率がよいのでしょうか。
下の場合、確保されたメモリはいつ解放されますか?ここでしか使われないから即GC対象?
また、総合的に見て(速度・メモリ使用率等)どちらがよいですか?
上でも下でも解放される時期は変わらない。
つうか、解放されないかもしれない。
コンパイル時に確定している文字列インスタンスの寿命なんて気にするだけ無駄。
new MyThread().start();
とすると、このMyThreadクラスのインスタンスは
いつGCされてもおかしくない気がするのですが
実際には時間のかかる処理もちゃんと完了するのはなぜですか
>>366 int a[] = new int[256];
for(int i=0;i<a.length;i++){
//なんか処理
}
>>365 実際には名前のないローカル変数が自動的に定義されて、密かに使わているからだよ。
>>367 lengthは配列を定義しているクラスのメンバ変数だよね。
プロパティってなに?
Javaで「このインスタンスのプロパティが〜」とかいうと
だいたいメンバ変数と同義な気がするけど
厳密な意味はよくわかんね
>Javaで「このインスタンスのプロパティが〜」とかいうと
>だいたいメンバ変数と同義な気がするけど
Javaの用語としては、フィールドと呼ぶのが正しい。
じゃあローカル変数はJavaの用語ではなんていうの?
>>364 String str = getHoge();
System.out.print(str);
str = null;
と
System.out.print(getHoge());
だったらどうでしょう。かわんないか。
Javadoc5.0のクラスの後にこんな(<?><T><E><K,V>)
のがついてますけどどんな意味ですかね?
ちょっと見当がつかないのですが・・・
JDK5.0 の新機能と拡張機能をみれ
>>377 有難うございます
とりあえずEが自クラスを表してるという事はわかりました
379 :
デフォルトの名無しさん:2005/03/28(月) 21:48:21
size = io.readInt("arryのサイズをいれてください");
for(int i = 0; i<size; ++i)
{
arry1[i] = io.readString("arry1の値をいれてください");
arry2[i] = io.readString("arry2の値をいれてください");
}
というのをつくったのですがコンパイルして実行するとarry1の値を入れた後プログラムがとまってしまいます。
なぜなんでしょうか?
io.readはGUIの入力用です。
環境はネットビーンズ3.6です。
止まってしまいますってのはフリーズを意味しているのか?
それとも Exception を吐いているのか?
上のソースが全てだとすると、配列の定義が怪しい
381 :
376:2005/03/28(月) 22:00:46
382 :
デフォルトの名無しさん:2005/03/28(月) 22:02:44
実行してarry1の値を入れたあと落ちてしまいす(入力画面が消えてしまいます)。
そのあとにjava.lang.ArrayIndexOutOfBoundsException: 0とでてます。
383 :
デフォルトの名無しさん:2005/03/28(月) 22:03:41
>>382 おいおい、答えでてるじゃないか
「指定したインデックス"0"は配列の領域を超えています」
ここまで説明してくれているんだぞ?
>>384 それの意味が解らないんです。
どこの行かもでてるんです。
それでもなぜ間違ってるかわからないんです。
>>384で理解できなければ日本人やめちまえってんです。
388 :
376:2005/03/28(月) 23:03:38
僕にももう一つヒント下さい
あるメソッドがあり、その引き数をString[] にしなければならないのですが、
static final String aと"hogehoge"をくっつけたく、
String[] s = {a + "hogehoge"}; //このあとsを引き数としたメソッドを呼び出し
とするとJava.lang.Errorになってしまいました。どこが間違っていますか?
本当に java.lang.Error が出たのか?
コンパイルエラー
>>390 「くっつける」の意味が、二つの文字列をそれぞれ配列に突っ込みたい
(つまり要素が二つの配列を作りたい)ということなら、
String[] s = new String[]{a, "hogehoge"};
な。
393 :
デフォルトの名無しさん:2005/03/29(火) 00:19:24
@class test{
A public static void main(string args[]){
B String s = "Test No!"
C String substring = s.substring(0,10);
・・・・
Bの行はオブジェクト参照変数sとのことなのですが
普通のint型とかの変数との違いは何なのでしょうか?
オブジェクト自体どこにも見当たらないのですが・・・。
>393
実は
"Test No!"
がStringオブジェクトなのだよ明智君。
intとかのプリミティブ型と参照型の違いは少し上の方でいろいろかみ砕いて説明されてるから略。
>>376 ? なんでも
T タイプ
E エントリー
K キー
V バリュー
まあ適当な省略形で意味はない(?だけは文法的な意味があるけど)。
全部、利用時にパラメータで具体的な型を明示的に指定するまで
何の型か不明な汎用型「パラメータ化された型」を表してる。
>>395 有難うございます
K,Vは何となくわかりました
でも他が・・・
例えば、ListインタフェースでE,?について考えてみたんですけど
ぽっくりわからない・・・
1.5
boolean add(E o)
boolean addAll(Collection<? extends E> c)
boolean containsAll(Collection<?> c)
1.4
public boolean add(Object o)
public boolean addAll(Collection c)
public boolean containsAll(Collection c)
>全部、利用時にパラメータで具体的な型を明示的に指定するまで
何の型か不明な汎用型「パラメータ化された型」を表してる。
この二行バカにでもわかるようにもう少し詳しくお願いします
397 :
デフォルトの名無しさん:2005/03/29(火) 00:56:40
>>394 Stringクラスだけは特別でStringで変数を宣言すれば
newしないのにオブジェクトができるということでしょうか?
398 :
デフォルトの名無しさん:2005/03/29(火) 01:01:21
WEBアプリを開発しているものです。
文字化けについて質問します。
Tomcatを3.3.1aから4.1.31にバージョンアップしたのですが、"〜"文字を画面表示する際にが"!)"と化けてしまいます。
Tomcatのserver.xml,web.xmlの設定はインストール時デフォルトにアプリ用のコンテキストを追加しただけで
特に文字コード関連の設定は行っていません。問題なく表示されていたものが、バージョンアップにより文字化け
するようになる原因、またアドバイス等ございましたら、よろしくお願いします。
その他ミドルウェアも以下のように変更しています。
環境
RedHatLinux7.2
Tomcat3.3.1a→Tomcat4.1.31
Apache1.3.27→Apache1.3.31
jdk1.4.1_07→j2sdk1.4.2.07
>>396 Stringしか入らないListをList<String>と書く。この場合E=String。
? は任意のクラスを、? extends E は E の任意のサブクラスを指す。
>>397 >Stringクラスだけは特別でStringで変数を宣言すれば
違います。宣言はあくまで宣言。
ダブルクォーテーションでくくった文字列リテラルが
Stringオブジェクトになるだけ。
>>397 3.10.5 文字列リテラル
文字列リテラルは,常にString型(4.3.3)とする。文字列リテラルは,常にクラスStringの同一インスタンス(4.3.1)を参照する。
4.3.3 クラス String
文字列リテラル (3.10.5) は,クラス String のインスタンスを参照する。
文字列連結演算子 + (15.18.1) は,新しいオブジェクト String を暗黙のうちに生成する。
と仕様で決まっている。
つまり"厳密には違う"が
String a = "abc";
はコンパイラが自動的に
String a = new String("abc");
に変換してると考えると理解が早いかもしれん
class Hoge {
public final void work() throws Exception {
// 何か処理
}
}
class Piyo extends Hoge {
// いろいろと
}
Hoge obj = new Piyo();
try {
obj.work();
} catch (Exception e) {
e.printStackTrace(); // ※
}
この場合 ※ で出力されるスタックトレースにはPiyoが出てこないのですが
eから「これ、Hoge#work()で出た例外やけど実はインスタンスはPiyoやってん」
という情報を引っ張り出せないものでしょうか?
実際はPiyoの他にもう一つHogeのサブクラスを作っているのですが、work()で例外が出たとき
一体どっちのクラスのインスタンスから出た例外なのか分からなくて難渋してますorz
どなたかお知恵を貸して頂けないでしょうか?
e.printStackTrace()にこだわらなければいいんじゃないでしょうか。
e.printStackTrace()の前でも後でも適当にSystem.err.println(obj.getClass())するとか。
>>396 EとかTとかは、Listを作る時にパラメータとして指定するまで不定だってこと。
逆に言えば、EとかTは何にでもできる。
そして、あたかもEの部分がパラメータで指定した型であるかのように、型チェックが
行われる。
Listの「add(E o)」の E を指定するにはこうする。
List<String> list = new ArrayList<String>( 10);
これで、Eの部分が「String」になったListが出来る。<String>という形で、パラメータとして
型を渡すから、「パラメータ化された型」と呼ばれる。
で、1.4の add(Object o)は、Objectのサブクラスであればなんでも入る。Stringはもちろん、
MyClassだろうがLongだろうがなんでも入る。すべてのクラスはObjectのサブクラスだからな。
5.0の add( E o) の場合は、生成時に指定した型のオブジェクトしか入らない。上記例で
いえば、Stringオブジェクトしか入らない。もしLongとかを入れようとするとコンパイルエラーに
なる。
ポイントは、Eの部分は任意の型に変えられるってことだな。
パラメータで明示的に指定するまで型が不定とはそういうこと。
「なんだか分からんがプログラマが指定するだろう型 E を引数に取ります」という意味だ。
で、複数になると、Map<K, V>という風に指定するわけだ。このKとVが
add(K key, V value)
というふうに使えるというわけ。当然KとV はプログラマが指定するまで不定。
これでOKか?
コレクションといえばJ2SE5なら-warnuncheckedオプション正直デフォにしてほしいねぇ
コマンドライン引数を使ってhashtableに値を格納し、
それを取り出せるようなプログラムを作りたい。
keyとbalue共にコマンドラインから引数をhashtableに渡したいのですが、
Hashtable hashtable = new Hashtable();
for (int i = 0; i < args.length; i++){
// 値の格納
hashtable.put(args[i], ????);
}
????のところでvalueに値を格納したい訳ですが、
これをコマンドライン引数を使って値を格納する場合って
どのようにしたらよろしいのでしょうか?
>403
ううむ、やっぱしException以外から情報を得るしかないですか。
tryブロックの中に、別クラスのインスタンスがあって、そのメソッドも同じException投げるんで
Exceptionから取れたらいいなー、と思ったのです。
(てか、具体的に書いてしまうとJDBCをラップした(ような)クラスをいくつか作ってて、
それを参照系と更新系に分けて共通部を抜き出したはいいが、どのメソッドも発生しうる
SQLExceptionをcatchせずthrowするようにしてるんで、catchしたところでは
「参照系」か「更新系」のどっちでエラーが生じたか、しか分からないという……お粗末orz)
そのargs[i]は、public static void main( String[] args)のargsだと解釈しておくが、
args[i]がコマンドライン引数だと知っての上の質問か?
>406
それはコマンドラインの解釈によるとしか。
順にkey value[ key value ...]と続くとしたら、
for (int i = 0; i < args.length; i += 2) {
// キーと値の格納
hashtable.put(args[i], args[i + 1];
}
とか。(ほんとはちゃんとargs.lengthが偶数個か? とかチェックすべきだろうけど)
>>408 args[i]がコマンドライン引数だというのは分かってはいたのですが、
args[i]を使って、keyとvalueに引数を渡すのはどうしたらいいのかな、
と思った訳です。
>>409 なるほど、ちょっとそれでやってみます。
ありがとうございました。
411 :
396:2005/03/29(火) 02:34:43
>>399>>404 レスどうもです。八割くらい理解できたと思います
それよりすいません、ちょっと根本的な勘違いをしてたかも
これって1.5になって新しく追加された機能の説明ですよね
List<String> list = new ArrayList<String>( 10);
これ見て始めて見たオブジェクト生成宣言なので気づきました
実は1.5の知識は全くありません。どうりでわからなかった訳だ
申し訳ございませんでしたm(__)m
いままでどおりにやりたかったら<Object>をつければよろし
じゃないとデフォのままでも警告、warnuncheckedオプションでエラーがかえるしね
>>398 Java 1.4.1あたりから、Windows31JとShift_JISが明確に区別されるようになった。
・ちゃんとヘッダにcontentTypeをいれて、charsetを指定する。
指定するコードは、サーブレットが吐き出す漢字にあわせる。自分がどの漢字コードで書いている
かしっかり意識しろ。Shift_JISとWindows31Jは違うコード体系だ。
・JSPなら、かならずPageディレクティブでcontentTypeとPageEncodingを指定する。
ちなみに指定しない場合はデフォルトで勝手に望みもしないコードになるから気をつけろ。
contentTypeがshift_jisなのに、実はJSPファイルをWindowsで作ってて、そのまま漢字直打ちしてたら
まず化ける。JSPがWindows31Jなのに、contentTypeにShift_JISと書いてあるのでブラウザが混乱する。
その場合はどっちもWindows31Jにしよう。
・実はWindows31Jでも(ちゃんとヘッダにcontentTypeの指定があれば)マックなんかでもちゃんと表示される。
・めんどくさくなったら、ありとあらゆるファイルの内部文字コード、各種エンコード指定をすべてUTF8にする。
414 :
413:2005/03/29(火) 02:45:30
>>398 すまん1.4.1使ってたんだな。じゃあ別の理由のような気がする。
でもエンコード指定周りをきっちり設定して試してみた方がいいと思う。
415 :
403:2005/03/29(火) 02:57:58
>>407 >tryブロックの中に、別クラスのインスタンスがあって、そのメソッドも同じException投げるんで
>Exceptionから取れたらいいなー、と思ったのです。
必要な情報をもった例外クラスを投げればいいんじゃないでしょうか。
403では言わなかったがそもそもExceptionそのものをthrowしたり
Exceptionで全部の例外をcatchしたりするのはよくないよ。
>>412 見当違いな勘違いしてたというのに・・・フォローまでしてくれるなんて
本当に有難うございました
417 :
デフォルトの名無しさん:2005/03/29(火) 08:47:30
この前、アプレットのゲームを公開したのですが、PCの環境によって、プレイ出来る人と、灰色の画面で止まってプレイ出来ない人がいます。
もちろんブラウザの「javaをオン」にするように書いておきましたが。
マイクロソフトVMでも大丈夫なように -target 1.1でコンパイルしました。それでも互換性のない場合はあるのでしょうか?
また、プレイできないという人に話を聞くと、他のアプレットは動作するのに、このゲームはプレイできない、ということです。
思い当たる原因がないのですが、まずどう対処すればよいかわかりません(;_;)
>>417 MSのVMなんて捨てさせてやるのが世のため人のため。
構成環境の変更を安易に進める人達ってさ
企業の情報部門じゃないから問題ない
>>392 質問者からのレスがないので分からんが、
StringBuffer#append な事がやりたいのではないかな、とも推測してみる
>>390 くっつけるの意味は、例えば"type" と "writer" をくっつけて
"typewriter" って文字列を作りたい、
って事なのか?ちなみに
>>392は全くもって正しい操作だが、
"typewriter"って文字列が出来るわけではないぞ
文字列と文字列型配列が混同してない事を祈る
質問です。
データモデルクラス(DataModel)があって、それを配列で
インスタンス化して使っていきたいのですが、
データをセットするsetStr("あいうえお")にて
java.lang.NullPointerExceptionエラーがでてしまいます。
(コンパイルエラーはでません)どなたかご教授ください。
public class HairetsuTest {
public static void main(String[] args) {
DataModel[] dm001 = new DataModel[2];
dm001[0].setStr("あいうえお");
String abc = dm001[0].getStr();
System.out.println(abc);
}
}
>>423 public class HairetsuTest {
public static void main(String[] args) {
DataModel[] dm001 = new DataModel[2];
for( int i =0; i < dm001.length; i++ ) {
dm001[i] = new DataModel();
}
dm001[0].setStr("あいうえお");
String abc = dm001[0].getStr();
System.out.println(abc);
}
}
>DataModel[] dm001 = new DataModel[2];
配列をつくってるだけであってインスタンスの生成ではない
この時点では{ null , null } の状態
>>423 わかんなかったらよーく考えてみ、キミがやろうとしてる事は
int[] ary = new int[10];
int x = ary[3];
と同じだよ。
普通は
int[] ary = new int[10];
for(int i = 0 ; i < ary.length ; i++){
ary[i] = i; // 配列の初期化(値は今はテキトー)
}
int x = ary[3];
って初期化してから使うだろ?
これのプリミティブ型が参照型に変わっただけ
ただ参照型の場合は、最初の配列の生成で使うnewが、
インスタンス生成のnewとダブって見えて
あたかも既にnewでインスタンスを生成したように勘違いしてしまう、
それだけなんだよ
つーか、俺が昔そうだった... orz
int[] ary = new int[] {0,0,0,0,0,0,0,0,0,0}
428 :
390:2005/03/29(火) 14:15:59
>>391 携帯Javaのエミュレータだったのと関係があるのかもしれません
>>392 >>422 大変参考になりました。何かどんでもないところで勘違いしていたようでした。
String[] entry = {"
http://〜〜〜/cgi-bin/"};
String[] s = new String[] {entry[0] + "?com=1"};
でメソッドにsを入れるとうまくいきました。これからStringBufferを使って効率化しようと思います。ありがとうございました。
つ Arrays.fill()
使わんがなぁ
ふと思ったんだけれども fill(Object[] a, Object val) って、いつ使うんだろう…
一つのインスタンスへの参照を任意の数作りたい時?
いい使い道があれば教えてくだされ
431 :
423:2005/03/29(火) 14:23:28
「 new int[] {0,0,0,0,0,0,0,0,0,0} 」 = 「 new int[10] 」
と言いたかったのではないかと解釈
お世話になります。
アプレットのコントロールからブラウザの画面を遷移させることは
可能でしょうか?
434 :
433:2005/03/29(火) 14:43:22
433です。AppletContextクラスのshowDocument(URL)を使用するようです。
スレ汚し申し訳ございません。
435 :
デフォルトの名無しさん:2005/03/29(火) 15:12:01
int[] arr = new int[] {0,0,0,0,0,0,0,0,0,0};
はシンタックスにかなう初期化となる。
用語について質問です
デフォルトコンストラクタと言うのはJavaの中の人が作ったコンストラクタ
だと思うのですが、Javaの解説サイトによっては引数なしコンストラクタの
事を指している場合もあるようです
デフォルトコンストラクタは間違いなく引数なしコンストラクタだと思いますが
引数なしコンストラクタがデフォルトコンストラクタとは限りませんよね?
私の解釈がおかしいのでしょうか?
>>436 それで合ってると思うよ。
ただ、引数なしコンストラクタを記述して
それがデフォルトじゃない場合というのがあまり想像できない。
で、あってると思う
考えてみるとデフォルトコンストラクタって呼び方がおかしい気がしてきた
単にコンストラクタのオーバーライドをしていないから継承元のコンストラクタが使用される
だけで、勝手にコンストラクタが作られてるわけじゃないよな?
引数なしコンストラクタだってObject()ってだけだし
ただ、コンストラクタは一つでもオーバーライドするとそれ以外は全部隠蔽されるってのが
メソッドと違うところか
>>438 勝手にコンストラクタが作られているのですよ。コンストラクタは継承されません。
440 :
デフォルトの名無しさん:2005/03/29(火) 15:37:05
コンストラクターとしてとくにクラスファイルに記述しなくても、スーパークラスのコンストラクター
が引数なしのコンストラクターをもっている限り(普通だが)、引数なしで new すればそのコンストラクター
が呼ばれるわけだから、それはデフォルトのコンストラクターと言って良いのでは..
>>438 > 単にコンストラクタのオーバーライドをしていないから継承元のコンストラクタが使用される
> だけで、勝手にコンストラクタが作られてるわけじゃないよな?
私は、「勝手に作られている」と考えたほうが分かりやすいような気がするけど・・・。
> ただ、コンストラクタは一つでもオーバーライドするとそれ以外は全部隠蔽されるってのが
コンストラクタはオーバーライドできないです。
あと、「隠蔽」って言葉も、なんか違うような気がする。
存在するけど、今は見えないとか、存在するけど、アクセスするにはレシーバを明記しなきゃならん
ってときに隠蔽って使うんじゃないかな。
>>437 >>438 様
レスありがとうございます
前に何かで Class#newInstance はデフォルトコンストラクタを呼ぶ
とか書いてあるのを見て、ハァ? だったんですが
間違ってなかったんですね、ありがとうございました
でも引数なしコンストラクタを「デフォルト」であると
いうのも分からないでもないですが、、、
やっぱり呼び方に違和感を感じてるのは私だけではなかったようで
443 :
438:2005/03/29(火) 15:46:30
すまん、今実験してて間違いに気づいた
引数なしのコンストラクタ = デフォルトコンストラクタ
であって、特殊なものなんだな(明示的な実装の有無にかかわらず)
コンストラクタを持たないクラスは存在しないので、実装されていない場合は
デフォルトコンストラクタが補完される
439 の通りコンストラクタは継承されないのでコンストラクタを作らずにクラスを
実装するとデフォルトコンストラクタのみとなるわけだ
ただし例外がある
デフォルトコンストラクタを持たないクラスを継承してクラスを作った場合は、
継承先にデフォルトコンストラクタは生成されない
(なんらかのコンストラクタを作らないとコンパイルエラー)
で、OKでしょうか?
444 :
438:2005/03/29(火) 15:50:49
突っ込まれまくり o...rz
精進します
>引数なしのコンストラクタ = デフォルトコンストラクタ
え?
446 :
デフォルトの名無しさん:2005/03/29(火) 15:54:59
>デフォルトコンストラクタと言うのはJavaの中の人が作ったコンストラクタ
>だと思うのですが
根拠は?
>>443 > 引数なしのコンストラクタ = デフォルトコンストラクタであって、
厳密には、ちがうんじゃ・・・。
クラスがコンストラクタ宣言を含んでいなければ,実引数を取らないコンストラクタが
コンパイラによって自動的に提供される。これが「デフォルトコンストラクタ」。
デフォルトコンストラクタと同じように、実引数を取らないコンストラクタを
自分で書いたら、それはデフォルトコンストラクタとは言わない。
コンパイラが自動的に提供するのが、デフォルトコンストラクタ。
> コンストラクタを持たないクラスは存在しないので、実装されていない場合は
> デフォルトコンストラクタが補完される
順番が逆では?
「コンストラクタが一つも実装されていない場合はデフォルトコンストラクタが補完される」
ので、
「コンストラクタを持たないクラスは存在しない」
> デフォルトコンストラクタを持たないクラスを継承してクラスを作った場合は、
> 継承先にデフォルトコンストラクタは生成されない
違う。以下反例。
クラス Foo はデフォルトコンストラクタを持たないが、クラス Test にはデフォルトコンストラクタが生成される。
class Foo {
public Foo() {
}
}
class Test extends Foo {
}
>>447が言うのと違うけど。
勝手に作られたものだけを「デフォルト」と決めなくてもいいんでは?
勝手に作られる代わりに、自分で作ったのもデフォルトコンストラクタ。(だと思ってる)
コンストラクタなし⇒コンパイラが勝手に作ったデフォルトコンストラクタ
引数なしコンストラクタ⇒自分で作ったデフォルトコンストラクタ
だから、デフォルトコンストラクタ=引数なしコンストラクタとしても、良いと思う。
450 :
デフォルトの名無しさん:2005/03/29(火) 16:03:01
デフォルトのコンストラクターとは、コンストラクターが宣言されていないため、コンパイラーに
よって提供される
Object() {}
の形の何も実行せずそのまま制御をかえすコンストラクターのこと。
451 :
デフォルトの名無しさん:2005/03/29(火) 16:05:29
>>448 >言語規定の8.6.7
言語規定って何ですか?
正直、デフォルトコンストラクタなんて何だっていい。
議論するだけ時間とスレの無駄。
デフォルトコンストラクタとは
コンパイラがによって自動で生成提供してくれる引数なしのコンストラクタ
だと思うぞ。
>>449の
自分で作った時点でそれはすでに厳密な意味ではデフォルトではないと思う。
自分で作ったものをデフォルトとして扱う、ってだけじゃないかな。
455 :
デフォルトの名無しさん:2005/03/29(火) 16:14:38
>>453 "宣言しているクラスが,ルートクラスであるクラス Object ならば,デフォルトコンストラクタは,空の本体をもつ。
そうでなければ,デフォルトコンストラクタは,実引数を取らず,実引数をもたないスーパクラスのコンストラクタ
を単に呼び出す"
..ということですね。
>>449 まあ、そういう「自分用語」を自分でだけ使ってる分には問題ないけど、
他人と話すときはまずいと思うよ。
例えば、Java 言語規定の「8.8.7 デフォルトコンストラクタ」に出てくる
「デフォルトコンストラクタは,throws節をもたない。」
っていう記述。
>>449 の意味でいくと、間違ってるってことになっちゃう。
自分用語の「デフォルトコンストラクタ」と、言語規定で使われている
「デフォルトコンストラクタ」っていう用語を、区別する必要が出てくる。
「今ここで私が使うデフォルトコンストラクタっていう用語は、言語規定で
言われている同名の用語とは別の用語である。私が使うデフォルトコン
ストラクタという用語の意味は、言語規定の同名の用語が指すものに加え、
プログラマが宣言した引数を取らないコンストラクタも含むとする。」
って、いちいち前置きしてくれるなら、文句は無い。
(私なら、「引数をとらないコンストラクタ。」って呼ぶどな。)
Javaより先にC++を知っていると、混同しがちだ。
C++の用語のデフォルトコンストラクタは、まさに引数を取らないコンストラクタだ。
458 :
デフォルトの名無しさん:2005/03/29(火) 16:32:08
言葉の詮索も好いですが、実際に動くプログラムを書きましょう..
PreparedStatementに関する質問よろしいでしょうか?
SQLの?にあたる部分に、値をセットしますがセットした後のSQL文を確認したいのです.
pStmtに何が入っているかわからないので、エラー、バグの検出に時間がかかってしまいます。
String strsql = "insert into catalog (id , name) values ( ? , ?)";
PreparedStatement pStmt = null;
String strsql = null;
pStmt = con.prepareStatement(strsql);
pStmt.setInt(1, 1000);
pStmt.setString(2, "てすと");
//ココでpStmtの内容をチェックしたいのです。ココでは下記内容。
//insert into catalog (id , name) values ( 1000 , "てすと");
//バッチ登録
pStmt.addBatch();
//バッチの実行
pStmt.executeBatch();
pStmt.close();
よろしくおねがいします。
>String strsql = "insert into catalog (id , name) values ( ? , ?)";
>PreparedStatement pStmt = null;
>String strsql = null;
何故コンパイルエラーにならないかわからない
461 :
438:2005/03/29(火) 16:55:18
引っ張ってすまないが、これで最後
「引数無し&throws節無しのコンストラクタがデフォルトコンストラクタとして見なされる」
と結論を出したのは、以下が根拠
(throws > 前述では考慮してなかった スマン)
コンストラクタ無しのクラスを作った場合、継承元のデフォルトコンストラクタが使用される
このとき、継承元にデフォルトコンストラクタが定義されていない場合はコンパイルエラーとなる
これを判断基準に親クラスのコンストラクタをいろいろ作ってみたところ
・コンストラクタ無し (コンパイラ側で引数無しのコンストラクタが生成された)
・引数無し&throws節無しのコンストラクタを実装
の場合のみOKであった
462 :
459:2005/03/29(火) 16:57:39
>>460 申し訳ないです。
String strsql = null;は必要ありませんでした...
String strsql = "insert into catalog (id , name) values ( ? , ?)";
PreparedStatement pStmt = null;
pStmt = con.prepareStatement(strsql);
pStmt.setInt(1, 1000);
pStmt.setString(2, "てすと");
//ココでpStmtの内容をチェックしたいのです。ココでは下記内容。
//insert into catalog (id , name) values ( 1000 , "てすと");
pStmt.addBatch();
pStmt.executeBatch();
pStmt.close();
>>459 デバッガで無理やり中を覗いたことはあるけれども
PreparedStatementから直接取得はできなかった記憶がある
独自拡張するかログの出し方を工夫するしかないと思う
そもそも PreparedStatement は、DBで先にパラメータ化したSQLの解析を
行うわけだからSQLとして取得というのは原理的に不可能
(?部分を文字列的に置き換えて実行しているわけではない)
?を順番に値で置き換えて自分でログをはけばいい
>461
おまいは、ゴスリンよりもビル・ジョイよりもガイ・スティールよりも偉いというのか?
468 :
449:2005/03/29(火) 17:35:19
>>456 そこまで、言われると反論できん。
俺は
>>449の解釈がが自分用語とは思わず、
言語既定で言われているデフォルトコンストラクタが、それだと思っていただけです。
「自分用語」押し付けるつもりはなかったです。ゴメン
469 :
466:2005/03/29(火) 17:44:03
>>467 ということは、
aとcは同じオブジェクトであるということでしょうか?
つまり、aを変更すればcの内容も変わるということですか?
>>469 まあそうなんだが、Stringはimmutableなクラスなので変更不可能
471 :
デフォルトの名無しさん:2005/03/29(火) 17:52:20
>>469 同じオブジェクト。
aをへんこうするというのは、aの参照先を変えるだけ。
もともとaが指し示していたStringオブジェクトの中身は変えられない。
472 :
466:2005/03/29(火) 17:55:11
473 :
459:2005/03/29(火) 18:22:27
>463 >464
ありがとうございました。独自で関数をつくって出力してみます。
コレクションクラスは、似たようなものが多すぎて
何に違いがあるのかを明確に捉えることが難しいですね。
コレクションについて解りやすく説明されてるサイトをご存知な方いらっしゃいますか?
475 :
デフォルトの名無しさん:2005/03/29(火) 20:06:11 ID:
Linuxでjavaアプリを動かしてます。
PostgreSQLサーバとそのjavaアプリを同一マシンで動かしてます。
そのjavaアプリはPostgreSQLサーバに接続し、SELECT, UPDATE, DELETE...等を行います。
そのjavaアプリを作った人は前任者で、今は私が担当になってます(javaは良く知らない)。
そこで基本的な事をお聞きしたいのです。
1.JDBCはPostgreSQLサーバへの接続にIPv4+TCP or IPv6+TCPといった方法でしか接続出来
ないのでしょうか?UNIXソケットとかはありえないのでしょうか?
2.Jdbc3PoolingDataSourceのdataSourceNameとは何なのでしょうか?
ODBCのデータソースの様な物なのでしょうか?
(私は違う様な気がしています。JDBCの持つプールという物に関する特殊な物と思っていま
す)
3.以下の様な感じで既存のコードは動いていました。
----------
Jdbc3PoolingDataSource source = new Jdbc3PoolingDataSource();
source.setServerName("127.0.0.1"); // 若しくはIPv6アドレスが入る。
source.setDatabaseName("test");
source.setUser("testuser");
source.setPassword("testpassword");
Connection con = source.getConnection();
----------
↑この様に、データソースという項目を無視しているのですが、それは問題無いのでしょ
うか?
4.現場のお客さんから「PostgreSQLサーバ設定をTCPコネクションを不可能にした状態でも
、このアプリが正常に動いたよ」と言われたのですが、それは本当なのでしょうか?私は
「有り得ないんじゃないか?お客さんの勘違いなんじゃないか?」と思っているのですが。
実は設定ファイルを書き換えた後にサーバの再起動をしていないとか…。
http://www.postgresql.jp/document/pg734doc/programmer/jdbc.html#JDBC-SETUP 5.1.3. JDBC のためのデータベースの準備
Java は TCP/IP 接続しか使用しませんので、PostgreSQL サーバは TCP/IP 接続を受け入れるように構成しなければなりません。 この構成は postgresql.conf ファイルで tcpip_socket = true と設定するか、postmaster の起動時に -i オプションを与えることで可能になります。
また、pg_hba.conf ファイルによるクライアント認証の設定が必要かもしれません。 詳細は 管理者用ガイド を参照してください。JDBC ドライバは、trust、ident、password、md5、crypt の認証方法をサポートします。
478 :
474:2005/03/29(火) 20:26:51
479 :
474:2005/03/29(火) 20:27:09
List,Map,Set,Queueが基本
これらの実装としてなんちゃらListとかあるわけだ
LinkedListはQueueインターフェースも実装しているので
多少ややこしいかもしれない
俺の使用頻度としてはList>Queue=Map>Setってあたりか
正直Queueは便利な実装が多くて予想以上に便利だった
481 :
デフォルトの名無しさん:2005/03/29(火) 22:03:47
Swingプログラミングで、既存のクラスを継承してあれやこれやする事がありますが、
NetBeansでGUIデザインしてそのワザを使うにはどうすればいいんでしょうか?
JPanelを継承して描画するように死体けど、JPanel貼っ付けてもextendsとか書けんし
>482
今さらTorqueは無いだろう。
質問です。
「Mar 10 10:11:12」(3月10日10時11分12秒)
↑の文字列を日付型に変換して、「yyyy/MM/dd hh:mm:nn」形式に変換したいのですが、
どうやったらいいのでしょうか?
月の略字を数字の月に変換したいのです。
イマイチやり方がわかりません。
つ SimpleDateFormat
質問です、お願いします
StringのtoStringメソッドってどんな意味があるんですか?
いや、JavaDoc読んでこのオブジェクト自身を返すというのは解かります
それなら、下の例*1じゃなくて*2でもいいですよね
今読んでる参考書で文字列の比較するのに*1の方法を取ってるんですけど
何かメリットがあるんでしょうか?
String valhoge1="hoge1",valhoge2="hoge2";
*1
if ("hoge1".toString().equals(valhoge1)) {
System.out.println("hoge1=valhoge1");
} else if("hoge1".toString().equals(valhoge2)) {
System.out.println("hoge1=valhoge2");
}
*2
if ("hoge1".equals(valhoge1)) {
System.out.println("hoge1=valhoge1");
} else if("hoge1".equals(valhoge2)) {
System.out.println("hoge1=valhoge2");
}
つーか普通にやればいい
日付文字列の取得はScannerで取り込め
でも年はどーするんだ
出力は
Date date = ・・・
String data = String.format("%1$tY/%1$tm/%1$td %1$tH:%1$tM:%1$tS",date);
とか
DateFormat from = new SimpleDateFormat("MMM dd hh:mm:ss", Locale.ENGLISH);
DateFormat to = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
Date date = from.parse("Mar 10 10:11:12");
//Calendar cal = Calendar.getInstance();
//cal.setTime(date);
//cal.set(Calendar.YEAR, 2005);
//date = cal.getTime();
System.out.println(to.format(date));
今年の日付にしたかったらコメントアウトした部分も必要。
>>486 普通*2のやり方で書く。
通常、*1にメリットはない。
結局hashCode()を比較しているわけだし。
>>489 hashCode をよくわかってないのがバレたね。w
hashCode は int 値なので、任意の異なる文字列を持つ2つの
String のインスタンスについて、必ず異なる hashCode を算出できるはずが無いでしょ?
@オブジェクト.メソッド()
A変数=オブジェクト.メソッド()
@のオブジェクトに対するメソッドを実行し、その結果をオブジェクト内に格納する方法と
Aのオブジェクトに対するメソッドを実行し、その結果を変数内に格納する方法では
使い方の違いはあるのでしょうか?
>491
すごくデジャブを感じるのだが、@とAのオブジェクトとメソッドが全く同じだと仮定して
>@のオブジェクトに対するメソッドを実行し、その結果をオブジェクト内に格納する方法と
いや、@は「その結果をオブジェクト内に格納」してないから。結果をどこにも格納してないだけ。
>>492 多分
オブジェクト.メソッド()
とすることで、元のオブジェクトに変化が起きている
ということを言いたいのではないだろうか、
どっちにしろ自分が聞きたいことをロクに書けないような奴が
書いていることだからあてにはならんけど
System.err.println("data");
System.out.println("data");
誰かこの二行の教えてください・・・
どんな標準出力かコード見てすぐにわかるってだけですか?
495 :
494:2005/03/30(水) 00:55:29
×誰かこの二行の教えてください・・・
○誰かこの二行の違いを教えてください・・・
標準出力と標準エラー出力は意味合いが全然が違うだろ。
それの違いがわからないというのであればJava以前の質問なので初心者板でも行け。
今となってはどっちでもたいした違いがない気もするが
>>494 System.outとSystem.errは出力先として全然違う。二つのファイルが違うということと
同じくらい違う。
UNIX系OSの標準出力と標準エラー出力は、通常はどちらもコンソールに繋がってる
ので同じに見える。けど繋がってる先を簡単に変える事ができるから分けてる意味がある。
もし標準出力(System.out)の接続先がファイルに変更されたとしても、System.errに
吐き出したエラーメッセージは、ちゃんとコンソールに出力される。
499 :
494:2005/03/30(水) 01:42:40
>>496-498 レスどうもです
>標準出力と標準エラー出力は意味合いが全然が違うだろ。
そうなんですか、プログラミング全般の基礎知識だとは知りませんでした
まだ、javaしかプログラミングの勉強してないんでjavaの質問だと思ってました
標準出力、標準エラー出力でググッて見たら確かにたくさんありますね
勉強してきます、失礼しました
500 :
デフォルトの名無しさん:2005/03/30(水) 10:43:12
参考書でAppletクラスのrepaint()を呼び出すと
update()が呼び出されて、コンポーネントを背景色で塗りつぶして、paint()を呼ぶって書いてあるんだけど
実際にやったら、背景が塗りつぶされないのですが、何故でしょうか。
501 :
500:2005/03/30(水) 10:50:33
updateオーバーライドしてた、スマソ
502 :
デフォルトの名無しさん:2005/03/30(水) 12:13:06
すいません次のプログラムを作成していただけませんか。
三角形を表すTriangleクラスを宣言する。
Kadai2_1クラスのmain()メソッドで、Triangleオブジェクトを作成し、面積を表示する。
【Triangleクラスの構成】
<フィールド>
private double base; //三角形の底辺の長さ
private double height; //三角形の高さ
<コンストラクタ>
public Triangle(double b, double h); //底辺、高さの初期値を設定する
<メソッド>
public double getArea(); //三角形の面積を計算し、戻り値として返す
マルチですかそうですか
入門書のそのまんまの問題でワラタ
if(マルチ || すれ違い){
// 何もしない
}
else{
回答を考えてあげる
}
506 :
デフォルトの名無しさん:2005/03/30(水) 12:40:26
>>502 できたぞ
public class Call{
public static void main(String[] args) {
Trianan t=new t(10,10);
t.getArea();
System.out.println("平方センチメートルです。(・3・)");
}
}
class Trianan{
public Trianan(double b, double h){
System.out.print("面積は");
}
public double getArea(){
System.out.print("12");
}
}
>>506 頼むからマルチに回答するのはやめてくれ
まあ、この回答内容ならいいか...
509 :
デフォルトの名無しさん:2005/03/30(水) 13:54:29
>506
なぜTrianan?
511 :
デフォルトの名無しさん:2005/03/30(水) 14:00:31
>>509 そうじゃないとコンパイルエラーになる。
別に意味なんてないと思うけど
J2EE1.3とか1.4で、中に含まれる技術が何で、
どの技術がどのバージョンをサポートしている
とかって情報はどっかに一覧でないっすかね?
例えば、こんなの。(Versionがあっているかは知らんけど)
J2EE1.3に含まれる技術
Servlet:2.3
JSP:1.2
EJB:2.0
・・・
J2EE1.4に含まれる技術
Servlet:2.4
JSP:2.0
EJB:2.1
・・・
>>506 new tってなんだ?
インストラクタの引数は何処へ?
インストラクタ?
>>515 コンストラクタ
天然でボケた・・・軽く自分でワラタw
いっぱいJAVA勉強して世界を征服してみせるぞっ!
他の方が書いたコードをとある事情から読んでいるのですが、
int 型の a, b があって
if ((a & b)) != 0) {
temp = doSomething()
}
if ((a & b)) == b) {
returnValue = temp;
} else {
returnValue = doSomethingElse();
}
と言う処理が続けてある状態です。
数学というか論理の基本が絶望的なのでどうにも分からないのですが、
if ((a & b) != 0) {} と if ((a & b) == b)) {} で
抽出出来る違いってなんでしょう?
a が 0 の場合、どちらも必ず偽になりますよね。
a が 0 以外の場合、a & b は 0 か b にしかならない…ので
一緒くたにできるような気がするのですが、どこが勘違いしているのでしょうか?
521 :
520:2005/03/30(水) 15:18:20
ああしまった。半角スペースじゃ整形駄目ですね...すみません。
コードの部分は
if ((a & b)) != 0) {
temp = doSomething()
}
if ((a & b)) == b) {
returnValue = temp;
} else {
returnValue = doSomethingElse();
}
と言った感じです。
>>520 「&」 はbit単位の演算だよ
だから結果は真とか偽とかじゃなくて、1234とかのint値
論理演算は「&&」ね
>>520 2 & 1 は 2 になるか?
3 & 1 は 3 になるか?
a が 2、b が 1 の時は a & b は 2 になるか?
a が 3、b が 1 の時は a & b は 3 になるか?
を考えろ。
大丈夫だ! 正確には59秒だから
526 :
デフォルトの名無しさん:2005/03/30(水) 15:41:48
>>520 >a が 0 の場合、どちらも必ず偽になりますよね。○
>a が 0 以外の場合、a & b は 0 か b にしかならない…ので×
a=(2)10進 (0010)2進
b=(6)10進 (0110)2進
a & b = (0010)2進 (2)10進
↑
aが0以外なのに、a & bの結果が0かbじゃない。
その条件式を見て、何がしたいのかさっぱりわからん。
>>521 Javaの&&、||はboolean型にしか使えないし
Cの比較演算と混同してないか?
ところで、「(a&b) == b」って、「a == -1」と同義だよな?
そっちの方が速い気がするけど最適化されるんだろうか?
>>520の混同はさておき何がしたいのかはよく分からんな。
論理演算で &、| が定義されてること知らない奴多そうだな。
もともと temp には何か入ってんだろ
532 :
520:2005/03/30(水) 16:05:29
ああ、ありがとうございます_| ̄|○
多分に混同しているようで…
a, b が説明不足だったのですが、
ビットパターンとして定義している幾つかの数値があり、
a はこのいずれかのパターンか、もしくはパターンをビット演算した結果か、0
b はこのいずれかのパターン(a と異なりビット演算の結果は NG)か、0 と言う契約です。
この前提だと、前者
if ((a & b) != 0) は a が b を含んでいるか、ですかね。
if ((a & b) == b) は...やはり a が b を含んでいるか、でしょうか。むう...
後者はすべてのビットがたっているかだろ?
>528
>ところで、「(a&b) == b」って、「a == -1」と同義だよな?
否。
a==-1 ⊃ (a&b)==b
だが、
(a&b)==b ⊃ a == -1
ではない。
たとえば a == 3 の場合は b in {0, 1, 2, 3} を意味する。
535 :
528:2005/03/30(水) 16:09:03
ゴメン違った、(a == b の場合も入るな...)
忘れてくれ... orz
536 :
デフォルトの名無しさん:2005/03/30(水) 16:12:53
if ((a & b) != 0) は
a の ビット が 1 の ところは、b では 0 になっている
if ((a & b) == b) は 逆に
a の ビット が 1 の ところは、b でも 1 になっている
ことを表わしている。
> if ((a & b) != 0) は
> a の ビット が 1 の ところは、b では 0 になっている
a の ビット が 1 の ところは、b では少なくとも一つ以上 1 になっている。
>>532 は、&&と&の違いを認識してからレスしる
その書き方はまだ&&の方だぞ
キミに足りないのは
>数学というか論理の基本が絶望的なのでどうにも分からないのですが、
では無くてJavaの演算子の知識だ
boolean型 & boolean型(論理演算)
と
boolean型 && boolean型(効率化論理演算)
と
int型 & int型(ビット毎の論理演算)
がこんがらがってるんだろう、と推測
一番上のは(今は)忘れた方が良いかも知れん
540 :
デフォルトの名無しさん:2005/03/30(水) 17:00:38
これでいろいろ遊ぶと、ビット演算の感じがつかめるよ。
コマンドラインの入力はパラメーターふたつでともに0から254の範囲でどうぞ..
public class BinaryTest{
final static char[] coeffs = new char[]{(char)0x30,(char)0x31};
public static String toBinary(int n) {
char[] binary = new char[8];
for(int j=0;j<binary.length;j++) binary[j]=(char)0x30;
int charPointer = binary.length -1;
if(n==0) return "0";
while (n!=0){
binary[charPointer--] = coeffs[n&1];
n >>>= 1;
}
return new String(binary);
}
public static void print(int n){
System.out.print(BinaryTest.toBinary(n));
System.out.print(" ");
System.out.println(Byte.toString((byte)n));
}
public static void main(String[] args) throws Exception{
int a=Integer.parseInt(args[0]);
int b=Integer.parseInt(args[1]);
BinaryTest.print((a));
BinaryTest.print((b));
BinaryTest.print((a&b));
}
}
541 :
520:2005/03/30(水) 17:31:09
これほどレスを戴けるとは。_| ̄| -=≡○ありがとうございます。
取りあえず少し頭を冷やしてきます…が、だんまりも失礼なので無理矢理。
>>533,
>>536-537 例えば前者(if((a & b) != 0))
は(今回 b は最高一つしかビットが立たないのですが例えば)
a 0110 1100
b 1010 1110
-----------
c 0010 1100
のようなものが当てはまり(c != 0)、後者(if((a & b) == b)ではこれが
当てはまらない(c != b)。後者は
a 0110 1100
b 0100 1000
------------
c 0100 1000
のようなものが当てはまる(c == b)(※前者(c != 0)も当てはまる)
なので、後者は a & b の結果 b のビットが全て立っているか(
>>533)、
と言う確認ってことですかね。ここまででしたら何とか…
…む、でも
>>536 の
| if ((a & b) == b) は 逆に
| a の ビット が 1 の ところは、b でも 1 になっている
のパターンは、上記の例の後者とは矛盾(a の上3桁目等)してますね…
やはりまだ理解してないか…再考します。
>>540 うわああぁぁああぁ(゚Д゚;)、ありがとうございます。ちょっと勉強してきます…
>>541 > 今回 b は最高一つしかビットが立たないのですが
あれ、だったら
if((a & b) != 0) と if((a & b) == b) で実質評価してるところって
結局変わらないことない?漏れも混乱してきたわ。
543 :
513:2005/03/30(水) 18:09:09
>>518-519 dくす
なんか全然違うところとか、PDFとか見てて疲れはてて、ここに書いてみた。
正直すまんかった。今は反省している。
544 :
デフォルトの名無しさん:2005/03/30(水) 18:57:27
>>542 私もそう思います
が、バグッたときやデータのエラーにより
ビットが増えたときの事を考えたら
if((a & b) != 0)
のほうが無難かと
545 :
192.168.0.774:2005/03/30(水) 19:29:58
javaしようと思ってるのですが、スタートメニューにコマンド
プロンプトがない場合どうしたらよいでしょうか???
誰かバカな私に知識を〜〜
546 :
デフォルトの名無しさん:2005/03/30(水) 19:30:43
JtextAreaに書き込んだ文字列を取り出すにはどうしたらいいのでしょうか。
>>545 [スタート]-[プログラム]-[アクセサリ]-[コマンド プロンプト]
使われていない項目が折りたたまれてる可能性があるから [アクセサリ] の中を表示したまましばらく
ボケッと見てなさい。
マジで無いのであれば [スタート]-[ファイル名を指定して実行] で「名前」に cmd とだけ入力して「おk」
548 :
192.168.0.774:2005/03/30(水) 19:50:57
>>547 cmd.exeが三種類見つかったのですが…
どれを使ってもよいのですか??
system32
servicePackFiles
SoftwareDistribution
とこんな場所に…
549 :
デフォルトの名無しさん:2005/03/30(水) 19:52:41
普通system32のを使うと思われ。
550 :
デフォルトの名無しさん:2005/03/30(水) 19:53:49
>>548 ひとつずつ試すべし
はずれを当てると...
どうなってもしらない
くわばらくわばら
551 :
548:2005/03/30(水) 19:56:43
552 :
デフォルトの名無しさん:2005/03/30(水) 19:58:15
>>548 マジで無いみたいだし実行ファイル探すくらいの知識はあるみたいだからもうちょっと詳細に書こう。
コマンドプロンプトのプロパティ
リンク先: %SystemRoot%\system32\cmd.exe → C:\WINDOWS\System32\cmd.exe
作業フォルダ: %HOMEDRIVE%%HOMEPATH% → C:\Documents and Settings\<username>
554 :
デフォルトの名無しさん:2005/03/30(水) 20:20:03
>>552 思いっきりマジですた。
ありがとうございます。
555 :
548:2005/03/30(水) 20:42:30
>>553 ありましたwww
いろいろやってるうちにようやく
最初のプログラム
「Hello Java World」
を打つことに成功しましたww
ほんとうにありがとうございました!!!!!!
これからも精進してがんばります
556 :
デフォルトの名無しさん:2005/03/30(水) 20:55:06
>>555 なんかチミのレスは読んでて気持ちがいいね
マジ回答してお礼も言えないバカが増えたこの板だけど
救いのある若者ってまだまだいるのね
> マジ回答してお礼も言えないバカが増えたこの板だけど
昔からそうだったよ
>>556 おまいはお礼をいってもらいたいからマジレスするのか?
心の狭いやつだな。分からない人がいて質問をする。
それに対して、回答をしてあげる。それでいいじゃないか。
礼儀知らずなやつだな、と思いたきゃ勝手に思っておけばいいだけじゃない。
560 :
デフォルトの名無しさん:2005/03/30(水) 21:50:44
>>555 なんかチミのレスは読んでて気持ちがいいね
マジ回答してお礼も言えないバカが増えたこの板だけど
救いのある若者ってまだまだいるのね
>>555 なんかチミのレスは読んでて殺伐するね
マジ回答にお礼を期待する莫迦が増えたこの板だけど
脳内捏造の懐古主義って早く氏んでね
562 :
デフォルトの名無しさん:2005/03/30(水) 22:14:57
チンコロ脳内↑ プッ
夜になると餓鬼の執拗偏執狂がふえるな
礼儀は人として前提条件
それに(氏んでね)とかつかうのは
大脳萎縮始まってる
脳内捏造てどこでコピペしてきたの?ぼうや
何顔真っ赤にしてマジレスしてんだw リアル莫迦かwwwww
↓お約束の無職認定
無色
> 礼儀は人として前提条件
↓
> 大脳萎縮始まってる
>>541 もとのプログラムで何をやろうとしているのかはわからないけどさ、
1をオン、0をオフとしてみようじゃないか。
たとえば、
(a & b) == 0
は、bのビットが1のところが全部0のときに真になる。だから、
「bで指定したビットがオフであることを確認する」という意味だね。
(a & b) != 0
は、「bで指定したビットのうちいくつかはオンのまま」であるかどうか
という判定だね。
(a & b) == b
こいつは、一番最初のと逆で、bで指定したビットが全部1である場合に
真になる。だから「bで指定したビットが全部オンか?」というチェックだ。
だから、8ビットの下位から2ビット目がオンであることをチェックする場合は
( a & 00000010) = 00000010
でチェック出来るというわけ。
「&」は右オペランドの「0」のビットを全部0でマスクするから、残った部分の
ビット状態を確認するときに使うもんだと覚えておけばいい。=の右側が
チェックしたいビット状態を表している。=0なら「全部オフか?」と聞いている
わけだ。
逆に「|」は、右オペランドの1の部分を全部オンにするので、特定ビットを
オンにするときに使うというわけ。
みんな幸せですよ
愛のシステム
おまえも名wwwwww
m9(^Д^)プギャー
早く春休みヲワレ厨房ウザ
そして厨房認定w
sagetesimae
konnasure
tyubogainakunarumade
sagetesimae
konnasure
tyubogainakunarumade
__________∫__∫________
|\ ________∧_∧______∫_ \
| \ \ ∫ ( ´∀`) ∫ \ \
| \ \ ∫ 〜〜〜〜 ∫ ∫ \ \
| \ \___________________\ \
| \_____________________\
\ | |
\ | |
\ | |
\ | |
\|______________________|
sagetesimae
konnasure
tyubogainakunarumade
sagetesimae
konnasure
tyubogainakunarumade
連投厨房がんがれよ
連投厨房がんがれよ
連投厨房がんがれよ
連投厨房がんがれよ
|\ ________∧_∧______∫_ \
| \ \ ∫ ( ´∀`) ∫ \ \
| \ \ ∫ 〜〜〜〜 ∫ ∫ \ \
| \ \___________________\ \
| \_____________________\
\ | |
\ | |
\ | |
\ | |
\|______________________|
アホ 懐古厨がレス流したいがためにコピペ作戦に出たようです
何顔真っ青にしてマジレスしてんだw リアル亜穂かwwwww
アホ 懐古厨がレス流したいがためにコピペ作戦に出たようです
学生です。将来的にJavaとC++を学びたいと思っているのですが、
JavaとCのどちらから学習すればいいのですか?
JavaScriptで組んだことはありますが、本格的な言語は初めてです。
>>588 JavaとC++を学びたいというのに、JavaとCのどちらからだ?馬鹿?
JavaScriptが本格的じゃないだ?無能?
>>588 どっちでも良い。
悩んでる時間が無駄だから、とりあえずどっちかやれ。
591 :
デフォルトの名無しさん:2005/03/31(木) 00:24:29
Eclipse 3.0.2 には JDK の 1.4 系と 1.5 系 のどちらを
使うべきでしょうか?
>>588 Javaをやれ。Javaで出来ないことがしたくなったらC++をやれ。
593 :
デフォルトの名無しさん:2005/03/31(木) 00:30:05
Javaと同じ事ができないからJavaScriptは本格的な言語じゃありません
なんて言い出すのかな
>>591 業務などでバージョンの違いが気になる人を除けば1.5でいいよ。1.5の方が速い。
ただし、1.5で追加された言語仕様
(拡張forループ、オートボクシング/アンボクシングなど)は
エディタとコンパイラが対応していないため使えないので注意。
Eclipseは自前のコンパイラ使ってるからね。
JavaScriptが本格的でないという奴はprototypeやclosureは使っての発言だろうな
JavaScriptはソース丸見え
だからいやだ
Javaもソースに戻せるよな
>>596 そこでSun純正のNetBeansですよ
質問です
File型のfileインスタンスって文字列で扱われると知りました
これで凄い違和感があるんですけどjavaの仕様ですか?
File file=new File("c:\\temp\\hoge.txt");
String buf="test:"+file;
System.out.println(buf);
bufはtest:c:\temp\hoge.txt
>602
いや、それ、暗黙にfile.toString()が呼ばれてるだけだから。
604 :
602:2005/03/31(木) 02:40:19
>>603 そうなんですか
というよりそういう答えを期待してました、有難うございます
File型以外にもこういうケースがあるのでしょうか?
暗黙になされてた事が全く解らないのですが
どこかにそういう仕様書があるんでしょうか?
Javadoc見てもわからないです
>>604 Java言語仕様というものがあります。
>>588 時間に余裕があって末永くこの業界にいるつもりなら、手続き型の C で構造化、
モジュール化設計、構造体、ポインタ、関数ポインタなどを使いこなせるように
なってから Java をやったほうが良い。いきなり Java でも敷居が高いとはまったく
思わないが、(仮想マシンじゃなく) リアルコンピュータの基本構造も分からない奴は
すぐ頭打ちになる。
>>604 + による文字列対オブジェクトの連結は、言語仕様でそのオブジェクトの toString()
との連結とみなされます。
>>604,606
System.out.println() の中でもtoString()は呼ばれるしね。
hoge(Object obj) でどう実装されてるかによるんじゃ? > toString()
>>608 実装されてなくても、java.lang.Object で toString() が定義されてるから、それが呼ばれる。
あ、いや、引数としてObjectをとるメソッドが実装されてる場合の挙動ね
println の場合だと Object.toString() が呼ばれるようになってますけど
それ以外の場合は知らんよって話
元の質問に戻すと
・String との + 連結は、コンパイラによって toString() 連結に解釈される
・hoge(String src) のようなメソッドで hoge(Object obj) も用意されてる場合
hoge(Object obj) で toString() が呼ばれる実装がされている(パターンが多い)
>>610 そもそもSystem.out.println(Object)以外のメソッドの話は誰もしていない。
int price = 1000;
int tax = 50;
System.out.println(price + tax + "円");
System.out.println("¥" + price + tax);
1050円
¥100050
>>610 >hoge(Object obj) でどう実装されてるかによるんじゃ? > toString()
>hoge(Object obj) で toString() が呼ばれる実装がされている(パターンが多い)
オマエの言う、hogeってメソッドは何のことを指しているんだ??
なぜtoStringが呼ばれる実装が多いのかさっぱり分からん。
hoge(Object obj) → 「Objectを引数とするメソッド」 ???
>>611 質問者のレスをよく読んでなかった
println() 以外にもそういうのはあるのか?と解釈してた
>>613 文字列操作関連のメソッド
StringBuffer.append()等
参考書見てたら「有形サブクラス」って言葉が出てきたんだけど
この「有形」ってなんだろ?
>>615 「抽象ではない」という意味じゃないすかね。
でも有形って使われてるの聞いたことないな。
有形 ⇔ 無形
抽象 ⇔ 具体
ちなみに特に DB 周りで「マスター ⇔ サブ」って使ってる人大杉
スーパー ⇔ サブ
マスター ⇔ スレーブ
自分も「有形」ってのは聞いたことがないが、
concrete ⇔ abstract
でconcreteを辞書でひくと「有形の」ってのがあるのでまあアリなのかな。
マスター ⇔ メイドさん
ということで一つ。
訳者が█鹿か
質問です
DOMを使ってXMLの書き出しをやってるんだけど、
要素の属性をsetAttributeした順番に書き出したいんだよね。
ところが、XMLSerializer使ってもTransformer使っても
属性がアルファベット順にソートされて出てきちゃう orz
属性を登録した順番に書き出す方法があれば教えてクダサイ
ちなみにこんな感じで書き出しています
//DOMSerializerの場合:
OutputFormat format = new OutputFormat( doc, ENCODING_CHAR_SET, true ) ;
DOMSerializer serial = new XMLSerializer( writer, format ).asDOMSerializer() ;
serial.serialize( doc ) ;
out.flush() ;
out.close() ;
//Transformerの場合:
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
DOMSource source = new DOMSource(doc);
FileOutputStream os = new FileOutputStream(file);
StreamResult result = new StreamResult(os);
transformer.transform(source, result);
属性の順序って意味あるのか?
XML では属性の出現順序は意味が無い。
ただその意味と関連付くと読みやすい出現順序ってのはあるな。
>>621 それらの手段で属性の順番を保持してシリアライズすることは不可能。
XMLで属性の順番に意味を持たせてはいけないし、DOMは属性の順番の情報は保持していない。
625 :
621:2005/03/31(木) 14:46:25
>>623 そうなんです。
テキストエディタで開いた時に読みやすくなる、ということで。
>>624 この他の手段で属性の順番を保持できる方法はないものでしょうか。
ただ、1.4.2と1.5で同じソースが使える…という縛りがあって。
org.apacheをimportしなきゃいけない方法は使えません orz
オマエ式シリアライザ作る
>>625 DOMを使わないでXML生成する, or
自分で順序保持するようなDOM準拠クラスを作る
628 :
621:2005/03/31(木) 15:15:10
>>626-627 オレ式シリアライザーを作るしか無さそうですね。。
回答してくれた方サンクスでした。がんがってみるよ。
シリアライザだけ作っても無駄ですよ。
DOMに入った時点で順序が失なわれているんだから。
630 :
629:2005/03/31(木) 15:19:55
あ、「このタグのときはこの順序で属性を書く」ってシリアライザを作
ればいいのね。すまん。
ActionEventクラスのgetModifiers()メソッドを使って
修飾子のSHIFTが使われているか調べたいのですが、どうしたら良いのでしょうか。
if(ae.getModifiers()==ActionEvent.SHIFT_MASK)
↑ActionEvent
とりあえず↑みたいにやってみたのですが、ダメでした。
SHIFT 以外に別のメタキーも押せるのでビットフラグになっている。
if((ae.getModifiers() & ActionEvent.SHIFT_MASK) != 0)
>>632 あ、意味わかりました!ありがとうございます。
C++で暗号化した文字列を、Javaで復号化するような仕組みを作りたいのですが、
可能でしょうか?
暗号化方式は問いません。
具体的な例など提示していただけると助かります。。
いろいろ試してはみたのですが、BlowFishやAESでは渡した文字列を
復号化することが出来ませんでした・・。
636 :
632:2005/03/31(木) 15:40:49
すいません、意味は分かったのですが
実際にShiftを押しながらButtonをクリックしたのですが
modifiersの値が64でshiftのフラグが立っていないようなのですが。
原因わかりますか?
>>635 アルゴリズムが同じなら問題なくできると思うのだが…
文字エンコードが違うとかじゃないよな?
640 :
632:2005/03/31(木) 15:57:46
>>639 しばらく試してみて
ちょうど今、何か間違いが無いか調べて間違いは無いようだったので
もう一度試したら何故か動きました。何か調子が悪いようです。
今はMouseEvent、InputEventのどちらでもちゃんと動いています
ありがとうございます。
>>635 アルゴリズムが同じ(モードやパディングも)なら問題なくできます。
642 :
デフォルトの名無しさん:2005/03/31(木) 17:04:31
Componentクラスのインスタンスを生成すると
Paint(Graphics g)が呼ばれるのは仕様?
>>642 APIに書いてない以上、仕様とは言えないと思う
644 :
デフォルトの名無しさん:2005/03/31(木) 17:58:50
>>643 そうでっか〜。
でも勝手に呼ばれるからいつも謎。
そういう実装になってる、ってだけじゃないかな
はじめまして。早速ですが質問させてください。
現在勉強をかねてJavaで簡単なゲームを作成しています。
操作はキーボードを使って行なうようにしていたのですが、
可能ならジョイパッドを利用したいと考えています。
しかし色々調べたのですがなかなかジョイパッドに関する資料が
見つかりませんでした。ここでするような質問なのかと悩んだのですが、
もしジョイパッドを利用する方法をご存知でしたら是非ご教授ください。
よろしくお願いします。
>>646 ジョイパッドの利用方法については
製品に付属のマニュアルをご覧下さい
>>646 Javaのみでは対応できない
JNI を使うか、JoyToKeyのようなユーティリティで誤魔化すしか
JNI を使ったライブラリを配布しているところもあるので探してみるといい
649 :
デフォルトの名無しさん:2005/03/31(木) 20:55:38
質問です。
WebLogicなりTomcatなりを立ち上げる際にクラスローダにjarファイルを置くと、
そのjarファイル内のメソッドを呼んだりすることが出来ますが、
例えば.javaのファイルを作ってjarファイル内のメソッドを呼ぶ記述をしても、
コンパイルが通らずに呼び出すことが出来ないようです。
コマンドラインから直接叩くような.java(.class)ファイルからjarファイルにしたファイル内のメソッドを呼ぶ方法はないのでしょうか?
650 :
デフォルトの名無しさん:2005/03/31(木) 20:59:43
BufferedReaderでreadLineで一文だけじゃなくて全ての中身を取り出すにはどうしたらいいのでしょうか?
永久ループ
終端までループ
>>650-652 BufferedReader の readLine は文字通り1行を読むのだから、readLine が null を返すまで繰りかえし
読むことが必要。
>>649 多分こういうことがやりたいんだろう、と勝手に想像すると、
ClassLoader loader = ClassLoader.getSystemClassLoader();
Class clazz = loader.loadClass("HogeImpl");
Hoge hoge = (Hoge) clazz.newInstance();
これで実行時に HogeImpl クラスのインスタンスが1個、手に入る。
コンパイル時には、HogeImpl のソースコードは必要ない。
必要な三つの条件。
a-1) HogeImpl.class を置いてあるフォルダ
a-2) HogeImpl.class を含んでいる jar ファイル
のどちらかが、実行時のクラスパスに指定されていること。
b-1) HogeImpl はクラス Hoge のサブクラスである。
b-2) HogeImpl はインタフェース Hoge を実装している。
のどちらかが満たされていること。
c) HogeImpl は引数を取らない public なコンストラクタを持っていること。
HogeImpl 自体をコンパイルするときには、Hoge.class が必要。
TCPのクライアント用コードと
サーバ用コードをLAN上の別々の
マシンで実行してみたのですが、
サーバに接続できず、
java.security.AccessControlException: access denied(java.net.SocketPermission 000.000.000.000: 000 connect,resolve)
となってしまいます。
ググってみると
Permission関係のことなのかなと
思ったんですが、いまいちよくわかりません。
securityの設定を甘くしないと駄目ってことでしょうか??
permissionをいじると、それは今後コンパイルするすべてのコードで同じpermissionの設定が反映されてしまうのでしょうか??
IPアドレスが設定されてない。
Socketをnewするときの引数に直接相手PCのIPを渡しているんですが
それがまずかったですか?
OSがXP SP2か何かでファイアウォールが有効になってるんじゃね?
>>656 OSとか、ポート番号とか、イロイロ関係してくるので、周辺環境の情報
をぜんぶ書くべし。
OSはXPでサービスパックはSP1です。
ポートは5555使いました。
アプレットです。
ノートンつけてます。
共有フォルダにはお互いアクセスできるLAN内の二台つかってます。
XPのファイアウォールも関係ありですか?
javaのPermission設定とかって関係ないんですか
まずすべてのファイアウォール関連のアクセス制御を外す。ぜんぶ素通り状態にする。
もし自分でSecurityManagerを設定しているなら、当然Permissionが絡んでくるが、
読んでると「Permissionってなんですか?」という状態のようなので、SecurityManagerは
設定してないんだろう。
で、全部素通り状態でもう一度テストして、つながるかどうか確認しる。
こういう状態にしてやりました
PC1:XPSP1。ノートンはウィルスチェックのみ。
PC2:XPSP2。ウィンドウズファイアウォールをOFF。
どちらからでもpingはちゃんと届きます。
しかしやっぱり駄目ですた・・・
ルーターもきになるけど
ルーターの設定はLANの外に対してしか関係ないっすよね?
そもそもアプレットは、どこにでも繋ぎにいけるわけじゃないよね?
その辺は大丈夫なのかな。
ポート5555でサーバが待ち受けている、そのサーバから
アプレットがDLされて来てるんだよね?
665 :
デフォルトの名無しさん:皇紀2665/04/01(金) 11:13:02
AWTのScrollbarのコンストラクタやメソッドには、サイズを指定するようなものが無いのですが
ということは、やっぱりサイズ変更する方法が無いということでしょうか??
>>664 えええ・・・
アプレットってどこにでもつなぎにいけないの??
どういうこと??
>>666 アプレットが通信できるのは、自分が存在していたサーバーと
そのサーバーからDLされたアプレット間だけじゃないの??
そうじゃないと、好き勝手できるし。
つまり片方のPCにサーバもクライアントも置いて簡易HTTPDを立てて
サーバプログラムを実行し、
もう片方のPCはHTML経由でクライアントを実行すりゃいいってことですかな
669 :
デフォルトの名無しさん:皇紀2665/04/01(金) 16:22:15
画面の解像度を取得したいのですが、そのようなクラスはありますか?
ご存知の方がいらっしゃったら教えてください。お願いします。
>>669 使ったことないし、使えるかどうか知らんけど
API見てたらこんなん見つけた
つ ToolKit#getScreenResolution
>>669 解像度って DPIの方?
それとも、1024x768 とかの方?
672 :
デフォルトの名無しさん:皇紀2665/04/01(金) 16:45:50
>>670 サンクス。でも試してみたけど使えませんでした。
ToolKitにgetScreenSize()ってのがあったけど、これもダメぽ。
673 :
デフォルトの名無しさん:皇紀2665/04/01(金) 16:54:46
>>671 1024x768とかの方です。
DPIという用語ですが、今調べて初めて知りました。
674 :
669:皇紀2665/04/01(金) 17:03:43
調べてたらコンポーネントクラスにgetToolkit()というメソッドがあって
それで取得したToolkitオブジェクトを使ったら
取得できました!助けてくれた人サンクス
getScreenSizeが実装されないってことは考えにくいんだけど環境かいてもらわんと
>>673 マルチディスプレイに対応したいなら、
GraphicsDevice[] devices = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices();
for(int i = 0 ; i < devices.length ; i++){
System.out.println(devices[i].getDefaultConfiguration().getBounds());
}
こんな感じ。
皇紀2665年になってる。今頃気付いたよ。
>>664 おいおい、アプレットなのかよ。元の発言には書いてないようだが。
アプレットなら、自分がロードされたサーバ以外とは一切接続できない。
どうしても接続したいなら、SecurityManagerで接続できるように設定しないと
いけないので、デフォルトならエラーになるだろうね。
ちなみにアプレットが自分がロードされたサーバ以外には接続できないのは、
セキュリティの問題。アプレットがブラウザにロードされて、勝手にどっかのサーバに
接続して、なんか分けの分からないものをダウンロードされたらたまらんからな。
>>678 自分がロードされたサーバに接続するってことは、
つまりクライアントもサーバもサーバPC上にアップしておいて、
他のPCはブラウザでクライアントにアクセスしなきゃならないってこと
かと思ったのでAN HTTPDを使って実験してみました。
お互い表示はされるんですが、通信はおこなわれませんでした・・・。
同じPC上でブラウザ二枚立てて実験する分には平気で動くのになあ
クライアントコードもサーバコードもサーバにアップしてある状態で
クライアントコードに別PCのブラウザからアクセスする場合、
そのクライアントコードがサーバにアクセスするためのアドレスって、
localhost?それとも鯖の生IP?
あとjavaVMのバージョンが違っても不都合はおこらないですよね??
682 :
588:int 2ch =05/04/01(金) 22:10:01
>>588,590,592
亀レスすいません。ありがとうございました。
今度は、帰ってきたウンマンコが教えます
>>681 ひょっっっっっとして、サーバサイドJavaとJavaアプレットとの区別が
付いていないんじゃないか???
685 :
デフォルトの名無しさん:int 2ch =05/04/01(金) 22:42:53
変数名の先頭に数字は使えますか?w
686 :
ウンマンコ:int 2ch =05/04/01(金) 22:56:44
いや、そんなおかしくないと思うけど
>>684 サーバサイドjavaってようはCGIみたいな奴じゃないの?
同じサーバ上にあればアプレット同士って通信できるんですよね?
>>681 > そのクライアントコードがサーバにアクセスするためのアドレスって、
> localhost?それとも鯖の生IP?
鯖の生IPでもいいけど、それをコードの中に書いておいた場合、
鯖のIPが変化した時にアプレットのコードを書き直さなきゃならないよね。
なので、
アプレットの中で、こんなことを書いておく。
例えば init() の中で。
URL codeBase = getCodeBase();
String hostName = codeBase.getHost();
これで、自分がどこからダウンロードされてきたのかがわかる。
689 :
ウンマンコ:int 2ch =05/04/01(金) 23:53:47
しかし生IPでもつながらなかったってことは
やっぱ他のところが問題なんでしょ??
いつまでint 2chなんだよw
手作業のぬくもりを感じますね<int 2ch
693 :
デフォルトの名無しさん:int 2ch =05/04/02(土) 03:45:13
Java Beanの命名で良く見かけるSuffixにV1とかV2つけるのって
バージョン互換の為なんでしょうか?
public class PersonV1
みたいなやつです。
どこかで定義されている手法なのでしょうか?
うーん。AN HTTPDを使って立てた鯖上で、
他のPCをつかわずにサーバ自身のブラウザを二枚たててクライアントとサーバを起動
してみたんだけど
そのときクライアントのsocketに渡すアドレスがlocalhostの場合
ちゃんと動いてるんだけど、自分の生IPでアクセスする場合は表示はされても
通信がうまくうごいてくれてないみたい。なぜだろう
>>693 そんなの見かけないよ
ダメな名前付けの例だなそりゃ
>>693 俺も2年ほどこの業界にいるけどそんなの見たことないな
クラス名のSuffixって言ったらValueObject略のVOならみたことあるが
実はValue(Object)1、Value(Object)2って意味だったりしてな
曖昧化ツールを通った後だったりしてw
つーか同じPC上でブラウザ二枚でテストしてる場合ですら
生IPも.getHost()で得たアドレスでも駄目で、localhostのときだけ
動くみたいなんだけど。これってAN HTTPDの問題なのかな?と思ってしまう
他人の所為にする前にまず自分を疑えや
生IPってのはグローバルIPアドレスを指してるのか?
192.168.x.xや127.0.0.1はどうなのよ。
ルータが糞なんだろう?
>>700 localhostと127.0.0.1ではうまくいきます。
192.168.〜だと駄目っぽいです。
アプレット以外のTCPプログラムでは192.168.〜で普通に送受信成功
してたので、ルーターが糞なのかどうかも微妙な気がするんですが・・・
>>701 ・localhost(127.0.0.1)と、192.168.〜はまったく別のIP
・localhostからアプレットをロードしたら、そのアプレットのCodeBaseはlocalhost。
・アプレットはCodebaseとしか通信できない。
この三つを100回繰り返し声に出して読んでみろ。
>>702 192.168.〜でブラウジングするときにsocketのアドレスも192.168〜にしておけば
ちゃんとオフラインで送受信に成功しました。
で、これでLAN内の他のPCからもアクセスできるのかと思ったのですが
やっぱり他のPCからだと通信できないようでした。XPのファイアウォールも
きったんですが・・・
もしかしてそれって
サーバの設定で
ホスト名がlocalhostになってるだけちゃうのか?
Apacheでいうところの
ServerName 192.168.11.100:82
>>704 192.168.〜でアクセスした場合クライアントとサーバを通信させることは
できないんですが表示はされています。htmlとか接続が成立するまえのアプレット等々はね
hostsにはlocalhost=127.0.0.1と書いてあるだろう
そもそもping通ってんの?
質問です
ioパッケージのいくつかのクラスでclose()メソッドがありますよね
BufferedReader,BufferedWriter,FileInputStream,FileOutputStreamなどです
closeメソッドがストリームを閉じる事は解るんですが
実行しなくてもエラーも出なけりゃ例外にも引っかかりません
close処理を実行しない時に起こる具体的な問題を幾つか教えてください
>707
宿題か? ならスレ違いだ。
いずれにせよ、まずは「BufferedWriter」の「Buffered」が何をどこにバッファしてるのか、考えて見れ。
>707
想像だけど、クローズしないと次にオープンできないとか?
688の人が書いてた
URL codeBase = getCodeBase();
String hostName = codeBase.getHost();
というコードを使ってSocket socket = new Socket("hostName", 5555);
とやった場合も、ローカルでもLANでも表示だけで通信されませんです。
>>706 pingは通るし、アプレット以外のEchoサーバ&クライアントのコードなんかは
普通に動作します。
>String hostName = codeBase.getHost();
>Socket socket = new Socket("hostName", 5555);
ちょっとだけウケタ.
そろそろウザイかな。
そりゃ「"hostName"」というホストがどっかに登録されてないと接続できんだろうなあ。
>>712 そうだね。
そろそろ全ソースをバシッと晒してもわらないと、どうしようもないかも。
ダブルクオーテーションつけたままですた・・・
716 :
初心者:2005/04/03(日) 10:21:32
MS-DOSプロンプトとコマンドプロンプトって一緒?
>>716 若干違うような、同じといえば同じのような。
718 :
初心者:2005/04/03(日) 10:36:05
そんな答えでいいのかよ
大体、どこがJavaの質問・相談なんだ
>>719 本人が満足してるっぽいので、良いのでは?
721 :
デフォルトの名無しさん:2005/04/03(日) 11:32:54
java.io.IOException: Corrupt GZIP trailer
↑何これ?
不正なGZIPトレーラっていうエラーが出たんだけど、
jar圧縮したGZIP形式のファイルはどう読み込めばよいのかね?
722 :
707:2005/04/03(日) 11:34:50
>>708 最後の一行でそう捉えられたのかもしれませんが、全然宿題じゃないです
参考書見ても最後にストリームを開いた状態なのでクローズ処理を行なうしか書いてないので
普通に疑問を持って質問しました、一行ずつ理解しないと引っ掛かるたちなんです
>「BufferedWriter」の「Buffered」が何をどこにバッファしてるのか
Javadocやググッて調べてみたけどどれもストリームの基本的な用法や効率の問題とかしか書いてないです
で、自分の考えですけど溜め込んだ文字列をメモリ上かと・・・ただ資源の無駄使いという事でしょうか?
でも、フラッシュすれば消えるんじゃないのかなと思ってます
例えば、いろんなストリームを開きまくって使う時などもあまり問題ないように思えます
(System.out,System.inなども本当はclose処理を持ってるけど閉じる必要ないですよね)
そりゃ、
>>709さんのように同ファイル、また、ソケットプログラミングで同じポートを指定する時は
クローズ処理にも気を使う必要があるかとは思います
ただ単にストリーム使ったら最後に閉じろ閉じろ言われても納得できないというかなんというか・・・
だから質問させていただきした
>>709 >想像だけど、クローズしないと次にオープンできないとか?
同じファイルに書き込む時(FileInputStream,FileOutputStream)などはそう思います
>>721 gzip を jar で圧縮して意味あるのか?
724 :
デフォルトの名無しさん:2005/04/03(日) 11:36:48
>>723 gzipファイルとclassファイルをまとめてjarで配布する仕様なり。
>>722 フッター書き出す OutputStream とかだと
flush() でなく絶対に close() で閉じないと、
フォーマット違うよって怒られるようなデータ作るよ。
実際にディスク操作するようなファイルシステム書いてみれば
close()しろと言われる意味がわかるかも……
>>724 とりあえず、GZipInputStreamとかでなく、
普通にInputStreamでデータ取ってきてhexdumpしてみれば?
後はgzipのフォーマット調べて照合。
728 :
デフォルトの名無しさん:2005/04/03(日) 11:53:17
レスありがとうです。
>>726 調べてみます!
>>727 最後の1バイトまで正しく読み込んでいるか調べてみます!
そういう細かいことはあまり気にしていないが
ファイル系でclose()しないとどうなるのか昔実験したことあった
もちろんclose()しないとおかしくなる
でも、ByteArrayOutputStreamやStringWriterはclose()メソッド呼んでも「なにもおこらない」と書かれている
API/クラスの設計で親クラスのclose()メソッドが形式上継承されているだけ
730 :
初心者:2005/04/03(日) 13:09:49
C:\JAVA>javac Sample1.javaでエンター押したら
’javac’は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されません。
ってでました。どうゆうことですか?
俺専用 コピペ倉庫より↓
「スタート」「設定」「コントロールパネル」「システム」「詳細」「環境変数」
「PATH」の項目に「;C\Javaインストールフォルダ\bin」って書く
チェルノブイリ いや もしくは
C:\JAVA>C\Javaインストールフォルダ\bin\javac Sample1.javaでエンター押す
>>730 'javac' が内部コマンドまたは外部コマンド、操作可能なプログラム
またはバッチファイルとして認識されなかっただけ。
他に解釈のしようがあるとでも?
734 :
初心者:2005/04/03(日) 13:20:53
>>733 その言葉自体が意味わかりませんでした・・・
735 :
初心者:2005/04/03(日) 13:26:01
736 :
初心者:2005/04/03(日) 14:07:23
まだ解決しない・・センスない。もうちょいがんばってみます。
737 :
デフォルトの名無しさん:2005/04/03(日) 14:17:58
>>728 gzipファイルを残り5バイトのところで
読み込みに失敗していました。
例外も発生せず、気づきませんでした。
引数なしのreadメソッドを使って1バイトずつ読みこんだのですが
結果は同じでした。
仕方なく、データ最後の5バイトは直書きして無理やり動かしました。
署名付きのjarですがこれも関係あったのでしょうか?
>>722 閉じないとどういう不具合があるかは、Bufferしてる対象による。
例えばFileReaderをバッファリングしてるBufferedFileReaderを例にとれば、
もしclose()しなければ、OSでファイルを開いたときに確保される構造体なり
なんなりが解放されないままになってしまう(UNIXならファイル・ディスクリプタ)。
ネットワーク・ソケットでも当然OS側でなんらかのリソースを確保してるので、
それを解放する。
ちなみにclose()しないでも、別にエラーにならない。OSもJVMも、close()しわす
れたのか、まだ使うつもりでclose()してないのか分からないから。
まあ、close()は、未出力内容を吐き出すのはもちろんとして、OSレベルで
確保したリソースを解放するタイミングだと思っとけばいいんじゃないかな。
URLクラスのgetHost()はString型でホストネームを返すみたいだけど、
文字列ってことはドメインネームを返すんだよね??
HTTPDとかでドメインを持たないコンピュータで実行すると、
無効なアドレスが返ってくるのだろうか??もしそうなら、ドメインじゃなくて
IPを返すようなメソッドってないの?
そういう時はIP帰ってくる
API見れば解決できるな
aとbの内容を取り替えるc言語の関数
void swap(type* a, type*b)
、を、Javaで実現するにはどうすればいいですか?
muri
オリジナルオブジェクトでインスタンスを操作。
>>743 どうしてもそれやりたきゃ要素1の配列でもつかえ
747 :
初心者:2005/04/03(日) 15:44:21
class Sample1
{
public static void main(String[] args)
{
System.out.println("ようこそJavaへ!");
}
}
どうしてもエラーがひとつでてしまいます。どこか間違えてるところありますか?
ほんとレベル低くてすみません。
748 :
初心者:2005/04/03(日) 15:52:10
すいません、できました。
>>747スルーはスルーでお願いします。
>>742 めんどいから試してないけどさ、ソース見る限り、受け取り側のソケットが
localhostの5555ポートを監視してるじゃん。
そりゃlocalhost(127.0.0.1)でアクセスすりゃ、送信側のcodeBaseがlocalhostに
なるんだから、受け取り側がlocalhostで待っててもOKだろうさ。
でも生IPにすれば、送信側のcodeBaseは生IPになるんだから、そりゃ受け取り側が
どんだけlocalhostで待ってたって受け取れんわな。
Applet とかは関係ない模様。
こんな感じで作ったデータグラムソケットは、
DatagramSocket socket = new DatagramSocket(5555);
localhost 宛や、127.0.0.1 宛のパケットには反応するけど、192.168.0.x
のような IP-Address 宛のパケットには、その IP-Address が自分のもので
あっても反応しないってことらしい。
だから、自分の IP-Address が例えば 192.168.0.1 の場合、
DatagramSocket socket = new DatagramSocket(5555);
とするか、
byte[] b = new byte[] {(byte)192, (byte)168, 0, 1});
InetAddress addr = InetAddress.getByAddress(b);
DatagramSocket socket = new DatagramSocket(5555, addr);
とするかによって、待ち受けソケットがバインドされるアドレスが異なってくる。
前者なら "localhost" や "127.0.0.1" 宛の、後者なら "192.168.0.1" 宛のパケットを待つ。
データグラムソケットってうまれて初めて触ったんだけど、
そういうことで合ってるでしょうか。
752 :
デフォルトの名無しさん:2005/04/03(日) 17:15:53
>>737 すいません、自己解決しました。
GZIPInputStream同様、System.getResourceAsStream()から取得した
InputStream側でもreadメソッドで1バイトずつ
取得したらうまくいきました。
InetAddress.getByName("192.168.0.13");
と、しましょうや
>>751 だいたいそんな感じだと思う。
DatagramSocket(int port)
は、ローカルホストのソケットを作成するので、127.0.0.1のportを監視する。
別のインターフェースでソケットを作りたかったら
DatagramSocket(int port, InetAddress addr)
を使う必要があるよね。
なんでそんなに複雑なことになるんだ。
どのアドレスでアクセスしたってちゃんと動くような仕様にはなってねーのか
どのアドレスでアクセスしたってちゃんと動くってどんなんだよww
localhostと192.168〜は全然別のアドレス。故にそれぞれ別にLISTENするソケットが
必要ってだけの話だろ。何が複雑なんだ。
もしかしてIPアドレスじゃなくて、マシン単位で考えてないか?
だいたいソケット作っただけで、全インターフェースを勝手にアクセス可能にされたら
たまらんわ。
自分のPC内だけで実験するなら、おっしゃるような方法でうまくいくんだけど
サーバを鯖PCのブラウザで立ち上げ、クライアントをLANでつないだ別PC
で立ち上げる
という風にするとうまくいきません。これはどうすりゃうまくいくんですか
だからー
そのプログラムの書き方だとそういうことになるだけです
ポート開くときに自身のアドレス指定しなきゃいいじゃんか
>>758 192.168〜であるサーバ側のソケットを192.168〜で作り、クライアント側がgetHost()で得た
サーバのIPにパケットを投げる。
こういう書き方ならサーバは192.168〜で起動しなきゃならないにせよ
クライアントは別PCから起動してもいいはずじゃないんですか??
>>759 じゃあやっぱりサーバ側アプレットがLISTENしてるアドレスが、クライアントの
コードベースと同じになってないんじゃないの。
ちなみにサーバ側アプレットも自分自身のコードベースに対してしかソケットを
開けないぞ。
・クライアントもサーバも同じコードベースであること。
・それぞれ自分のコードベースに対してソケットを開くこと
・サーバ側アプレットは、コードベースとなるマシン上で起動すること。
そもそも、なんでサーバ側までアプレットでないといかんわけ?
>>759 その通りだと思う。
で、あなたは誰?
元々の質問して来た人?
どれが元の質問者の発言なのかが判断付かないので、
元の質問者がどこまでわかってて、どこからわかってないのか、
が、こっちにはわからんのが困るな。
これまでの議論で、大体問題点は明らかになったと思うんだけど、
それがわかってないのか、わかってて、プログラムも書き換えたのに
うまくいかないのか。
プログラムを書き換えて、それでもうまく行かなかった、ってことなら、
何をどう書き換えたのかを、再度明らかにしてもらわないと話にならんし。
763 :
762:2005/04/03(日) 19:49:14
ちなみにわたしが変な元の質問者です
>762
クライアント側ソース52行目のhostNameがどんな
アドレスなのか調べてみれ
192.168.2.100じゃないかもしれないんじゃ?
765 :
762:2005/04/03(日) 20:48:48
192.168.2.100でした
なんとなくわかって来た。
Applet の中で、192.168.2.100 で待つ Socket を作成できていないのかも。
全くおなじことを、Applet ではなく、単なる Java アプリとして書いてみたらうまく行った。
今、サーバ側で、
socket = new DatagramSocket(5555, InetAddress.getByName("192.168.0.12"));
をやったすぐ後で、
SocketAddress sa = socket.getLocalSocketAddress();
System.out.println(sa);
をやってみてるところ。Applet とそうでない場合で、なんか表示が違って来るみたい。
なんかわかりにくいことを言ってしまって済まん。
>>766 に書いてある、192.168.0.12 は、192.168.2.100 と読み変えてください。
# ええ、私が使ってる PC のアドレスです。
>>756 いや、違うだろ。
少なくともDatagramSocket(int port)に関しては、「すべてのローカルインターフェースの」
指定ポートに対して待機するソケットを作成する。だからサーバ側については
>>755の
言ってることが正しい。
ただどっちにしろアプレットはコードベースとしか通信できんのは変わらない。
つうかさ、あえて言わなかったけど
なんでservとclieが両方ともAppletなのかと思った
おそらくこの時点で、作ってる本人がシステム全体の意味を取り違えていると思う
だって、servが埋めてあるHTMLをブラウザで表示したって
そのブラウザ上でポート開くのは落とした元のサーバのIPアドレスとバインドしようとする(そのプログラムだと)
770 :
デフォルトの名無しさん:2005/04/03(日) 21:17:34
本にあるSwingのフレームを作る物を
手動コピペして実行した後
そのフレームをドラッグして振り回すと
画面がそのフレームの中の色になったり
実行したフレームが見えなくなったりするのですが
普通にするにはどうすればよいのですか?
>>770 ココに こっぴぺっとしないとわかんないけど
あらかた予想はつく
>>771 別のマシンにサーバをおいたら書き込んであるIPと食い違ってくるから
動かなくなるってことですよね??
だからアプレットで作るなよ、と。たしかに普通はそれは不味いと思います。
でも今回はservとclieを置いているPCのIPは紛れも無く192.168.x.xだし
サーバも192.168.x.xの5555を監視し
clieはファイルのDL元である192.168.x.xをhostNameに取得してるのも
確認済み。なのにサーバにはパケットが来てない。これって何故??
どういうこっちゃ
>>766 アプレットはもともとこういう使い方できない仕様だってことですか?
775 :
デフォルトの名無しさん:2005/04/03(日) 21:37:56
bulid.xmlに第1引数、第2引数を指定する場合はどうすれば良いですか?
>775
-Dオプションでプロパティとして扱った方が楽な希ガス
>>762 サーバ側プログラムの"192.168.2.100"を
クライアントのIPアドレスに書き換えてみたらダメ?
すいませんが
192.168.x.xって同じアドレスって考えていいのか?
省略しないで書いてもらいたい
それに766の話で、俺的にはなんとなくわかった気がする
つうか、一番最初にそれ思ったんだけど普通に通信できているんで
「まあ、いいか」とそのことが頭から離れていた
通信できないときJavaコンソールにどんなメッセージが出ている?UDPだから出ないか?
>>778 同じアドレス。
ついでに補足するとclieやservにアクセスするときブラウザに打ってるアドレス
もちゃんと全部統一してます
>>777 DatagramSocket(5555,InetAddress.getByName("192.168.2.100"));
の第二引数のアドレスって、
「そこに送られてくるパケットを監視する」って意味なんですか??
それとももしや「そこから送られてくるパケットを監視」するって意味??
4人だけかよ ちぃ
で、エラーメッセージでてるの?
783 :
デフォルトの名無しさん:2005/04/03(日) 22:26:13
>776どうやれば良いのですか?
>>780 「そこから送られてくるパケットを監視」であってると思われ
第二引数ナシだと、どのホストからのパケットも読むことになる
>>762 なんか気になってたところがあって、もしかして俺も勘違いしてたかなあと思って
プログラム作って試してみた。
やっぱり勘違いしてたみたいで、そこを直したらちゃんと動いたよ。
そこってのはつまり、アプレットはコードベースとしか通信できないってとこね。
まず、クライアントがパケットを送信できるのは、アプレットのコードベースだけ。
これはそのまんまだ。
しかしサーバ側アプレットの方なんだが、これを今までは「サーバがソケットを開ける
のはコードベースだけ」と思ってたのが勘違い。
正しくは、「サーバが受け取れるのは、コードベースから来たパケットだけ」という
ことでした。
なんで、
>>762のプログラムも、クライアントのアプレットをサーバ機に、サーバ用
アプレットをクライアント機においてやればいい。サーバ側プログラムでソケットを
作るときに、コードベースを指定しているのもやめていい。
「DatagramSocket( 5555)」 でいい。
クライアント→クライアント機からサーバ機に接続する→クライアントのコードベースはサーバ機になる。
サーバ→サーバ機からクライアント機に接続する→サーバのコードベースはクライアント機になる。
これでクライアントはサーバ機にパケットを送れるし、サーバはクライアントからくるパケットを
受け取れるってことだ。ちなみに、アプレットはコードベース以外から来たパケットは、警告なしに
ただ破棄する。
ただ、アプレットとしてサーバを書くって事自体、ちょっとイレギュラーだと思う。どうせサーバ機でしか
起動しないんだよねえ。ユーザにアプレットとしてロードしてもらう要件でもあるのだろうか?
そうでないなら、サーバ機で普通のJavaプログラムとして常駐させたほうがいいんじゃないかね?
>>772 import javax.swing.*;
class Figure extends JFrame{
public Figure(String name){
setTitle(name);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
publc class SwingSample{
pualic static void main(String[] args){
Figure figure = new Figure("jFrame);
figure.setLocation(300,200);
figure.setSize(300,200);
figure.show();
}
}
何の変哲もないと思います
>>782 DatagramSocketの第二引数をクライアントを起動する側のPCのアドレス
にして実行したんだけど、Javaコンソールに出たエラーは
java.net.BindException: Cannot assign requested address: Cannot bind
です。
>>785 いまからその方法やってみます
>>785 え、これってクライアントもサーバもサーバ機におくんじゃなくて
サーバ機にクライアント、クライアント機にサーバをおくって意味なんですか??
>>787 そのExceptionてどっちのプログラムのものか把握しているの?
ほんとにわかってるのか?
Host指定しなくていいっていうのも
だいぶ前に俺書いただろ
わかってんのか?
>>789 785氏とオレは別人。
785氏はわかったのかもしれないが俺は相変わらずわかってません
で、結局サーバもクライアントもサーバ機においておいて
クライアント機はブラウザだけでアクセスするような形では絶対無理ってことなのかどうか
誰か説明してくれえ
java.net.BindException
が出る理由は
>>769だろ
で、「Appletの配布元のサーバ」と「clieの動くクライアント」と「servの動くクライアント」は
別のマシンと考えてください
そうなると実際使うときにはセキュリティーも考慮する必要があるの そうなってんの
>783
> ant build.xml -Dhoge.piyo=aaa -D hoge.puni=bbb
で、build.xmlの中では${hoge.piyo}が「aaa」、${hoge.puni}が「bbb」になる
単純に
> ant build.xml aaa bbb
だと、aaaとbbbはターゲットになる
まぁ、ターゲットaaaとbbbにpropertyタスク仕込んでもいいとは思うが
>>791 それは無理だろう
servも誰かに落としてもらってどこかで動いてないと(じっこうしていないと)どこにつなげていいのやら・・・
だから、「両方ともなぜAppletなの?」という疑問が俺の中にはある
clieが実行中に接続先のアドレス指定できるように改良し尚且つ、Appletのセキュリティー外し
どこかでservを実行していれば可能だ
もう一回関係を整理してくれ これはCGIと通信するようなものとは別だ
オレの妄想だとこういうシナリオになってたんだよ。
配布元サーバの中にあるclieとserv。
配布元サーバがservを起動。
clieは別PCの利用者がブラウザでアクセスして起動。
コードベースは配布元サーバ。
servで配布元サーバが配布元サーバからのパケットを待つ
clieは配布元サーバへのアクセスしてパケットを発射。
同じサーバ内の別アプレットやサーバ自身にはアプレットも接続できるん
だろうからこれでもいいだろうと思っていた。
clieは配布元サーバじゃなくて別PCからアクセスしても効果は同じ
だと思っていた。
でもちゃうってことだよね??
まあ整理するとこうしたかったワケです。
配布元サーバ内にclieとserv在り。
配布元サーバ、ブラウザを使って自分から自分のservをDLし配布元サーバ自身からのパケット待つ。コードベースは配布元さば。
利用者の別PC、ブラウザを使って配布元サーバからclieをDLし配布元サーバへパケットを発射。コードベースは配布元さば
あのですね・・・
もしかして
別々のPCからアクセスされている同一サーバ内のアプレット同士って通信できないのですか。
それが一番の疑問。
CGI や TCP/IP(特にHTTP)に関しての基本が解っていないように見える。
Java云々以前の問題ではないか?
アプレット間通信は、同じページ内のアプレット同士に限られる。
もちろん理由はセキュリティ。アプレットA(クライアント)から
アプレットB(サーバ)にパケットを送れるとすると、Aは全然知らない
どっかのアプレットに情報が伝達されてしまうから。
何が何でもサーバ側もアプレットがいい、というのなら、サーバ機に
クライアントからのパケットを受信するための専用プログラムを常駐させ
て、そいつが自分自身に対してそのパケットを送信してやれば、
サーバアプレットから見ると、サーバ機からパケットが送出されたよう
に見えるから、セキュリティを回避してパケットを受け取れる。
ただそこまでするんやったら、その専用プログラムをそのままサーバ
プログラムにしろよ、と思うな。
ところで、
>>796が実現したいことって具体的に何なわけ? どうして
アプレット同士でクライアント・サーバを作ろうとしているのか分からないん
だけど、たとえばかくかくしかじかのゲームを作ろうとしている、とか
もうちょっと具体的に情報公開しないか?
801 :
800:2005/04/03(日) 23:56:29
こういうことじゃないね。。
すまぬ、流してくれ
>>799 どうしてもアプレットでなきゃならないってことでもないんだけど
勘違いしてアプレット同士通信できると思い込んだまま作った対戦用ゲームがあって、
ローカルの実験では通信できてるから別々のPCで起動してさっそく対戦
しようと思ったら、別々のPCからではうまくいかなかった。
アプレットで無理なら普通のアプリにするけど、もうアプレットで完成
しちゃってるからアプレットのまま対戦させる方法はないかと必死になってる
ってのが今の現状。
でもま
>>785で触れられているように両方ともサーバ機にすればアプレット同士でも
期待したような動作するってことなのかな?それは正しい?
>>797 アプレットはクライアントにダウンロードされてクライアントのメモリ上に展開される
だからクライアントにはアプレットを動かすためにJREが必要になる
サーバ上で動いているんならクライアントにはJREなんかなくたっていいはずだろ。
たとえばサーブレットはサーバ上で動いているためJREはサーバにのみあればよく
クライアントにはJRE入れなくてもサーバのプログラムは動く
ということもわからずにやってたのかよ・・・
>>797 同一のアプレットであろうが、別々のマシン上の別のブラウザ上でインスタンスが作られるんだから、
完全に別プロセスだからね。
別のものである以上、そこにはサンドボックスの最強のセキュリティが適用される。
806 :
デフォルトの名無しさん:2005/04/04(月) 00:17:48
>サンドボックスの最強のセキュリティが適用される。
何故か笑ってしまった
>>805 完全に別プロセスだからね。
そうだよね たぶんその辺も理解していないんだと思う
しかし、やろうとしていることは実現できる
ただ方法が違う
ふつうアプレットでやらねーだろ、ってのはもっともなんだけど、
でも、アプレットで、UDP を待つソケットをローカルに bind できる
なんて、発見だったな。
127.0.0.1 だとどうして可能なのか、そして、
192.168.2.100 だと、どうして不可能なのか、が、いまだに不明。
「どっちもできません」って事なら、すごいすっきりなんだけど。
127.0.0.1 だとどうして可能なのか、そして、
192.168.2.100 だと、どうして不可能なのか、が、いまだに不明。
それに関しては、おれ出来たって・・・(最初のプログラムに関してだが
>>808 俺の中ではすごいすっきりなんだけど....
127.0.0.1(localhost)の場合
クライアント→自分のマシンに接続する→クライアントのコードベースはlocalhostになる。
サーバ→自分のマシンに接続する→サーバのコードベースはlocalhostになる。
これでクライアントはlocalhostにパケットを送れるし、サーバはlocalhostからパケットを受け取れる。
ってだけなんだけど。ちなみに、上記の127.0.0.1のところを192.168〜に変えても、同じマシン上の
同一IPアドレスならちゃんと動くよ。上記2項目のlocalhostが192.168〜に変わるだけだから。
二つのアプレットが別のホストに分かれた時に、問題が発生するということ。
>>797をみてふと思ったのだが、
アプレットってのは、プログラムはサーバ上にあるけど、動くのはクライアントの
ブラウザ内だってことは理解OKということでいいのかね?
別々のPCからアクセスしたアプレットは、それぞれ別のブラウザ内で動いてる
んで、「同一サーバ内のアプレット同士」ではないんですよ。
サーバ内では一片のコードも動いてないわけだし。
大変よくわかりました
813 :
デフォルトの名無しさん:2005/04/04(月) 15:15:40
コレクション関連でいい参考書があれば教えてもらえないでしょうか?
正直なところ、最近出た
「Javaコレクションフレームワーク」 ISBN 4797327057
は、薄い内容を大量のサンプルコードで水増ししている感が否めないが、
docs/ja/guide/collections/index.html からたどれる分では不足、サンプ
ルがないと何も分からないという人は買ってもいいかもしれない。
815 :
デフォルトの名無しさん:2005/04/04(月) 15:36:25
javaって将来有望でつか?
ヒッキーから就職したいんだけど机でやれる仕事で
java技術が一番くいっぱぐれないって聞いたんだけど。
マジレスすると、いろんな意味で、ヒッキーならまずバイトした方がいい。
結城浩のJava言語プログラミングレッスン上下の内容を大体理解した程度の者ですが
特に作りたい物がある訳ではないのですが
GUIやアップレットなど画面上で動かせる物を作りたいと考えています
またJavaでどんな事が出来るかも知りたいです
何かオススメの書籍などはありませんか?
818 :
初心者:2005/04/04(月) 18:18:22
C:\JAVA>javac Sample6.java
Sample6.java:11:シンボルを解決できません。
シンボル:メソッド readline()
場所:java.io.BufferedReaderのクラス
String str=br.readline();
^
エラー一個
って出たんですけど、意味がわかりませんOTL だれか教えて〜
そのままだろ
readlineってのがなにかわからんといっておる
実際そんなメソッドはBufferedReaderにはない
820 :
初心者:2005/04/04(月) 18:38:33
何がだめかわかりました。
readline→readLineでした・・プログラムって繊細ですね・・
この一文字にまるまる2時間も・・・
>>819サンキューです。
return (char[]) byte[];
できない??
>>815 どこまで本気か分からないけど・・・・・・
昨年からハロワの斡旋もあってうちの会社と専門学校で組んでJAVA講習やってる。
採用実績もあるし、前が無い人にとっては最善にして最高の穴場だと思うよ。
興味があるなら職安にGo!
823 :
デフォルトの名無しさん:2005/04/05(火) 01:11:16
>>814 早速読んでみようと思います。ありがとうございました。
プログラミング覚えたいんだけど、最初なにすればいいかな〜?
なでしこ
>>824 実際にプログラムを組む以外にやることなんてないだろ。
なんでも良いから自分の頭で考えてコードを書け。
>>824 Swing&SynthでカスタムUI作って公開してくれ。頼む
828 :
デフォルトの名無しさん:2005/04/05(火) 09:31:50
javaアプレットってユーザPCにDLされて実行されますが、ソース盗まれないんですか?
配布されるのはソースではなく、コンパイル済みのバイナリなので直接エディタでは読めないが
アプレットに限らず、どんな製品でも逆コンパイルすればソースは盗める。
Servlet側でボタンの2度押しを回避する方法を知りませんか?
>>830 StrutsにTransactionTokenという、まさにそのための仕組みがあるから
調べてみれ
>>831 Action#saveToken(HttpServletRequest)などのことですよね。
Struts使ってないんですよ(泣
Struts使わないで出来る方法ってないのですか?
>>832 同じことを自分で実装すればいいじゃないか。
Strutsはソースコードが公開されているんだからパクればよろしい。
見ればわかるが、Strutsを使わないとできないようなことでもないし
その部分だけをいただくのはそんなに難しいことじゃない。
Runtime#execを使って
String command = "touch test.txt";
process = Runtime.getRuntime().exec(command);
のようにJavaでコマンド起動しようとしたら
java.io.IOException: Cannot allocate memory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:139)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Runtime.java:546)
at java.lang.Runtime.exec(Runtime.java:413)
at java.lang.Runtime.exec(Runtime.java:356)
って出てエラーになっちゃいます。
午前中までは動いてたのに何故・・・
Canvasを背面にしてボタン等をCanvas上にあるように配置したいのですがうまくいきません、検索をしても
Canvasとボタン等が重なって表示されている例がないのですができないのでしょうか?
できるのであればあれば教えてください、よろしくお願いします。
>>835 CanvasはContainerを継承していないので、
ボタン等の配置はできない。
>>837 ご回答ありがとうございます
見かけ上に重ねるだけでもいいのですがそれも無理ですか?
>>834 ご丁寧にどうも。
意味はさすがに分かるんですけど
どう対処したらいいかが分かりません。
単純にメモリ増やせってことなのかなぁ。
840 :
839:2005/04/05(火) 17:01:21
>>833 確かに自分で作れそうです。
と、思ってやってみたらできました。
やってみるものですね。
>>838 Canvasの代わりにPanelのpaint()をオーバーライドすればできる。
その際、必ず最後にPanelのpaint()を呼び出す。
public void paint(Graphics g) {
// ほげほげ
super.paint(g);
}
>>842 ありがとうございます、あとは自分で調べてなんとかしてみます。
844 :
デフォルトの名無しさん:2005/04/05(火) 20:20:59
Javaの文法的なことは一通り勉強しました。
次は実際にプログラムを組んでみたいと思います(プログラミングの練習で)。
初心者はどんなプログラムを作ってみればよいでしょうか?
>>844 awtかswing勉強しつつ画像ビュアとかどうよ。
GUIはステップアップに向いてると思う。モチベーションも保てるし。
appletより、aplicationのほうがお勧め。
846 :
デフォルトの名無しさん:2005/04/05(火) 22:42:30
宣言が for文の内にあるのと外にあるのとは、実効速度変わらず?
つまり、
Hoge hoge;
for(int i = 0; i < N; i++){
hoge = new Hoge();
}
と
for(int i = 0; i < N; i++){
Hoge hoge = new Hoge();
}
の速度の差は変わらない?
実質的にないに等しい。
しかし速度に関係なく、変数の「スコープ」で使い分けろ。
>>846 速度が変わるかどうか、速度がどれぐらい変わるかは実装による。
ま、
>>847 が言うとおり普通は無視できるぐらいの差だろうね。
849 :
846:2005/04/05(火) 23:45:58
850 :
デフォルトの名無しさん:2005/04/06(水) 06:04:42
>>846 Hoge hoge;
for(int i = 0; i < N; i++){
hoge = new Hoge();
}
と
for(int i = 0; i < N; i++){
Hoge hoge = new Hoge();
}
とでは、上の方がきれいだし普通使うが、場合によっては下の方が若干早くメモリーも
若干効率的に使われるということもある。一概に上の方が常に優れているとは言えない。
851 :
デフォルトの名無しさん:2005/04/06(水) 06:13:14
スコープは常に最小限に
>>850 forの中でしか使わないなら普通は下だな
上 メモリに優しい
下 わかりやすい
要件次第でしょ
for(int i = 0; i < getCount(); i++)
と
int cnt = getCount();
for(int i = 0; i < cnt; i++)
は下だよね?
スコープは常に最小限にって一概に言えない。
for ( int i = 0, cnt = getCount(); i < cnt; i++ ) {
これでどうよ
>854
下の方が「メモリに優しい」
オブジェクトの寿命を不必要に伸ばすのは良くない。
for ( int i = 0, cnt = getCount(); i < cnt; i++ ) {
これでどうよ
うお、二度書いてる。すまん
妄想、妄想。妄想ですって。何回言わせるんですか。妄想ですよ。妄想ですから
>>854 そもそも、その程度の微妙な差まで削るような
ギリギリの最適化をしたいなら最初からJavaを使わない方が良いのでは?
あと、その手の話題に固執しすぎると、
もっと高級な部分で最適化できねーのかyo! このウスラバカが!
って思われるから注意した方がいいよ。
そのソースなら微妙じゃない場合もあるだろ?
getCount()の実装次第。
862 :
デフォルトの名無しさん:2005/04/06(水) 14:34:09
>>856 >オブジェクトの寿命を不必要に伸ばすのは良くない。
実際には、
>>850 の上のケースは変数宣言を長持ちさせているのであって、
for ブロックで作られたオブジェクトそのものについては参照がその都度外されるのだから、
"オブジェクトの寿命を不必要に伸ばす"わけではないことに注意されたい。参照の外された
オブジェクトは、機会がくればgcの対象となって一掃される。
>>862 >>850 だと最後の new Hoge() で作られたインスタンスは
たぶんブロックかメソッドを抜けるまで強参照。
ループ抜けた直後に hoge = null; とかやってないし。
>hoge = null;
これやるやつは痛いけどな・・・
>>864 まぁ、ループ直後に hoge = null; をわざわざ入れるぐらいなら
for(int i = 0; i < N; i++){ Hoge hoge = new Hoge(); }
ってやるわな。普通なら。
null の代入全般について言ってるなら、痛いのは
>>864 かもね。
866 :
864:2005/04/06(水) 15:22:39
nullが意味ある代入ならいいが、
ループ後の意味の無いnullのことだけな
たまにこういうコード見て萎える
>>866 その程度で萎えちゃうと仕事にならなくない?
俺はもう慣れた。
868 :
864:2005/04/06(水) 16:16:23
>>867 君は大人だな
引数にObjectしかとらないあふぉなやつとか(昔Variant使いまくっていたらしい)
浮動小数点演算誤差をまったく知らないで消費税計算に1.05掛け算してるとか
もうきりが無いくらいのひどいの見続けてきて心がすさんでいたようだ
浮動小数点の話はもう10年ほどは見続けてきてかなり精神的にもダメージが
>>868 昔と比べ、BigDecimalがあるから多少は緩和されたのでは?
870 :
デフォルトの名無しさん:2005/04/06(水) 16:24:16
習慣として null に参照を変えるのは コードの読みやすさということもある。もうそれ以上そのオブジェクト
は使わないという。
goto 851
>>870 局所変数であれば、普通は null の代入をしたりはしない。
必要ならブロック使ってでも管理する。
インスタンス変数とかなら話は別だが。
>>871 ダウト。Javaスレなんだから continue 使え。
874 :
デフォルトの名無しさん:2005/04/06(水) 16:35:33
>>851 しかし、try-catch-finally ブロックを使っているときは、ブロックの外で変数を宣言していないと働かない
場合もある。try ブロックもきめ細かくするという原則があるので、兼ね合いが難しい。
>>874 for() の中でしか使わない変数を外で宣言する奴は明らかにズレてる。
いつから try の話に摩り替わったんだ?
876 :
デフォルトの名無しさん:2005/04/06(水) 16:43:24
>>851 に go to 文で誘導されたので、これは一般論だと思った。違ったらスマソ。
goto でなくて、 go to と書くのは、何言語出身者?
BASIC じゃなさそうだけど?
878 :
デフォルトの名無しさん:2005/04/06(水) 16:46:52
やっぱり goto文 は混乱のもとになるのか。
879 :
デフォルトの名無しさん:2005/04/06(水) 16:47:40
go to は英語だろう。
さっきから age てるのは同一人物?
どうも他人に責任転嫁するのが好きみたいだが。
882 :
デフォルトの名無しさん:2005/04/06(水) 16:49:46
責任はとる。
俺も障ってほしい
FortranはGOTOもGO TOもG O T Oも全部解釈してくれたと
じいちゃんが言ってた。
885 :
デフォルトの名無しさん:2005/04/06(水) 17:13:50
886 :
846:2005/04/06(水) 17:19:21
皆ありがと。結局下で書いた。
スコープを考えると,下の書き方(for の中で宣言する方)がスッキリするけど、
for 文回したら明らかに差がでる程なら上(forの外)で書こうかと思っていた。
もひとつ質問.
class Hoge{
Hoge tako; //初期化せず...(1)
}
class Test{
public static void main(String[] args){
Hoge hoge = new Hoge();
if(hoge.tako == null){ //null で初期化されてる!
System.out.println("ぬるぽ");
}
}
をやると「ぬるぽ」 が表示される.
「インスタンス生成時に tako = null; と(自動的に)初期化される」は合ってる?
(1)のところを final Hoge tako; (この場合も宣言のみ)にしてやると、
コンストラクタの中で初期化しないとだめっぽいのでそう思ってるのだけど。
実際どんな処理が行われているかってのは、デバッガ使えば分かるんかな?
(恥ずかしながら使ったこと無い。いつも println(...)。 ショボ)
>>885 ・日本語が変
・手がかりになる情報を一切だしていない
・Javaの質問じゃない
一応、鯖が落ちているわけじゃないみたいだからブラウザの設定
じゃないの?
PHPの
function (hoge = 0) {
みたいな書き方はどうすればJAVAではコンパイルエラーでした。下のように二つ書くしかないのですか?
method () {}
method (hoge) {}
891 :
890:2005/04/06(水) 17:32:23
翻訳が分りにくいので補足
>個々のクラス変数,インスタンス変数又は配列構成要素は,それを生成するときに デフォルト値(default value) に初期化する (15.9,15.10)。
ピアソンの訳書では下のように訳されている。
>クラス変数,インスタンス変数、配列構成要素は,生成時にそれぞれのデフォルト値(default value)へと初期化される。
892 :
デフォルトの名無しさん:2005/04/06(水) 17:37:38
>>886 完全な答えではないが、
if(hoge.tako == null){ //null で初期化されてる!
System.out.println("ぬるぽ");
}
は、
System.out.println(String.valueOf(hoge.tako));
の一行で置き換えることが出来る。
>>889 2つ書くしかない。大した手間じゃないし。
void method(){ method(0); }
void method(int hoge){ /*処理*/ }
とか。
894 :
886:2005/04/06(水) 17:41:06
895 :
デフォルトの名無しさん:2005/04/06(水) 17:50:03
日本語が変ですか、 ごめんなさい
javaのプログラムを作るのにSDKが良いと
http://msugai.fc2web.com/java/ で教わったのですが、JDKでも何の支障も無いのであれば
こっちをダウンロードします
>>888はアップデート用なんですけど、これを入れるのがいいですか?
私は今までjava作成ソフトは入れたことがありません。
情報も入れるのを忘れていました
Windows2000 PU ブラウザ設定は問題ないと思います
アンチウイルスの活動を停止状態
これでいいでしょうか?
>>895 SDKもJDKも同じ。
1.4の新しいバージョンが5.0。迷わず5.0を使え。
がんばれ。
>>895 Update 2 って書いてんのは version 2くらいの意味。
JDK1.4 と JDK5 (1.5) とは大分変わってるので、
新しいほうがいいと思う。
898 :
デフォルトの名無しさん:2005/04/06(水) 18:08:03
>>896 >>897 親切に教えていただき
ありがとうございます
これからjavaをがんばってみます
899 :
886:2005/04/06(水) 18:18:12
>>890 を読んでみた
まとめ
ロード : バイナリの用意
リンク : バイナリをつなぎ合わせて実行可能な形へ
検証
準備
クラス、インターフェースの初期化 : static フィールド(クラス変数)の初期化はここで
インスタンスの初期化 : インスタンス変数の初期化はここで。デフォルト値へ初期化される.
その後,コンストラクタ内に書いてある通りに(再)初期化.
class Hoge{
Hoge tako;
Hoge(Hoge i_hoge){
// this の他のコンストラクタがあれば呼ばれる。
// super のコンストラクタが呼ばれる。
//インスタンス変数のデフォルト値への初期化
//コンストラクタ内での(再)初期化
tako = i_hoge;
}
}
JavaでXML文書を読み込んで、オブジェクトを生成し、
それをMapとかに入れたいのですが、参考になるサイトとか
ありますか?
●スキーマ例
<person>
<name>John, Smith</name>
<age>30</age>
<address>
<zip-code>123-456</zip-code>
<city>Tokyo</city>
</address>
</person>
●上のスキーマをオブジェクト化
class Person{
String name;
String age;
Address address;
:
: 〜setter/getter〜
}
●それをHashMapなんかのコレクションに入れる
XMLBeansなどのサイトを見てるのですが、いまひとつ。。。
単純にオブジェクトをXMLにしたいのならCommons Betwixtが楽
オブジェクトとXMLとのリンクならJXPATHとかあのへんが細かく出来るな
>>900 903に同意でBetwixtがお勧め。
何かサンプルでも出そうかと思ったんだけど、Googleってみたら山ほど
ヒットしたんで、そっちを参照してみ。
それにしても、暫く見ないうちに情報増えたな>JakartaCommons関連
前は攻略JakartaCommonsだけが頼りだったのに、ありがたい限りだ。
906 :
デフォルトの名無しさん:2005/04/07(木) 01:29:46
>>854 メモリにやさしいとか分かりやすいでスコープを決めるな。
907 :
デフォルトの名無しさん:2005/04/07(木) 01:33:28
>>889 ふつうC++を例にするだろ…なぜにPHP
>>906 分かりやすいでスコープを決めればいいと思うんだけど
>>908 age るような人にマジレスしないように。
910 :
デフォルトの名無しさん:2005/04/07(木) 01:50:14
>>910 金さん銀さんのスコープについて教えてください
912 :
900:2005/04/07(木) 09:10:04
913 :
デフォルトの名無しさん:2005/04/07(木) 11:21:42
横軸がサイズで、S,M,L,LL・・・
縦軸が商品名で、A,B,C,D・・・
といった価格表がEXCELで作成されています。
ワークシートの下にプルダウンが横一列に並んでいて、1つ目でサイズ、2つ目で商品名、
3つ目で数量を選択すると合計額が表示されます。
中身はセルの値を単純に代入しているだけなんですが、これをWeb上で作成したいと
思っています。配列を使うんでしょうか?また、サンプルはどこかにありませんか?
>913
スレタイ10回読みなおせ。
915 :
デフォルトの名無しさん:2005/04/07(木) 11:39:01
間違えました。失礼。
916 :
デフォルトの名無しさん:2005/04/07(木) 13:40:37
すいません、新人です。
JAVA swingでインプリメントができないんですが、仕様ですか?
↓
public class sample extends JApplet //implements ChangeListener
(コメントにするとJAVAC通過)
エラーメッセージをコピペする程度の労力を惜しまないで欲しい
インターフェースで宣言されているメソッドの実装ができてないと推測
918 :
デフォルトの名無しさん:2005/04/07(木) 13:47:31
>>917 すいません。
sample.java:11: シンボルを解決できません。
シンボル: クラス ChangeListener
場所 : sample の クラス
public class sample extends JApplet implements ChangeListener
^
エラー 1 個
919 :
デフォルトの名無しさん:2005/04/07(木) 13:48:35
public class sample extends JApplet implements ChangeListener
ずれてます。^はここです。 ^
920 :
デフォルトの名無しさん:2005/04/07(木) 13:49:21
また ずれてます
ChangeListener
^
です。
importしてないだけじゃねえの?
923 :
920:2005/04/07(木) 14:17:54
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
重複がいけないのでしょうか?
924 :
ソース01:2005/04/07(木) 14:29:47
//import java.awt.*;
//import javax.swing.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class sample extends JApplet //implements ChangeListener
{
JSlider Rslider;
JSlider Gslider;
JSlider Bslider;
int red = 255;
int green = 255;
int blue = 255;
925 :
ソース02:2005/04/07(木) 14:31:03
public void init() {
/*JSlider slider = new JSlider();
slider.setPaintLabels(true);
slider.setPaintTicks(true);
slider.setMajorTickSpacing(10);
slider.setMinorTickSpacing(5);
getContentPane().add(slider , BorderLayout.NORTH);*/
Rslider = new JSlider(JSlider.HORIZONTAL, 0, 255, 255);
Gslider = new JSlider(JSlider.HORIZONTAL, 0, 255, 255);
Bslider = new JSlider(JSlider.HORIZONTAL, 0, 255, 255);
Rslider.setPaintTicks(true);
Gslider.setPaintTicks(true);
Bslider.setPaintTicks(true);
926 :
ソース03:2005/04/07(木) 14:31:25
Rslider.setMajorTickSpacing(16);
Gslider.setMajorTickSpacing(16);
Bslider.setMajorTickSpacing(16);
Rslider.setMinorTickSpacing(4);
Gslider.setMinorTickSpacing(4);
Bslider.setMinorTickSpacing(4);
//Rslider.addChangeListener(this);
//Gslider.addChangeListener(this);
//Bslider.addChangeListener(this);
getContentPane().setLayout(new FlowLayout());
getContentPane().add(Rslider);
getContentPane().add(Gslider);
getContentPane().add(Bslider);
}
927 :
ソース04:2005/04/07(木) 14:31:44
/*public void paint(Graphics g)
{
//Color clr = new Color(red, green, blue);
//g.setColor(clr);
//g.fillRect(150, 300, 100, 50);
}*/
928 :
ソース05:2005/04/07(木) 14:32:55
/*public void stateChanged(ChangeEvent ce)
{
if(ce.getSource() == Rslider)
{
red = Rslider.getValue();
repaint();
}
if(ce.getSource() == Gslider)
{
green = Gslider.getValue();
repaint();
}
if(ce.getSource() == Bslider)
{
blue = Bslider.getValue();
repaint();
}
}*/
}
>>923 Javaのバージョンが古いとか?
java -versionで結果を教えて
930 :
デフォルトの名無しさん:2005/04/07(木) 14:36:50
よろしくお願いします
>>923 やってみた。
> C:\test>javac sample.java
> sample.java:11: sample は abstract でなく、javax.swing.event.ChangeListener 内の
> abstract メソッド stateChanged(javax.swing.event.ChangeEvent) をオーバーライド
> しません。
> public class sample extends JApplet implements ChangeListener
> ^
> エラー 1 個
だって。
>>931 stateChangedもコメントにされてるぞ
>>932 いや、
>>918 が言うように
> sample.java:11: シンボルを解決できません。
が出ない事が分ったので、それでOK。
コメント全部外せば普通にコンパイル通るからなぁ
import javax.swing.event.ChangeListener; 入れるのは意味無いだろうし…
後はバージョンくらいしか思いつかないや
API からそれだけが無い状態なんてのはありえるのか?
>>934 1.2 から javax.swing.event.ChangeListener あるし。
J2ME? って事はないよなぁ……
>>930 とりあえずOSとJavaのバージョンだけでも教えてくれ
狂ったトロイにピンポイントで消されたとか。
938 :
デフォルトの名無しさん:2005/04/07(木) 15:40:40
>>936 Windows2000ProSp4 JDK1.2.4-08です
939 :
デフォルトの名無しさん:2005/04/07(木) 15:47:16
まちがえた
java version "1.4.2_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_08-b03)
Java HotSpot(TM) Client VM (build 1.4.2_08-b03, mixed mode)
940 :
デフォルトの名無しさん:2005/04/07(木) 15:51:01
コンパイル通ってもスライダが表示されないのです。
問題が変わってるがな
先の質問「コンパイルできない」は解決したんだな?
942 :
デフォルトの名無しさん:2005/04/07(木) 16:16:45
はい、できました。
>>934さんのようにコメントはずしましてやりました。
943 :
デフォルトの名無しさん:2005/04/07(木) 16:24:16
すいません。
sunのSDKとDOS窓だったんで遅れてしまいました。
944 :
デフォルトの名無しさん:2005/04/07(木) 16:51:36
新質問
先のプログラムでスライダが実行時に表示できません。マウスでクリックすると出ます。
よろしくお願いします。
>>944 paintメソッド内で↓を呼び出す
super.paint(g);
もしくはpaintメソッドをオーバーライドしない
946 :
デフォルトの名無しさん:2005/04/07(木) 16:57:53
新たな問題
値の取得もできません。
947 :
デフォルトの名無しさん:2005/04/07(木) 16:59:38
948 :
デフォルトの名無しさん:2005/04/07(木) 17:04:15
ちょっとちらつきますけど、値の取得と描画できました。
みなさん、ありがとうございます。
949 :
デフォルトの名無しさん:2005/04/07(木) 17:06:09
ところで
>>954さんの言うオーバーライドしないってのが気になるのですが、どうやるのですか?
950 :
デフォルトの名無しさん:2005/04/07(木) 17:22:33
新たな問題
上記ソースのコメントをはずし、super.paint();を追加すると、下部に四角く色が出ますが、スライダを止めると、
色も出なくなります。
何でもかんでもここで聞けばいいってわけじゃないぞ?
アプレットを一度も触ったことないので勉強ついでに 950 を再現してみた
描画順番がおかしくなってないかい?
多分 super.paint() ではアプレット全体の再描画が行われてるっぽい
色箱の描画 → super.paint() だと、折角書いた物を上書きすることになる
というかこの状態、ちょっとどころのちらつきじゃ無いぞ
現象みて何が起こってるのか考えながら進めてみようよ
953 :
デフォルトの名無しさん:2005/04/07(木) 17:44:44
すんませーん。
954 :
デフォルトの名無しさん:2005/04/07(木) 17:45:24
955 :
デフォルトの名無しさん:2005/04/07(木) 17:46:07
956 :
デフォルトの名無しさん:2005/04/07(木) 17:48:18
>>952 できました。
super.paint(g);をpaint(略)の一番上につけたらできました。
ありがとうございます。
957 :
デフォルトの名無しさん:2005/04/07(木) 17:50:39
若干のちらつきは残りますねえ。
これからの課題にします。
958 :
デフォルトの名無しさん:2005/04/07(木) 18:02:28
あの、あるオブジェクトを普通に読み書きしてる時に、特に排他処理を行う事なく
そのオブジェクトをwriteObjectとかでファイルとかに書き込みした場合、書き込まれた
データは不正な状態になったりするんでしょうか?。書き込みした時点に近い範囲でのスナップショットであれば
正常なデータが書き込まれている限り、自分としては別に問題はないのですが。
どなたか教えて下さい。orz
>>958 そのオブジェクトが他で使用されてるか、とかによる。
960 :
958:2005/04/07(木) 18:21:24
>>959 といいますと?。他スレッドでとかいう事でしょうか?
ちょっとスレ違いかもしれませんが・・・質問させてください。
LinuxでJAVAの勉強をしようとしているのですが、
作ったswingコンポーネントの文字が文字化けしてしまってうまく表示されません・・・
文字化けしないようにするには、どうすればいいでしょうか?
>>961 javac -encoding xxx Foo.java でソースの文字コードを指定、とか?
>>962 レスありがとうございます。
最初Windowsで作ってたソースなんですが、
Linuxに移した時に、nkfでeucに変換しました。
eucじゃダメなんでしょうか・・・?
>>964 フォントが設定されていないとは・・・
メニューバーのアイテムにsetFontで・・・って事ですか?
setFontはしてないですね・・・
それが原因でしょうか?
ちょっとソース書き換えてみます。ありがとうございました
>>965 そうじゃなくて、font.properties.ja とか、その辺。
1.5からやり方かわったんだっけ?
WindowsだとMSゴシックとか消さない限り標準で入ってるけど、
Linuxだとディス鳥によってフォントが入ってなかったり、
フォントが置いてあるディレクトリが違ったりするので、その設定ね。
Swingは自前でフォント描画するのでOSとかX86での設定とは無関係に、
フォント設定してやらんといかんのよ。
DOMで読み込んだXMLのテキストで 〜 や − が含まれると ? に変換されてしまいます。
何をすればこのような文字化けを回避できるのでしょうか?
ただし、Eclipse上で実行すると平気です。コンソールから実行すると上記のようになってしまいます。
どなたか教えて頂けたら幸いです。
MS932とShift_JISの違いでしょう
>>967
>>966 あ・・・そういう根本の設定ですか・・・
うーん、フォントは入ってるのは確かですが、
場所が違うんで文字化けしてるんでしょうね・・・
どうやって設定するんだろう・・・_| ̄|○
調べてみます、ありがとうございました
>>968 どのような手段をとれば良いのでしょうか?
やった!
やっと文字化けせずに日本語が表示できるようになりました!
>>966さん、すごい参考になりました。
1.5からやり方が違いましたが、font.properties.jaからいろいろ辿りました・・・
こんな所で躓くとは・・・
Javaの勉強どころじゃなかった、今日は寝よう_| ̄|○