トップページ⇒tech
1001コメント273KB

★★Java質問・相談スレッド165★★

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/20(日) 19:30:39.35
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0283デフォルトの名無しさん2013/11/03(日) 22:57:39.58
馬鹿には無理
0284デフォルトの名無しさん2013/11/03(日) 22:58:29.04
JVM上で動くJava言語ライクな言語を作ったらライセンス違反ですか?
0285デフォルトの名無しさん2013/11/03(日) 23:10:07.47
このご時世、何かしら特許で言いがかりを付けることは可能だろうね
ただ現実としてScalaみたいなのが問題になっていない以上、
あなたの言語がそれを超えることはあり得ないのでまず問題ないといえる
0286デフォルトの名無しさん2013/11/03(日) 23:20:32.59
じゃあ逆にJDKでのコンパイル物が実行できる俺俺JVMを作るのは
0287デフォルトの名無しさん2013/11/04(月) 00:45:08.93
>>286
それはアウト
GoogleとOracleは実際それで絶賛喧嘩中
0288デフォルトの名無しさん2013/11/04(月) 00:49:00.54
x86のエミュレータはOKだのにJVMのエミュレータはアウトなのか
0289デフォルトの名無しさん2013/11/04(月) 01:09:06.18
OpenJDKからフォークしたことにすればおk
GPLになっちゃうからドブに捨てるようなもんだけどな
0290デフォルトの名無しさん2013/11/04(月) 01:23:09.57
Integer Java Virtual Machine のエミュレータ試作 - 日本大学
www.tani.cs.chs.nihon-u.ac.jp/g-2004/karaika/ijvm.pdf

教育用JVMエミュレータの設計と試作
www.gsim.aoyama.ac.jp/~ida/jvm-emu

4L-3 教育用 JVM エミュレータの設計と試作
ci.nii.ac.jp/naid/110002894678

教育用なら大丈夫なんじゃね
0291デフォルトの名無しさん2013/11/04(月) 01:27:24.81
IKVM.NETとかKaffeもOracleに特許料を払ってたりするのか?
0292デフォルトの名無しさん2013/11/04(月) 01:43:52.99
取るに足らないからだよ
商業的に邪魔になるようなら攻撃される可能性はある
0293デフォルトの名無しさん2013/11/04(月) 02:01:40.94
IKVMなんて広く使われるようになったら訴訟確実だろうな
Javaの主戦時で衝突するわけで、Androidよりヤバイよあれ
0294デフォルトの名無しさん2013/11/04(月) 02:19:16.20
日本語版が欲しいところ

Oracle v. Google - Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Oracle_v._Google
0295デフォルトの名無しさん2013/11/04(月) 02:23:08.66
Oracle対GoogleのAndroid/Java訴訟で「Java APIは著作権保護対象ではない」との判断 | SourceForge.JP Magazine
http://sourceforge.jp/magazine/12/06/03/2329238
0296デフォルトの名無しさん2013/11/04(月) 03:28:46.88
ところでオラクルvsグーグルのジャバ裁判はどっちが勝ったんですか?
0297デフォルトの名無しさん2013/11/04(月) 06:55:44.11
決着ついてたら>>294のwikiにも書かれてるはず
0298デフォルトの名無しさん2013/11/04(月) 08:28:55.08
Google vs Oracle裁判は裁判の経過というより「そもそも何が争点になってるのか」がわかりにくい
・VMがパクリ
・APIの名前がパクリ
・APIの中身がパクリ

こういう争点だと認識してる
0299デフォルトの名無しさん2013/11/04(月) 09:06:02.06
よかったねつれて
0300デフォルトの名無しさん2013/11/04(月) 14:31:43.07
テンプレ見たんですが
なんで文字列の比較に==を使っちゃいけないのですか?
理由が書いてないのですが教えてください
0301デフォルトの名無しさん2013/11/04(月) 14:37:18.44
http://docs.oracle.com/javase/jp/7/

ifとかswitchとか言語構造がのってるページを見て勉強したいのですが
このページにあるのでしょうか?
0302デフォルトの名無しさん2013/11/04(月) 15:17:41.89
>>301
こっち
ttp://docs.oracle.com/cd/E26537_01/tutorial/java/index.html
0303デフォルトの名無しさん2013/11/04(月) 15:25:18.79
int[][] ary = {
{1,2},
{3,4},
};

上のコードは問題なくコンパイルできるんですが
下のコードはエラーになります

int[][] ary = new int[2][2];
ary[0] = {1, 2};
ary[1] = {3, 4};

