- 1 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 19:48:24 ]
- プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作板をご利用ください。pc10.2ch.net/hp/ 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/ これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、 wikiからのリンクをおたどりください。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド111【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1200151522/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。 質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */ また、当スレで質問をするかたは、回答をもらえたときに、 wikiの更新をして頂ければ、忝のう存じます。 次スレは>>980あたりで。
- 820 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:49:18 ]
- >>815
// メインクラス(Main.java) public class Main { public static void main(String[] args){ Sample.func(); } } // サブルーチンクラス(Sample.java) public class Sample { public static void func(){ // ↑staticでメソッドを宣言すれば<クラス名>.<メソッド名>でアクセスできる。 System.out.println("Hello, world!"); } }
- 821 名前:815 mailto:sage [2008/02/25(月) 23:49:35 ]
- 815です。
レスありがとうございます、816,817。 >クラスメソッド(816) クラスメソッドの概念を知りませんでした。ありがとうございます。 >オブジェクト指向の世界では必要だという前提なんだよ(817) その考えを理解できるように努力していきます。 指摘ありがとうございます。
- 822 名前:815 mailto:sage [2008/02/25(月) 23:51:52 ]
- >820
レスポンス記述している最中に更新されたようで、失礼しました。 816のおっしゃる、クラスメソッドの具体例ですね。 わかりやすい説明ありがとうございます。
- 823 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:51:53 ]
- >>815
>ほかのファイルの関数に移動したい >サブルーチンで処理をするような考え方で >メソッドを利用したいだけで インスタンス化したくないなら当然インスタンス化は不要だ。
- 824 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 23:58:44 ]
- >>815
他の方が指摘してらっしゃるように、 メソッドは、必ずしもオブジェクトに関連付ける必要はありません。 蛇足。Javaでは「他のファイルに記述する」という概念はありません。 あくまでも、クラスを分けるかどうか、です。 それゆえか、クラス内クラスである内部クラスが4種類あります。
- 825 名前:ちんこ ◆GbXlaaQNk. mailto:sage [2008/02/26(火) 00:30:07 ]
- JRubyやってみようと思う。
- 826 名前:815 mailto:sage [2008/02/26(火) 00:32:49 ]
- 815です。
821内の『>818』は『>820』の間違いですね。失礼しました。 >818 今コーディングして確認しました。 クラスメソッドを直接呼び出すか、 通常に、通常のメソッドをインスタンス化して呼び出すかですね。 >823 >インスタンス化したくないなら当然インスタンス化は不要だ。 いま確認とりたいと思いコーディングしてみたのですが、 ほかの方が示された用にstaticにするほかに方法あるのでしょうか。 staticなメソッドにするか、インスタンス化するか以外で試せませんでした。 staticにすることをおっしゃっているのでしょうか。(私の821,822のように時間差?) >824 内部クラス。理解できるよう精進します。Tipありがとうございます。 自分の質問に対して、 816の考え方、817の考え方、の二種類の意見を持つ方に分かれるように感じました。 オブジェクト化するべきとの考えと、ユーティリティメソッドでいいのではという考えと、です。 このどちらを選ぶかは、個人やGrの考え方次第ということなのでしょうか? それとも、オブジェクト指向的には後者の方が、望ましいが、面倒な手続きは好まれないので、前者が使われるということなのでしょうか。
- 827 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:42:12 ]
- >>826
おおざっぱには、 ・データが主体ならオブジェクトにする。 ・ロジックが主体ならクラスメソッドにする。 くらいで良いのではないかと思ってる。(無論例外は山ほどある)
- 828 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:50:08 ]
- こんばんわ。
eclipse使いはじめたのですが、eclipseに指摘されるエラーの意味がわからないので教えてください。 たとえば、まさに820のコードを、 eclipseでひとつのファイルに記述すると、 クラスSampleを別のファイルに書けといわれます。 Javaのルールなのでしょうか。 どういった原因なのか教えてください。 eclipse特有で指摘されるものなのでしょうか?
- 829 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:51:19 ]
- >>826
何を作っているのかによる。 なんらかの概念(伝票・取引みたいな業務概念や、ファイル・ウィンドウのようなシステム概念)の、 特定のひとつに対する操作であれば、インスタンスメソッドとすることが望ましい。 逆に、概念に属する全ての対象に対する操作や、そもそもその対象を作り出す操作などはクラスメソッドになる。 ただし、実際にはクラスという概念とは関連づかない操作もあり、 Javaの場合は全てのメソッドがクラスに定義されなければならないため、便宜的にクラスメソッドとする。
- 830 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:52:53 ]
- >>828
Javaのルール。 publicのクラスはファイル名=クラス名としなければならない。 なので、自動的にひとつのファイルにはpublicクラスは一つまでしか定義できない。
- 831 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 00:58:39 ]
- >>828
830 の通り、Javaの仕様です。 public を外すか、クラス内クラスにするか、 一応、一つのファイルに複数のクラスを記述する方法はあります。
- 832 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:03:07 ]
- 828です。
830氏、831氏、すばやい回答ありがとうございます。 勉強になりました。 publicがキーワードでしたか。
- 833 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:21:48 ]
- アクセス修飾子について説明もらえませんか。
アクセス修飾子には、public, protected, privateがあり、 アクセス制御の範囲としては、上記3つのほかに、修飾なしを含めた4つがあるようです。 で、最後の修飾なしなのですが、 実際に仕事でのプログラミングや、アプリケーションの作成で、使用されるのでしょうか。 範囲が修飾ありの3つと異なるのですが、何も記述しないというのが、どうにも好きになれないみたいな。 基本的に、何らかの修飾をしましょうということは無いですか?
- 834 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:31:30 ]
- >>833
たしかに気持ち悪いが、そう決まってる以上、そういうもんだと思うしかない。 使う場面はときどきあるよ。 トップレベルクラスは、publicにしたくなければ、他に選択肢もないし・・・
- 835 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:40:22 ]
- >>833
クラスは良くパッケージデフォルトにするなぁ。 パッケージをコンポーネントと見立てて、publicがインタフェースでパッケージデフォルトが実装の詳細。 メソッドやフィールドではあまり使ったことないや。
- 836 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 01:55:23 ]
- はじめて手に入れたIDEがeclipseで今までCとWinSDKをエディタで何とかしようと苦労してたのが嘘みたいに
GUIなアプリケーションがさくさく書けてJavaマンセーな状態なのですが、 そろそろ他の言語ってかC++で同等の事ができるようになりたいと思い始めてます。 そんなぼくにお勧めのC++用のIDEを教えてくれませんか? eclipseみたいにCtrl+spaceなどでガンガン補完できるようなやつで、 リファクタリングが強力なやつがよいです。 (若干スレ違い?)
- 837 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:09:29 ]
- >>836
全くスレ違い CDT
- 838 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 02:46:20 ]
- >>833
派生先からだけ見えて欲しい時は多数あるけど パッケージ内からだけ見えて欲しい時がないので デフォルトスコープを使う機会がない。 継承・実装の階層とパッケージ階層とは全く別個のものなのに 1系統の修飾子で片付けようとしたのに無理がある。 パッケージ階層は無視するか2系統用意して組み合わせ可能にしたら良かったのに。 C#(.NET?) だと名前空間は無視するかわりに、 アセンブリ境界に対して internal で制限するかどうかを選べる。
- 839 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 03:20:53 ]
- >>833
そこそこ可視性があるが、言語的に最後の砦であるパッケージの境界でカプセル化してセーフ というのがパッケージプライベートなので、とりあえず書いてみる的に使うのは、ちょうどよいのかと。 そして、とりあえず書いてみるレベルだったら、 何も修飾子を書かなくてもええじゃないか、のような乗りかと。 なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。
- 840 名前:833 mailto:sage [2008/02/26(火) 03:45:25 ]
- 833です。
返信にただいた内容を元に、学習します。 >839 >なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。 この点について、初心者向けの説明をいただけませんか。 時間かけると理解が進む資料の場所もみつかるのでしょうが。
- 841 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 07:01:30 ]
- >>819
a = new String[]{"B"};
- 842 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 08:12:42 ]
- >言語的に最後の砦であるパッケージの境界でカプセル化
JDK7になったらスーパーパッケージが出来るんだけどねぇ。 JDK7は本当に完成するんだろうか。
- 843 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 10:47:38 ]
- >>841
ありがとうございます。それにしました。
- 844 名前:デフォルトの名無しさん [2008/02/26(火) 17:19:58 ]
- 出力を行うときに何でoutputstreamwriterを使わなければいけないのですか?
テキストでこの章に入るまではこれを使わなくても出力できていたわけ ですから。
- 845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 17:22:42 ]
- 好きなものを使えばいいんじゃない?
- 846 名前:デフォルトの名無しさん [2008/02/26(火) 17:25:51 ]
- ストリームの意味が分からん
- 847 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:24:48 ]
- >>846
ベルトコンベアみたいなものを思い浮かべろ そこに物(データ)を置くと、それはどこかに流れていく それが出力ストリームのイメージ (streamは流れという意味) どこに流れていくかは、それがどんなストリームかによる 例えば FileOutputStream だったら、ファイルに書き込まれる System.out だったら、標準出力に行く ソケットだったらネットワーク上に送信されていく 出力先が何であるにせよ、そこにデータを書き込むというのは同じ そういった、何かしらのデータの書き込み口というものを抽象化したのが、出力ストリーム >>844 別にOutputStreamWriterを使わなければならないことはない 出力を行う方法は他にもいくつかあるが、 そのテキストでは単にそのうちのひとつを紹介してるだけだろう
- 848 名前:デフォルトの名無しさん [2008/02/26(火) 18:42:43 ]
- >>847分かりやすいな説明ありがと!!!
- 849 名前:デフォルトの名無しさん [2008/02/26(火) 18:51:52 ]
- 一通りテキスト終わったら、トレーニング用のテキスト売ってるんだけど
それ買ってやったほうがいいかな? てか、なんかJAVAの勉強しても何か実感わかないな〜 やっぱ実際にもの作らんとそういうのは分からないものなのか?
- 850 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 18:59:39 ]
- >>849
どんなテキストか知らないけど ウィンドウ開いたりボタン押したり絵を出したりといったGUIをやると 実感をわかせるのに効果的だと思う
- 851 名前:デフォルトの名無しさん [2008/02/26(火) 19:07:46 ]
- ほうほう
- 852 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 19:13:33 ]
- >>849
何か自分で作ってみたいものはないの? 目標を決めるといいかもよ
- 853 名前:デフォルトの名無しさん [2008/02/26(火) 20:41:10 ]
- 今高校3年生だから、専門学校へ行ったときの予習をしてるんだ。
javaでどんなの作れる?とりあえず簡単なものを作ってみたい。
- 854 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:42:27 ]
- どんなものでも
- 855 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:44:02 ]
- そんなことよりもう一年勉強した方が
- 856 名前:ibj [2008/02/26(火) 20:55:19 ]
- 以下のソースコードで
alice1 == alice2:true alice1 == alice3:false Chapter5.Employee[name = null, salary = 75000.0, hireDay = Tue Dec 15 00:00:00 JST 1987] Exception in thread "main" java.lang.NullPointerException at Chapter5.Employee.equals(Employee.java:48) at Chapter5.EqualsTest.main(EqualsTest.java:17) と ぬるぽが出てしまいます。 2時間ほど考えたのですが原因がわかりません・・・。super(name)の部分で どうにかなっていると思うのですがロジック的に正しいと思うのですが・・・。 教えていただけたら幸いです。
- 857 名前:ibj [2008/02/26(火) 20:56:07 ]
- package Chapter5;
public class EqualsTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15); Employee alice2 = alice1; Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15); Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1); System.out.println("alice1 == alice2:" + (alice1 == alice2)); System.out.println("alice1 == alice3:" + (alice1 == alice3)); System.out.println("alice1.equals(alice3):" + alice1.equals(alice3)); System.out.println("alice1.equals(bob):" + alice1.equals(bob)); Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 25); Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 25); boss.setBonus(5000); System.out.println("boss.toString():" + boss.toString()); System.out.println("carl.equals(boss):" + carl.equals(boss)); } }
- 858 名前:ibj [2008/02/26(火) 20:56:36 ]
- package Chapter5;
abstract class Person{ private String name; public Person(String name){ this.name = name; } public abstract String getDescription(); public String getName(){ return this.name; } }
- 859 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 20:56:49 ]
- 専門なんて行っても勉強してる暇ないぞ。
情報系の大学いった方がまし
- 860 名前:ibj [2008/02/26(火) 21:00:13 ]
- あう・・改行多すぎて書き込めない
- 861 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 21:44:23 ]
- >>856
Employee にも何故か name があって、equals で、 other.name.equals(name)で比較してるんじゃないかと。
- 862 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:58:27 ]
- 力添えください。
ttp://www.nextindex.net/java/thread/sleep.html に記述のあるソースの中で、 main()がthrows InterruptExceptionとしてある理由がわからないのですが、 どういう意味なのでしょうか。 教えてください。 今回実行してみた感じ、定義をしなくとも実行には問題がありませんでした。 どの部分が、InterruptExceptionを投げるといっているのでしょうか? 少なくともtry-catchの外しか考えられないのですが、どこかわかりませんでした。
- 863 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:06:39 ]
- そのページの赤文字で書かれてるThread.sleep(1000);の所が投げてる。
javadocに書いてあるから読むと良いよ。
- 864 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:16:59 ]
- 文字列のサイズの取得で、
String s="あ"; 2を取得する方法を教えてください。
- 865 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:18:11 ]
- s.getBytes().length
- 866 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:28:19 ]
- 3になりました
- 867 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:36:09 ]
- 862です。
レスありがとうございます、853。 自分もThread.sleep(...); がInterruptedExceptionを投げる可能性があることはなんとなく覚えたのですが、 今回の場合は、try{}catch(InterruptedEception e){}、の記述によって、 メソッドがthrowsを設定する必要は内容に感じたのです。 うーん…。
- 868 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:37:35 ]
- s.length() + 1
- 869 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:06:26 ]
- "qa3813364".length();
- 870 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:17:57 ]
- >>865
GJ!
- 871 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:40:21 ]
- >>840
>>なお継承はカプセル化を壊すので、protected を使うのはその一線を越えます。 >この点について、初心者向けの説明をいただけませんか。 なんてことはない、メソッドをオーバライドすると、親クラスがそのメソッドを呼び出している場合 その挙動にも影響を与えるため、どのような影響があるか(どのように呼び出されているか)を 知る必要があるという意味で、実装が漏れてるという見方ができる。 継承よりも委譲の方が強固だが、継承のほうがお手軽なので 最初は継承を使って、事が複雑になってきたら、委譲にリファクタリングするのがアジャイル的
- 872 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:44:06 ]
- 委譲めんどくせえ
- 873 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:59:17 ]
- >>867
InterruptedException を飲み込んでいいのは、 実行中のタスクのキャンセレーションポリシーと 実行しているスレッドのインタラクションポリシーが明記してあり (あるいはそのスレッドのライフサイクルの制御権があり)、 ちょうど両者とも、InterruptedException を飲み込んでOKな場合だけ。 インタラプトを遅延させて処理を継続したい場合は Thread.currentThread().interupt()を 処理が継続できない・放棄する場合は InterruptedException を再投げするのが定石
- 874 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 03:00:53 ]
- >>867
そうだね必要ないな たぶんどこかからコピペしてきた消し忘れかなんかだろう ちなみに、InterruptedExceptionを揉み消すのは良くない習慣だ
- 875 名前:873 mailto:sage [2008/02/27(水) 03:13:13 ]
- 間違った。
2つのポリシーが上手い具合にOKなときにやっていいのは、インタラプトの発行だった。 タスクが InterruptedExceptionを飲み込んでいいのは、 そのタスクが IntteruptedException を飲み込んでOKなポリシーを持つスレッドからしか 呼び出されないことが保証されている場合だけだな、たぶん main() は、どこからともなくやって来たスレッドで実行されるから、 基本的に飲み込んではいけないはず
- 876 名前:873 mailto:sage [2008/02/27(水) 03:50:52 ]
- 間違った。
「インタラプトすると不正な挙動をします」というポリシーを明記したタスクとして InterruptExceptionを飲み込むならば、単に、 「インタラプトしてはいけないタスク」 +「インタラプトするとエラーメッセージを吐いて終了するっぽいメインスレッド」 =「このスレッド/タスクにインタラプトしてはいけない」 となるだけだった。さあ、どんどん飲み込みましょうねぇ
- 877 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 05:38:33 ]
- >>864
s.getBytes("Windows-31J").length など。 ttp://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#getBytes(java.lang.String)
- 878 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 08:04:00 ]
- Beanのbooleanプロパティのgetter/setterメソッドの命名について質問です。
たとえばbeautifulというプロパティとしたら規則に従いますと 単純にisBeautiful(),setBeautiful(boolean)となります。 しかし、別の例で「上書き確認を表示する」など動詞的なbooleanプロパティ、confirmOverwriteを考える場合 isConfirmOverwrite(),setConfirmOverwrite(boolean)と、とても気持ちが悪いです。 このような場合は変数名を考え直す必要があるのでしょうか? それともこういうもの、ということで割り切ったほうがいいのでしょうか?
- 879 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:13:57 ]
- 最近はokwaveとか教えてgooとかと
マルチするのが流行りなのか
- 880 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:19:46 ]
- -ableをつける
isConfirmOverwritable() setConfirmOverwritable(boolean)
- 881 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:23:42 ]
- その場合 confirm に able を付けるべきだと思うんだ
- 882 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:52:15 ]
- なるほどー!かなりすっきりしました。
ありがとうございます!!
- 883 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:17:58 ]
- JasperReportsで帳票毎に四角形の色を毎回変えたいんだけど
どうしたらいいですか? iReoprtで rectangle、backcolorを変更するというのはわかるんですが、 毎回違うとどうしたらいいのでしょうか?
- 884 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:00:12 ]
- 毎回ってのが意味解らん。
毎ページなのか、毎項なのか、毎行なのか、毎カラムなのか。 まずは日本語でおk
- 885 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:20:01 ]
- そもそもJava以前に、自分が抱えている問題を把握できていないケースが多い気がする。
だから日本語がおかしいし、説明されても理解できない。
- 886 名前:デフォルトの名無しさん [2008/02/27(水) 12:41:34 ]
- 右シフトでどっちが高速なのか試してください。
>> >>>
- 887 名前:883 mailto:sage [2008/02/27(水) 13:01:04 ]
- 枚ページです。
コンパイルしちゃった後でも変更できるんですか?
- 888 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:26:21 ]
- sunはInterruptedExceptionは握り潰すな再スローしろってスタンスだっけ?
- 889 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:26:24 ]
- >>888
このへんが参考になるかも www.ibm.com/developerworks/jp/java/library/j-jtp05236/
- 890 名前:デフォルトの名無しさん [2008/02/27(水) 19:00:22 ]
- java sound を使うとパソコンから盗聴が可能ですか
- 891 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:06:52 ]
- こっちでやれ
pc11.2ch.net/test/read.cgi/tech/1201346803/l50
- 892 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:56:31 ]
- Java の理論と実践: アトミックで行く
www.ibm.com/developerworks/jp/java/library/j-jtp11234/ このページにある、リスト3: SimulatedCAS クラスの compareAndSwap について質問です。 SimulatedCAS のコードのすぐ下にある説明書きに、 「CASベースの並行アルゴリズムは、スレッドがロックを待つ必要が全くないので、lock-freeと呼ばれます」 という記述があります。 しかし SimulatedCAS の compareAndSwap メソッドは synchronized メソッドに なっています。Simulated って書いてあるから実際使うときは違うやつ使うのか なと思いきや、 リスト4 のコードで思いっきり使ってあります。 compare-and-swap アルゴリズムを真似たプログラムは、 synchronized であっても ロックされないように最適化されるということでしょうか?
- 893 名前:デフォルトの名無しさん [2008/02/27(水) 22:05:06 ]
- レンタルサーバー借りて
毎日一回株価を取得してDBに放り込むプログラムを作ろうと思ってるんだけど JAVAで時間がきたらサーバー上で実行するってことかのう? どんな仕組みでできる? それだけわかればDBにも移せるしダウンロードもできそうなだんだが
- 894 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 22:17:24 ]
- 普通 cron 使う。
- 895 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:33:28 ]
- 実行先のJREバージョンに応じて違う処理をさせたいと考えています。
バージョンに応じて違うクラスファイルを読み込むようにするには どうしたらよいでしょうか? JARアーカイブとMANIFESTファイルを利用しており、クラスライブラリが たくさんあるのでバージョンごとに違うJARを作成するのは避けたいのですが・・・
- 896 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 23:43:07 ]
- Class.forName(javaVersionName+ClassName).newInstance();
- 897 名前:867 mailto:sage [2008/02/28(木) 00:01:48 ]
- いくつかのレスポンスありがとうございます。
申し訳ないんですが、ぜんぜんわからないです。 1時間くらいgoogleしてみたのですが、 そこから派生するキーワードや、 似たような単語が、同様の意味を成しているのかもわかりませんでした。 せっかく手を差し伸べていただいたところ申し訳ありません。 飲み込む、もみ消す、握りつぶす、 非チェック例外、チェック例外、チェック済み例外、チェックされる例外… 飲み込むというのは、InterruptedExceptionを投げずに処理してしまうということなのでしょうか…
- 898 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:11:59 ]
- オブジェクト指向初心者です。
調べるの面倒です。教えてください。 このスレッドを読んでいて、初めて 委譲 を知ったのですが、 クラスの外部から、インスタンスのフィールドにアクセスできる仕様というのは、 オブジェクト指向的に、思い切り間違えなのでしょうか。 委譲 の概念が普通に使われるためには、 フィールドへのアクセスは、 クラスに所属するメソッド経由で、アクセスされる仕様である場合でないと、 アクセス方法に統一性がもたせられませんよね。 そもそも、このような質問をする原因が、 なぜフィールドの値をpublicにするなど、 所属クラス内のメソッド以外からの、フィールド変数(?)へのアクセスが許可される必要があるのか が、わからないためです。 質問の仕方が、気に入らなければ、無視してください。 たぶん調べてもまともな回答にたどり着くに、長い時間がかかりそうだと思い、怠けています。
- 899 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:19:18 ]
- 答えるの面倒です。教えません。
- 900 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:21:29 ]
- >>895
interface AnythingExecutor{ public void doAnything(); } public class AnythingExecutor14 implements AnythingExecutor{ public void doAnything(){ // JRE 1.4 用の処理 } } public class AnythingExecutorFactory{ public static AnythingExecutor create(){ // JRE のバージョンを取得する if( 1.4 だった){ return new AnythingExecutor14 (); } else if( 1.5 だった){ return new AnythingExecutor15 (); } ... } } // 実際の処理 AnythingExecutor executor = AnythingExecutorFactory.create(); executor.doAnything();
- 901 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:23:16 ]
- >>898
それは Java に対する質問ではない。 適当なスレを探すよろし。
- 902 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:29:32 ]
- >>898
問題ないんじゃないか。setter/getter があるってことは、すなわち public フィールドとほとんど等値なんだし。 ただ、フィールドへのアクセスと同時に何かしたい、外部からは read のみに変えたい、みたいなことってことが結構ある。 そこで、フィールドは private にして隠す。アクセスは public な getter/setter からのみ。というよくある構成に統一することで、 機能追加に対応しやすくなるからこうしましょう、という寸法。 中には「フィールドへのアクセスもオブジェクトに対する"操作"で あるから、メソッドであるべき」なんていう人もいると思う。 まぁその辺をどう割り切るかは個人個人によるのでは。 あと委譲の話と何が関係あるのかが分からなかった。
- 903 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:11:04 ]
- >>902
> 問題ないんじゃないか。setter/getter があるってことは、すなわち > public フィールドとほとんど等値なんだし。 1つ大きな違いがあるぞ。setter/getterの場合、本来は違うものを同じものに見せ掛けるのが簡単にできる。 後付けで振舞いを変えるとか、透過的に処理を割り込ませたりするとか、実体をリモートに持たせるとか。
- 904 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:33:31 ]
- setter/getterメソッドをわざわざ追加する意味がさっぱりわかなかったので
publicフィールドにガンガンアクセスするコードを書いてるのですが、ひょっとして一般的じゃないんですか? >>903さんがどういう処理を指してるのかいまいちつかめません。。
- 905 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:38:00 ]
- >>896,900
うわー、ありがとうございます! 早速試してみます。
- 906 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:38:32 ]
- >>877
やさしいなー
- 907 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 01:54:20 ]
- >>904
意味が分からなければ今のスタイルを続けていけばいい。 そのうち面倒ごとが起こったときにアクセッサの意義が分かるよ。
- 908 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 07:09:55 ]
- >>892
値を一つ変えるのに、払うコストをどれだけ小さく出来るか、という話。 この例はシミュレートだけど、ハードウェアでサポートしている CPU もあるよ、と言うこと。 「スレッドがロックを待つ必要が全くない」というのは、 リスト2で行われてるような処理をする必要がない、ということ。 リスト4で注目するべき点は、increment メソッド内の get と CAS の間で、 継続したロックが保持されていないこと。 そして、increment 自体が呼ばれてから値を戻すまでに value の get 値が 1 "以上"変わること。
- 909 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 09:16:22 ]
- test
- 910 名前:Hoge mailto:sage [2008/02/28(木) 11:32:12 ]
- はじめまして、質問させていただきます。
DJUnitを使って単体テストを行っているのですが、 テスト結果の確認方法として、 ○○クラスの△△メソッドが何回呼ばれたか? を確認したいのですが、方法がわかりません。 assertCalled(String, String); を使えば、メソッドが呼ばれたかどうかは確認できますが、 何回呼ばれたかは確認できません。 なにか良い方法はないでしょうか?
- 911 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:30:14 ]
- 未だに使っている所あるとは驚き
- 912 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 12:44:49 ]
- >>892
それらは 「振る舞いを示すコード」 というタイトルや Simulated というクラス名からわかるように、 単に動作を説明するための例にすぎない。 真似ても別に最適化されない。 実際にアトミック操作したい場合は java.util.concurrent.atomic.AtomicInteger を使う。 リスト5では AtomicInteger 使ってるだろ。
- 913 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 13:46:34 ]
- だって柏原だって経済学部じゃん
- 914 名前:Hoge [2008/02/28(木) 13:47:56 ]
- >>910
すいません。自己解決しました。 調査不足でした。 getCallCount(String, String) という便利なメソッドがありました。 ありがとうございました。
- 915 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:33:08 ]
- FileInputStream fis = new FileInputStream(in); // in : 入力ファイル
fis.read(); .... fis.getChannel().position(0); fis.read(); ... fis.close(); 今までFileChannelを知らず、一方通行なInputStreamでランダムにアクセスできるのは気持ちが悪いのですが、こんな感じでポインター移動するのって安全ですか?
- 916 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 16:36:04 ]
- そのストリームがファイルだと分かってるから良いんじゃねーの。
- 917 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 17:20:24 ]
- そうですよね。おーかなり自由度が増しますね。
ありがとうございました。
- 918 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:11:27 ]
- swingについて、教えてください。
PaneとPanelの違いがよくわからないのですが、 JComponentを継承しているコンテナに関して、 付加機能が一番小さいものがJPanelで、 JPanel以上の何らかの機能が付け加わったものがPaneなのでしょうか? コンテナの中でPanelだけ、PaneでなくてPanelと呼ばれる理由は何なのでしょうか? あと、もうひとつ。 Containerクラスのオブジェクト(というかJFrame.setContentPane())をJPanelにキャストして、 コンテナとしている参考コードがあったのですが、 サブクラスの変数にキャストさせ(て代入する)理由がわかりませんでした。 なぜなのでしょうか?
- 919 名前:918 mailto:sage [2008/02/28(木) 22:13:40 ]
- 918です。
918で記述ミスしました。 >JFrame.setContentPane() JFrame.getContentPane() でした。 (JFrame#getContentPane() と記述するとどういう意味なのでしょうか…。) よろしく御願い致します。
- 920 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 22:29:34 ]
- >>918
さぁ? 名前なんて付ける人の趣味みたいなもんだし、深く考えても仕方ないような ちなみに、JComponentを継承してるコンテナ、というが JComponentはContainerのサブクラスだから、JComponent自体がコンテナだよ まぁJButtonの中に他のコンポーネント入れたりはあんまりしないけれど・・・ ContainerになくてJPanelにあるメソッドを何か使いたかったんじゃないかね コード見てわからなければ書いた人に聞くしかない JFrame#getContentPane()はJFrameクラスのgetContentPane()メソッドのこと JFrame.getContentPane()と書くと、staticメソッドを呼んだ戻り値について言ってるようにも見えるので、区別のために
|

|