二次元配列のときはこういう書き方はできないのでしょうか?
0304デフォルトの名無しさん2013/11/04(月) 15:36:42.85
できない
0305デフォルトの名無しさん2013/11/04(月) 15:37:03.97
そうでしたか、わかりました
0306デフォルトの名無しさん2013/11/04(月) 15:41:00.36
ary[0] = new int[]{1, 2};
ary[1] = new int[]{3, 4};

だとコンパイル通るよ
0307デフォルトの名無しさん2013/11/04(月) 15:57:32.47
おお、ありがとうございます
0308デフォルトの名無しさん2013/11/04(月) 17:26:24.46
class Test{
private String test = "test1";
main{
hensuutest("test2");
}

test(String test){
System.out.println(test);
System.out.println(Test.test);
}
}

クラス内の変数とメソッド内の変数名が一緒の時に、
それぞれ区別して参照するためには何を変数の前につければいいのですか?
0309デフォルトの名無しさん2013/11/04(月) 17:28:05.64
this
0310デフォルトの名無しさん2013/11/04(月) 17:34:26.72
ありがとうございます。

メッソトにstaticをつけろと言われまして、
つけたらthisはstaticだと使えねーよと怒られてしまったのですが。。。

static void Test(String test){
System.out.println(test);
System.out.println(this.test);

}
0311デフォルトの名無しさん2013/11/04(月) 17:36:29.90
あ、メソットが変数名と被ってるのは書き込み用だから
気にしないでください。
0312デフォルトの名無しさん2013/11/04(月) 17:38:03.96
自己解決しました
0313デフォルトの名無しさん2013/11/04(月) 17:39:14.34
してないですw
0314デフォルトの名無しさん2013/11/04(月) 17:39:18.20
>>310
静的メソッドからインスタンス変数を参照することはできないんで
testを参照したいならtestにもstaticつけなきゃいけないよ。
もしくはオブジェクトを作ればいい。
test(String test){
 Test o = new Test();
 System.out.println(o.test);
}
0315デフォルトの名無しさん2013/11/04(月) 17:44:13.30
なるほど。ありがとうございます。
なぜ、情的メソッドからインスタンス変数を参照できないのか、
ちょっと整理がついていないですが、
クラスを利用したいと思います。
0316デフォルトの名無しさん2013/11/04(月) 17:59:32.19
公式で無料のチュートリアルがあるんだからそれやって覚えなさいよ

The Java? Tutorials
http://docs.oracle.com/javase/tutorial/
0317デフォルトの名無しさん2013/11/04(月) 18:12:38.28
>>315
静的メソッドね。インスタンスメソッドを呼ぶときはオブジェクトを作って
呼ぶでしょう。オブジェクトを作ったときにインスタンス変数のメモリも
確保されるからインスタンスメソッドからはインスタンス変数を参照することができる。
けれども静的メソッドを呼ぶときはインスタンスを作成する必要がないんで
インスタンス変数のメモリが確保されてない。だからインスタンス変数を参照できない。
0318デフォルトの名無しさん2013/11/04(月) 18:14:57.43
>>312
ワロタ
0319デフォルトの名無しさん2013/11/04(月) 18:41:02.02
EJB3の単体テスト。EJBContainer.createEJBContainer()で参照したEJBに
InjectしているManagedBeanが解決されずにNullになる。
何か設定が不足している?仕様?
0320デフォルトの名無しさん2013/11/04(月) 19:59:27.14
Eclipseでプロジェクトを循環参照したら、怒られちゃった
javaってプロジェクトの循環参照できないのかよ!!!
c#に負けてんじゃん
0321デフォルトの名無しさん2013/11/04(月) 20:08:15.77
よかったねー
0322デフォルトの名無しさん2013/11/04(月) 20:10:14.82
>>317
なるほど!

カップラーメンにお湯入れてねーのに、スープ飲めるかよってことですね。
0323デフォルトの名無しさん2013/11/04(月) 20:58:20.83
自分はmainメソッドから他のメソッドを呼ぼうとしたらstaticつけないと呼べないよと
Eclipseに怒られたのでstaticを付け、そのメソッドから他のメソッドを呼ぼうとしたら
また怒られたのでstaticをつけ・・・

気がつけばそこにはstaticメソッドしかいない。

そんな恐怖物語を学生実験の現場で何度か見てきた。
0324デフォルトの名無しさん2013/11/04(月) 21:20:25.02
これはstatic感染症と命名しなければなりませんね。
0325デフォルトの名無しさん2013/11/04(月) 21:27:58.91
性的感染症
0326デフォルトの名無しさん2013/11/04(月) 21:53:20.80
staticスパイラル
0327デフォルトの名無しさん2013/11/04(月) 22:15:46.67
よくストリームをcloseするコードとして
Reader reader = new FileReader("a.txt");
try {
    doSomething(reader);
} finally {
    reader.close();
}
というコード(�@)と、
Reader reader = null;
try {
   &nbspreader = new FileReader("a.txt");
    doSomething(reader);
} finally {
   &nbspif (reader != null) {
   &nbsp    reader.close();
   &nbsp}
}
というコード(�A)を見るのですが、どちらが正しいのでしょうか?
個人的に�@で十分だと思うのですが、�Aじゃないとreaderのcloseが漏れることがあるのでしょうか?
0328デフォルトの名無しさん2013/11/04(月) 22:16:15.89
nbspとかいう文字が羅列するコードなんて見たことねえよ
0329デフォルトの名無しさん2013/11/04(月) 22:22:41.98
>>327
遅れるとかそういう問題じゃなくて、new FileReaderのところでファイルが無いと例外が発生するから。
0330デフォルトの名無しさん2013/11/04(月) 22:23:12.69
>>328
にわかか?この間までは で空白が出力されてたんだけどな
0331デフォルトの名無しさん2013/11/04(月) 22:25:05.01
>>330
お前はプログラム修正で文字化けが発生するようになったことを客に指摘されて
同じことを客に抜かすのか?
03323292013/11/04(月) 22:25:17.57
凄い勘違いをしていた無かったことにしておくんなまし。
0333デフォルトの名無しさん2013/11/04(月) 22:25:34.52
>>329
すいません、大外にはFileNotFouneExceptionを捕まえるtry〜catchがあると思ってください。
ただ単純に、�@、�Aのどちらでも、close漏れは防げるのか、防げないのかということが知りたいです。
0334デフォルトの名無しさん2013/11/04(月) 22:25:36.59
すみません、Javaでandroidアプリを作っているのですが、
TableLayoutで作った表の幅と高さを調整したいのですが、どうしたらいいでしょうか?

TableLayoutでテキストとボタンを配置したのですが、実機で起動したところ
表示したものが、1/9の大きさで左上隅に表示されました。
これだと、小さすぎるので幅を大きくしたいのですが、
調べたところ、xmlファイルのはあるのですが、Activityファイルでは見つかりませんでした。
どこを調べたらいいのでしょうか?
0335デフォルトの名無しさん2013/11/04(月) 22:26:59.26
>>331
何の話してんだバーカ
2chの仕様をいってんだよ
0336デフォルトの名無しさん2013/11/04(月) 22:33:35.78
自己解決しました
0337デフォルトの名無しさん2013/11/04(月) 22:35:23.94
>>333
close漏れは(�@、�A)どちらでも防げるよ。
0338デフォルトの名無しさん2013/11/04(月) 22:38:16.68
�@ってtry {の部分が失敗することってないのかな?
0339デフォルトの名無しさん2013/11/04(月) 23:21:43.96
>>328,330,331,335
おまえら面白杉だろw
0340デフォルトの名無しさん2013/11/05(火) 00:01:05.31
>>327
検索したらそのものずばりの解説がヒットしたけど、検索した?
http://www.atmarkit.co.jp/ait/articles/1112/20/news131_3.html
0341デフォルトの名無しさん2013/11/05(火) 00:06:07.20
>>340
バカ乙
0342デフォルトの名無しさん2013/11/05(火) 00:08:53.65
close()メソッドも例外投げなかったっけ?try-catchでくくる必要あった希ガス
0343デフォルトの名無しさん2013/11/05(火) 00:10:20.03
>>342
関係ねえよ
0344デフォルトの名無しさん2013/11/05(火) 00:13:21.72
>>342
あるね。

try{
 FileReader reader=new FileReader("unko");
 try{
  ...
 }finally{
  reader.close();
 }
}catch(Exception e){...}//ヌルポとIOExceptionを補足
で良い感じもする。
0345デフォルトの名無しさん2013/11/05(火) 00:14:12.45
>>342
今回の話とは関係ない
0346デフォルトの名無しさん2013/11/05(火) 00:14:29.78
>>327
前者と後者の違いはclose()の漏れに注目してる違いのコードじゃないよ
new FileReader("a.txt")の失敗をキャッチしたいかしなくていいかの違いだよ
前者はa.txtが無かった場合どこで処理されるか知らんけど、後者はそこのcatchで処理されるからcloseメソッドの呼び出しに気を遣うためにnullチェックしてる
0347デフォルトの名無しさん2013/11/05(火) 00:17:49.52
だけど自分の場合過去のソースの99%は以下
FileReader reader=null;
try{
 reader=new FileReader("unko");
 ...
}catch(IOException e){
 ...
}finally{
 try{
 reader.close();
 }catch(Exception e){...}
}
0348デフォルトの名無しさん2013/11/05(火) 00:18:10.05
つまり
前者の�@はnew FileReader("a.txt")の失敗を想定しなくていいコード
後者の�Aはnew FileReader("a.txt")の失敗をそこで処理したいコード (ただ�Aにはcatch文が書かれてないけど、本来は処理する)
0349デフォルトの名無しさん2013/11/05(火) 00:20:25.24
>>348
>>333読めよバカ
0350デフォルトの名無しさん2013/11/05(火) 00:21:59.23
馬鹿には無理
0351デフォルトの名無しさん2013/11/05(火) 00:43:39.87
質問者名前欄にレス番号入れてくれないと見落とすだろんバカん
0352デフォルトの名無しさん2013/11/05(火) 00:46:59.65
質問者は根本問題として�@と�Aのコードの違いをcloseの漏れを防ぐために厳重にしてるかどうかの違いだと勘違いしてるからあんな質問したんだろJK
0353デフォルトの名無しさん2013/11/05(火) 01:03:39.20
自信がなかったのでFileReaderのソースコード見たけど�@でOK
0354デフォルトの名無しさん2013/11/05(火) 01:27:27.96
>>347
これはまずいと思うぞ。
コンストラクタが例外投げたらぬるぽじゃないか。
ぬるぽ地獄に陥りたいのか!!
0355デフォルトの名無しさん2013/11/05(火) 01:29:31.91
>>353
今の論点は>>338なんですよ。
0356デフォルトの名無しさん2013/11/05(火) 01:33:59.45
実際にはこんな感じになると思う。
void load(File f)throws IOException
 FileReader reader=new FileReader(f);
 try{
  ...
 }finally{
  reader.close();
 }
}
0357デフォルトの名無しさん2013/11/05(火) 01:35:35.37
スレ汚しすまんね。
void load(File f)throws IOException,NullPointerException
{...}
0358デフォルトの名無しさん2013/11/05(火) 01:36:21.44
もうだめだ地獄だ。357は間違っている。
0359デフォルトの名無しさん2013/11/05(火) 01:36:54.32
>>327と>>333が質問者のレスだから両方読んでから回答してね(>>337の回答でFAだけどね)
0360デフォルトの名無しさん2013/11/05(火) 01:37:29.35
tryの行で失敗するってことはないのん??
0361デフォルトの名無しさん2013/11/05(火) 01:38:00.13
構文であるtryが失敗ってどういうこと?
0362デフォルトの名無しさん2013/11/05(火) 01:39:05.45
�@のコードの

Reader reader = new FileReader("a.txt");
// ここに何か処理があったらreaderのclose()のフォローができない
try {

って話をしたいの?
0363デフォルトの名無しさん2013/11/05(火) 01:44:11.30
自分以外の誰か、あるいは自分がうっかりして、そこに失敗の危険性のあるコードを書き足したらヤバいな
0364デフォルトの名無しさん2013/11/05(火) 01:45:14.39
構文であるtryが失敗する心配をするならfinallyが失敗する可能性も検討しないと、finallyが呼び出されず異常終了したらcloseされないじゃん!って
0365デフォルトの名無しさん2013/11/05(火) 01:46:47.96
いや、try って多分例外が発生したときのためにスタックをどこまで巻き戻すかとかやってると思うんだけど
0366デフォルトの名無しさん2013/11/05(火) 01:51:06.65
構文であるtryが内部で何をやってようとJavaプログラマがそこを配慮する必要は全くないだろJK
0367デフォルトの名無しさん2013/11/05(火) 01:54:02.55
try自体の失敗にビビったら何のメソッドも呼び出せなくなるだろ、呼び出し先のtryでシステムエラー投げられたってどうしようもないぜ
0368デフォルトの名無しさん2013/11/05(火) 02:00:26.00
メモリのスタックサイズを気にするような環境でJavaを使うのか
0369デフォルトの名無しさん2013/11/05(火) 02:51:32.05
>>172
0370デフォルトの名無しさん2013/11/05(火) 03:42:42.31
test(cursor c1){
Cursor c2 = c1
c1.close
}

こんな感じのコードを書いたんですが、
c1をクローズするとc2まで閉じちゃうんです。代入ってコピーするんじゃなくて、メモリで持ってるインスタンスそのものにアクセスするエイリアスみたいなものなんでしょうか?
0371デフォルトの名無しさん2013/11/05(火) 03:47:11.09
ハードリンクみたいなもんだよ
0372デフォルトの名無しさん2013/11/05(火) 03:48:12.72
ハードリンク - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%BC%E3%83%89%E3%83%AA%E3%83%B3%E3%82%AF
0373デフォルトの名無しさん2013/11/05(火) 03:52:34.53
Object obj1 = new Object();
Object obj2 = obj1;
obj1 = null; //obj2はnullにならない

もしエイリアスなら、obj2はobj1と同じ物を指さないといけないからobj1をnullにしたならobj2もnullにならなければならない
0374デフォルトの名無しさん2013/11/05(火) 03:55:30.80
む、、、難しい。
0375デフォルトの名無しさん2013/11/05(火) 03:58:04.78
コピー姿態ならメソッドclone()が必要かも
0376デフォルトの名無しさん2013/11/05(火) 03:59:04.42
Human tom = new Human(); //新しい人間を1人作ってそいつにtomというニックネームをつけた
Human joe = tom; // tomとニックネームをつけた人間にjoeというニックネームもつけた
tom = null; //tomというニックネームを使うのをやめた

インスタンスの概念
0377デフォルトの名無しさん2013/11/05(火) 04:03:43.13
>>376
ジョーさんはその後もトムという通名を使ってるのですか?
0378デフォルトの名無しさん2013/11/05(火) 04:05:27.30
>>377
それは違うよ、本人がtomやjoeと名乗ってるわけじゃない、周りが勝手にtomやjoeと呼んでるだけなんだよ
0379デフォルトの名無しさん2013/11/05(火) 04:10:58.85
プロレスラー 武藤 = new プロレスラー()
プロレスラー ムタ = 武藤
ムタ = null ムタ止めた
武藤.dead 武藤(ムタ)は引退した

こ・・・こういうことか 理解した 
0380デフォルトの名無しさん2013/11/05(火) 04:16:45.78
Human tom = new Human("Jack"); //新しい人間(本名Jack)を1人作ってそいつにtomというニックネームで呼ぶことにする
Human joe = tom; // tomとニックネームをつけた人間(Jack)にjoeというニックネームでも呼ぶことにする
tom = null; //tomというニックネームで誰かを呼ぶことをやめる、tomというニックネームで呼ばれる人間はいなくなる (Jackはもうtomとは呼ばれない)
tom = new Human("Cindy"); //別の新しい人間(本名Cindy)を作ってそいつをtomと呼ぶことにする

Foo(tom); // Fooメソッドに tom と呼んでる人間(Cindy)を引数として渡す

void Foo(Human bob) { //引数で渡された人間を Fooのメソッド内では bobというニックネームで呼ぶことにする
}
0381デフォルトの名無しさん2013/11/05(火) 04:21:59.03
Human tom = new Human("Jack"); //新しい人間(本名Jack)を1人作ってそいつにtomというニックネームで呼ぶことにする
Human joe = tom; // tomとニックネームをつけた人間(Jack)をjoeというニックネームでも呼ぶことにする
tom = null; //tomというニックネームで誰かを呼ぶことをやめる、tomというニックネームで呼ばれる人間はいなくなる (Jackはもうtomとは呼ばれない)
tom = new Human("Cindy"); //別の新しい人間(本名Cindy)を作ってそいつをtomというニックネームで呼ぶことにする
Foo(tom); // Fooメソッドに tom と呼んでる人間(Cindy)を引数として渡す
tom.die(); // tomと呼ばれてる人間(Cindy)を死なす
joe = null; // joeというニックネームで誰かを呼ぶことをやめる、joeというニックネームで呼ばれる人間はいなくなる、また同時にJackをニックネームで呼ぶ者がいなくなったためJackは失踪する
joe.die(); // joeと呼ばれてる人間はいないので存在しない者を死なすことは出来ない

void Foo(Human bob) { //引数で渡された人間を Fooのメソッド内では bobというニックネームで呼ぶことにする
}
0382デフォルトの名無しさん2013/11/05(火) 04:28:49.67
荒らすな雑魚
■ このスレッドは過去ログ倉庫に格納されています