Java入門・初心者質問スレat TECH
Java入門・初心者質問スレ - 暇つぶし2ch850:デフォルトの名無しさん
16/10/22 18:09:51.83 daytFnn9.net
try {

if (x < 4) Goto Exception
} catch (Exception e) {
}

if文結果で例外に投げたいのですが、どうすればいいでしょうか?

851:デフォルトの名無しさん
16/10/22 18:52:36.46 Y/WKiXhx.net
>>845
try{
if(x < 4) throw new Exception(

852:デフォルトの名無しさん
16/10/22 18:53:43.20 Y/WKiXhx.net
try{

if(x < 4) throw new Exception("例外メッセージ");

}catch(Exception e){
}

853:デフォルトの名無しさん
16/10/22 20:22:37.77 daytFnn9.net
>>847

ありがとうございます.

854:デフォルトの名無しさん
16/10/26 00:50:27.08 PCuofn8Y.net
個人的な事ではありますが、ついにJavaの本三冊目(正確には三種類目)に突入しますた。

855:デフォルトの名無しさん
16/10/26 16:52:34.11 AyEmyE7Q.net
日記スレじゃないんだわ

856:849
16/10/26 17:35:43.66 PCuofn8Y.net
すいません、目的外利用してました。

857:デフォルトの名無しさん
16/10/26 21:48:30.73 KK2a1M8e.net
throw new IllegalPostException();

858:デフォルトの名無しさん
16/10/27 19:25:16.09 dM08lZSa.net
プログラムを複数のパッケージに分けるとコンパイルが複雑になるんですか?

859:デフォルトの名無しさん
16/10/28 00:51:27.57 pg93hTIV.net
>>853
やってみればいいんじゃないの?

860:デフォルトの名無しさん
16/10/28 06:20:08.37 ZSEeTNr3.net
ジェネリクスなんですが、
List<? super A> list = new ArrayList<A>();
のようにsuperで型宣言した場合、
list.get(); した時に全部Object型になります。
? の部分にどんな型が来ても互換性が取れるようにってことだと思うんですが、
それなら極力 super なんて使わずに、
List<A> list = new ArrayList<A>();
にするほうがいいと思うんですが、ジェネリクスでの<? super *>の活用しどころってどういうケースでしょうか?

861:デフォルトの名無しさん
16/10/28 06:43:40.93 l/3+OTVv.net
なんでextendsでなくsuper…

862:デフォルトの名無しさん
16/10/28 12:17:18.19 0c0ESAbt.net
>>855
出力のみに使う型はextends
入力のみに使う型はsuper
入出力両方で使う型には変性を付けない

863:デフォルトの名無しさん
16/10/28 14:29:30.59 dom53pU3.net
utilクラスはすべてstaticでもいいでしょうか?
例えばDBにアクセスするutilなどです。

864:853
16/10/28 16:02:47.03 wDKSwFbg.net
>>854
ネット環境が無いんです。

865:デフォルトの名無しさん
16/10/28 16:21:15.04 GNbMn5al.net
ネット環境がないとネットの掲示板に書き込んでる矛盾

866:859
16/10/28 18:22:32.29 wDKSwFbg.net
>>860
ガラプーって表示されてないですかね?

パソコンがオフラインです。携帯から書き込んでます。ガラケーです。

867:デフォルトの名無しさん
16/10/28 21:40:52.11 EqqPNtKi.net
プログラミング初心者でやさしいjavaとネットの講座で独学でやっているのですが、java se8 silverを受けてみようと思うのですが、
黒本は初心者ならbronzeからやったほうがいいのでしょうか?

868:デフォルトの名無しさん
16/10/29 02:44:29.93 4FyVr6lP.net
diしたいのですが
@resouceでインジェクトされないんです。どうしてですか?

869:デフォルトの名無しさん
16/10/29 03:51:39.00 qP5vgiL/.net
>>862
実際のSilverの問題は、わざとか難しい部分を繰り返し聞いてくるので簡単ではありませんよ。

Bronzeから受けてください。

国家試験と違って出題範囲をまんべんなく聞いてくる試験ではないのと、試験が短いのでSilverはあせります。

870:デフォルトの名無しさん
16/10/29 04:39:13.23 29FSllRn.net
個人的にはブロンズのほうが時間がなくて怖かった(たしか65分で60問?)
ブロンズを71点でギリギリ取って3日後にシルバー97点だった。

871:デフォルトの名無しさん
16/10/29 09:40:34.45 JrxI+Gxs.net
>>865
変態か、簡単な問題セットに当たったんだろうな。

872:デフォルトの名無しさん
16/10/29 17:56:15.23 ePGlEX2J.net
>>859
話の繋がりがわからない。
なんでプログラムを複数のパッケージに分ける話からネット環境の話に飛ぶ?
パッケージに分けるのにネット関係なかろう。

873:859
16/10/29 20:30:31.50 TXDQcz+f.net
>>867
上で、実際にやってみたら、と提案されたので、ネット環境が無いのでそれは出来ないんです、と伝えたわけです…。

874:デフォルトの名無しさん
16/10/29 21:25:41.35 tec52ry+.net
Javaを勉強し始めて2ヶ月ほどの初心者です
気になることがあったので質問させていただきます

参考書には親クラスの型を使って子クラスのインスタンスを参照する参照変数を宣言できると
書いてあったのですが、それをするメリットって何なんでしょう?

例えばHumanクラスを親とするChildクラスがあるとして、
Child child = new Child();
ではなく
Human human = new Child();
とするメリットです

文法上そういうことができるのは理解しましたが、それをすることが何に役立つのかがわからなくて…

まだ自分はそこを気にかけれるレベルではないのだと思いますが、回答いただけるとありがたいです

875:デフォルトの名無しさん
16/10/29 21:33:58.43 Xtl4N18Y.net
2ヶ月もかけてポリモーフィズムにも届いてないんか
サンデープログラミング?

876:デフォルトの名無しさん
16/10/29 21:38:47.67 tec52ry+.net
>>870
仕事終わって帰宅してからと休日に細々と勉強してます
元々頭の出来も良くなかったので面白い反面パンクしそうです

877:デフォルトの名無しさん
16/10/29 22:07:22.05 P6pOx9h1.net
>>869
抽象化を上げることができて嬉しい
ボンヤリさせとくメリットってのがあるじゃん?
細かいとこまで興味がないっつうか
細かいとこまで感心持ちたくないっつうか

抽象化を一番下げた状態が
Child child = new Child();
の形だよね
interface I {}
class A implements I {}
class B extends A {}
class C extends B {}
class D extends C {}
のとき、
C c = new C();より
B b = new C();より
A a = new C();より
I i = new C();のほうが抽象化されてるよね

こうやって、好きなだけ抽象度を上げていくことができる
そしてこれの何がうれしいのか、については自分で考えてほしいw

878:デフォルトの名無しさん
16/10/29 22:09:15.81 P6pOx9h1.net
一行目修正:
抽象度を上げることができて嬉しい

これ削除:
class D extends C {}

879:デフォルトの名無しさん
16/10/29 22:31:47.93 i+DlxK4w.net
関数の引数とかクラスのメンバしたときに意味がある
ローカル変数を抽象化するメリットはあんまりないぞ

880:デフォルトの名無しさん
16/10/29 22:33:50.82 i+DlxK4w.net
>自分で考えてほしいw

自分もわからんっていうならともかく
長々と説教たれてしまいにこんな答えが返ってきたら
もう二度と聞きにいきたくない…

881:デフォルトの名無しさん
16/10/29 22:48:42.45 tec52ry+.net
>>872
ありがとうございます
とりあえず今の自分の知識だと理解できないレベルの話だということはわかりました
一旦脇に置いて別の部分を進めていくことにします

>>874
ありがとうございます
応用が出来るようになればメリットが出てくるのですね、スッキリしました
使いこなせるように精進します
いえ、分不相応な質問だったことがわかっただけでも収穫でした
また何かあったら質問させていただきます

882:デフォルトの名無しさん
16/10/30 00:12:25.83 ekX97W9d.net
>>869
例えば、配列作りたいとき、
Human[]にしとけば、
ChildもHumanも、他の何かしらのHumanの子クラスも入れとけるじゃん。
実際の処理はChildやら他の子クラス側に書けば、子クラスの追加とか削除とか修正だけで、他の部分に影響を与える事なく機能追加や修正できるっしょ。
同じ道理で、new Childするのをやめて、
static Human createInstance(なんやらかんやら)
と、HumanとかHumanFactortなんかに子クラス作って返すメソッド書けば、どのインスタンスが妥当かも考え無くて済むじゃん。
って事。

883:デフォルトの名無しさん
16/10/30 00:20:54.82 3d0adPIb.net
その理屈だと全部Object[]にしとけで終わってしまう
なんていうかな、あの手の本はほんとにロクなことを教えないよね

884:デフォルトの名無しさん
16/10/30 00:54:27.06 rQxX2zI2.net
まず「スッキリわかる Java入門 第2版、2014」を読んで、オブジェクト指向をきっちりと勉強する

継承は、ゲームで使う。
例えば、怪物クラスの子クラスに、毒マタンゴ・ゾンビドラゴンがある時

怪物配列に、毒マタンゴA・B、ゾンビドラゴンA を入れる

for (怪物 monster: 怪物配列){
怪物.攻撃
}

こういうように、個々の種別ではなく、抽象化して怪物として扱った方が、
簡単に書けるし、また仕様変更にも強い

例えば、骸骨剣士A を追加しても、ソースコードを変更する必要がない。
DB内の怪物マスタを、修正すればよいだけ

つまり、オブジェクト指向を使うと、型による分岐が無くなり、ソースコードの変更に強くなる。
もしソースコード内に、型による分岐があれば、抽象化してそれを消すべき

885:デフォルトの名無しさん
16/10/30 01:07:46.99 t4ilsIoO.net
先輩の険悪な人間関係を取り持ち
別のところから答えも引き出す

新人にしては恐ろしい子…

886:868
16/10/30 02:58:58.22 tifMCILv.net
そして出来たら>>868にも触れてやって下さい。

887:デフォルトの名無しさん
16/10/30 09:27:55.22 uCf20103.net
>>881
アロハー

オフラインでも試せるんじゃ?

888:デフォルトの名無しさん
16/10/30 14:41:04.36 7WMxM/JH.net
抽象クラスのインスタンスは作れないって思ってたんですが、明示的に作る事が出来ないだけで、実際は作られてるんすか?
こうやって抽象クラスのサブクラスをインスタンス化した時、"AbClass"は出力されます。
public class Main extends AbClass{
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
new Main();
}
}

abstract class AbClass{
public AbClass(){
System.out.println("AbClass");
}
}

javapしてみても、
abstract class main.AbClass
minor version: 0
major version: 52
flags: ACC_SUPER, ACC_ABSTRACT
っていう、ACC_ABSTRACTフラグがついてます。

889:デフォルトの名無しさん
16/10/30 15:35:58.53 fTcBbX+E.net
>>883
その AbClass ってメソッドに一つも abstract がないよな。
だから Main クラスに継承した段階で全てのメソッドが定義された(元からそうだけど、これで完全にabstractクラスではなくなる)ということだと思うが。

890:デフォルトの名無しさん
16/10/30 15:37:31.85 fTcBbX+E.net
>>868
なんで実際にやるのにネット環境が必要なんだよ。
複数のパッケージに分けるだけならネットに繋がってなくてもできる、てかネット関係ないだろう。

891:デフォルトの名無しさん
16/10/30 15:48:29.79 zpgPT2nV.net
>>885
だったら回線切ってやってみろや
結果を書け、それで解決するだろ

892:デフォルトの名無しさん
16/10/30 15:49:41.97 zpgPT2nV.net
ネット関係ないと言い切った御仁がおられるのでやってもらいましょう
いったい何の作業をするのか見ものですね

893:デフォルトの名無しさん
16/10/30 16:13:14.82 asmRMmwq.net
>>885
887が言っている複数の「パッケージに分ける」というフレーズは
我々の知っている作業とは違う作業を指していると思われる

そうでないとここまで自信満々な理由が分からん
俺だったら1週間はこのスレ開かないわ

894:デフォルトの名無しさん
16/10/30 16:13:21.76 qgjs7ee5.net
やばい、第五章で頭こんがらがってきた…

895:881(868)
16/10/30 18:37:40.53 tifMCILv.net
>>882 >>885
ネットに繋がってないのでJDKやエクリプスをダウンロード出来ないんです…。

896:デフォルトの名無しさん
16/10/30 19:53:13.17 uaaD1pSq.net
実行できもしないのになぜJavaスレにいる…
それならパッケージを分ける分けないなんて気にする必要ないだろ
教えたところで実行できないんだから

学校や職場に行けば実行環境があるってんなら、そこで試せ

897:デフォルトの名無しさん
16/10/30 19:59:47.72 zpgPT2nV.net
>>891
偉そうなくせに大したこといってなくて草



898:墲ゥらないなら黙ってろよ雑魚



899:デフォルトの名無しさん
16/10/30 20:00:27.65 zpgPT2nV.net
>>890
俺は応援してるぞ、ここに巣くうサルレベルの知能の雑魚どもに負けるな

900:デフォルトの名無しさん
16/10/30 20:15:47.63 OuHrL0RN.net
>>891みたいなの一番いらんよなw

901:デフォルトの名無しさん
16/10/30 20:50:51.91 asmRMmwq.net
応援するだけで答えませんけどね:)

902:デフォルトの名無しさん
16/10/30 20:53:31.00 zpgPT2nV.net
>>895
はい雑魚2匹目

903:デフォルトの名無しさん
16/10/30 20:54:11.88 zpgPT2nV.net
俺が餌になる、頑張れ

904:デフォルトの名無しさん
16/10/30 20:59:43.05 Z+Cepnas.net
>>886
複数のパッケージに分けるだけなら簡単だろうがよ。
先頭に packge とパッケージ名入れるだけ。使う側はそのまま指定するか import するだけ。

てか、なんでネット必要なんだ?お前は何を想像しながら「複数のパッケージに分ける」と言っている?

905:デフォルトの名無しさん
16/10/30 21:06:46.67 zpgPT2nV.net
>>898
簡単ならさっさとやれよ、結果をレポートしろ
簡単なんだろできるよな

906:デフォルトの名無しさん
16/10/30 21:07:32.67 Z+Cepnas.net
>>890
あ、JDKのダウンロードができないって話か。

どこかダウンロードできる環境でダウンロードしてUSBメモリにでも入れて持ち帰れば?

まあでもネット環境は何とかして用意した方がいいと思うよ。
携帯をテザリングもできるスマホに変えて無線LAN接続とか、回線増やさずにネットに繋げる方法もあるよ。
契約内容に気を付けないと高くなるかも知れないけど。(あとPCに無線LANないとダメだな。有線でテザリングできるならなんとかなるかも知れないけど)

907:デフォルトの名無しさん
16/10/30 21:09:05.12 zpgPT2nV.net
>>900
お前が自分でやれば済む話だろうが、横着すんな

908:デフォルトの名無しさん
16/10/30 21:10:03.72 Z+Cepnas.net
>>899
あたりまえだろ。おまえバカか?てか大丈夫か?

909:デフォルトの名無しさん
16/10/30 21:11:20.23 Z+Cepnas.net
>>901
お大事に。

910:デフォルトの名無しさん
16/10/30 21:14:51.93 zpgPT2nV.net
なんだ結局できないのか

911:デフォルトの名無しさん
16/10/30 21:25:06.45 +8NL+Ds1.net
>>891

912:デフォルトの名無しさん
16/10/30 21:28:24.47 +8NL+Ds1.net
あ、途中で押しちゃった

913:デフォルトの名無しさん
16/10/30 22:04:29.62 asmRMmwq.net
なんか怒りを買ってしまったみたいですね


914:890
16/10/31 00:47:32.32 G6HLyhYb.net
アドバイスをして頂いた方ありがとうございました。

ネットが繋がるまで本(スッキリJava)で独習しています。
前述のパッケージの分割コンパイルの項目が読んでて理解できなかったので質問させて貰いました。

915:デフォルトの名無しさん
16/10/31 02:15:35.73 sJgNRili.net
MVCのWebアプリについて教えて下さい。
リクエスト毎にインスタンスを生成するControllerクラスがあります。
ControllerクラスにServiceクラスをインスタンス変数として、DIコンテナでインジェクトします。
この際に、DIのライフサイクルをシングルトンにします。

1回目のリクエストのControllerクラスでは indexメソッド内でserviceのメソッドがメソッド内で呼ばれるとします。
2回目にリクエストでもController.indexメソッドが呼ばれます。
この時、serviceクラスはnullでしょうか?
それとも1回目のControllerクラスでDIしたインスタンスが2回目も使われるのでしょうか?

916:908
16/10/31 02:18:51.56 G6HLyhYb.net
何か俺が争いの火種になってしまっているのかな?
そうだとしたら不快な思いをした方すいません。

持っているパソコンのOSがXPなんでネットに繋げないんです。新しいOSを入れる容量も無いんで新しく買おうと思っています。

917:デフォルトの名無しさん
16/10/31 07:34:49.69 sEDt+ZDb.net
>>909
同じインスタンスがDIされる

918:デフォルトの名無しさん
16/10/31 08:38:04.45 r/gQTNbf.net
>>910
恒例の「外野が勝手に騒いでるだけ」だから気にしなくていいよ

919:デフォルトの名無しさん
16/10/31 08:52:18.47 X5kXOLud.net
せやな

920:デフォルトの名無しさん
16/10/31 10:01:24.16 3MWuUQcB.net
>>910
Linux 入れればいいのでは?
Ubuntu とか本屋でDVD付きで売ってたりするからインストール自体はネットなしでもできる。

921:909
16/10/31 12:01:32.93 sJgNRili.net
>>911
ありがとうございます。もう1つ質問させてください。
ではServletとDIコンテナを併用して使う場合のケースです。
サーブレットクラスのインスタンス変数にserviceクラスを持つとします。
通常だとServletはシングルトンなのでクラスのインスタンス変数はスレッドセーフではないですが、
DIコンテナの設定をリクエスト毎にした場合は、
1回目、2回目、3回目・・・と
アクセスされるたび、serviceにインスタンスがDIされますか?
それとも呼び出し元のクラスが新たにインスタンス生成されないので同じインスタンスが共有されますか?

922:デフォルトの名無しさん
16/10/31 20:08:38.55 RYpBavAY.net
int resurt

assertThat(resurt, is(not(0));

resurtの値には0以上の値がランダムに代入される時、0以外をtrueで返す式は上記であってますか?

923:デフォルトの名無しさん
16/10/31 20:53:46.43 p7TPitCz.net
>>915
よくわかんねーけど、どのインスタンスがDIされるかなんて制御できないよ。
根本から理解が間違ってる

924:デフォルトの名無しさん
16/10/31 21:34:08.02 sJgNRili.net
>>917
どういうことですか?

925:910
16/11/01 00:50:00.31 68tlbbHF.net
>>912 >>914
ありがとうございます。

Linuxは大学の時にやって苦戦したので、Windowsでいきたいんです…。

926:デフォルトの名無しさん
16/11/01 00:56:10.41 FUOnuiX2.net
ネカフェでインストーラだけダウンロードすればいいんでないの?

927:919
16/11/01 01:41:24.27 68tlbbHF.net
>>920
地方在住なので近くにネカフェ無いです。
まあもうじき新しいパソコン買うので…。

928:919
16/11/01 01:41:53.51 68tlbbHF.net
>>920
地方在住なので近くにネカフェ無いです。
まあもうじき新しいパソコン買うので…。

929:デフォルトの名無しさん
16/11/01 01:43:14.40 68tlbbHF.net
連続書き込み失礼しました。

930:デフォルトの名無しさん
16/11/01 02:50:43.94 lWEkG1Wt.net
>>916
合っている。実行して確かめろ

それに、resurtは、result だろ

931:デフォルトの名無しさん
16/11/01 07:21:55.41 YKGFAfzS.net
>>918
そもそも、どういう事がしたくてそうしてるの?
あと、そこまでいくとDIコンテナにもよるでしょ。

932:デフォルトの名無しさん
16/11/01 09:11:02.25 8QttcA43.net
>>919
一応インストールしなくてもCDかDVDでブートして動くようなのあるけどね。インストーラでそういう起動させるかどうか選べる(確かUbuntuもそういう風になってた)。
なので、Windows用の何かをダウンロードしたいだけだとしてもそうやって起動後にUSBメモリ挿してそこにダウンロードするという方法がある。
するとLinuxインストールせずに使えてネカフェに行く必要もなくなる。

まあ、XPでもセキュリティリスク無視するならそのままできるだろうけどね。(Oracleとか、特定のサイトにしか行かないなら多分大丈夫だとは思うが)

933:919
16/11/02 00:33:40.21 T1qBuIQL.net
>>926
忙しくてレスが遅くなってしまいすいません。

丁寧にありがとうございました。

技術評論社とかの本はCD-ROMが付いてますね。
俺が買った本はダウンロードを推奨するものでした。

934:デフォルトの名無しさん
16/11/02 08:12:21.70 JaTBDkBi.net
今日日こんな質問があるとはな

935:デフォルトの名無しさん
16/11/02 16:46:07.89 KtthnrOq.net
Windows2000全盛期の質問だよね。

936:デフォルトの名無しさん
16/11/02 18:02:47.63 WL73ssGd.net
超貧困JKって奴だろ

937:デフォルトの名無しさん
16/11/02 19:04:14.21 6QvosKf/.net
キーボードだけ買ってタイピング練習ってか?

938:デフォルトの名無しさん
16/11/02 22:16:59.49 QrC60bZw.net
俺のキーボード。
URLリンク(i.imgur.com)
なんとこれだけで計算もできる。

939:デフォルトの名無しさん
16/11/03 01:58:29.25 8VAyqA8t.net
ObjectクラスのhashCode()ですが、どういう判定方法をしているのでしょうか?
equals()でfalseとなるインスタンス同士(パラメータは一緒でインスタンスが違う)でも、同じ値が返ってきます。

940:デフォルトの名無しさん
16/11/03 02:52:13.45 9qfKx4O0.net
>>933
ObjectクラスのhashCode()はメモリのアドレスだよ

> equals()でfalseとなるインスタンス同士(パラメータは一緒でインスタンスが違う)

これはObjectクラスではないのじゃないかな
パラメータからハッシュ値を計算するようにオーバライドしてるんでしょ

941:デフォルトの名無しさん
16/11/03 03:23:17.42 0y7uoQTe.net
ジャパニーズオールドアナログコンピューターキーボード

942:デフォルトの名無しさん
16/11/03 03:54:34.50 QFrf3CuS.net
mainクラスをコンパイルすると全パッケージコンパイルに成功して実行できるのに
個別にコンパイルするとサブパッケージが因数の受け渡しで別クラスを認識できずシンボルを見つけられませんエラーが出るのは何が考えられるでしょうか
構成は
main→パッケージ→a
       └→b
でmainがabの内容を表示しbが再びaの内容を表示するものです
bを個別にコンパイルするとaのメソッドを参照できず、指定したクラス名を変数名と勘違いしてる感じです

943:デフォルトの名無しさん
16/11/03 05:16:28.40 TDi/4+oI.net
bファイル内で、import a
と、していないから

mainファイル内では、
import a
import b

の順番で読み込まれているから、bファイル内で、aのクラスを使えていたとか?
まあ、import宣言する順番に、依存しないかも知れないけど。
漏れは、知らない

944:デフォルトの名無しさん
16/11/03 14:20:39.76 QFrf3CuS.net
>>936
ですが解決したかもしれないです
環境変数をHPを参考にしてPATHと設定したのですがCLASSPATHとすべきだったのかもしれないと
環境変数の違いなんて全くわからないけど試してみます

945:デフォルトの名無しさん
16/11/03 20:13:39.41 QFrf3CuS.net
駄目だどうしても別のプログラムにしても別パッケージを参照しようとするとをパッケージ~は存在しませんもう泣けるつらい

946:デフォルトの名無しさん
16/11/03 21:21:18.02 QFrf3CuS.net
どなたか助けてください、すいません…
スッキリの例題出申し訳ないですがこのプログラムに限らずパッケージをまたごうとするとパッケージやクラスが発見できないエラーが出ます
CLASSPATHを WORK や Calc や calcapp.main に設定しても駄目
PATHは設定してjavaもjavacも通ります


URLリンク(i.imgur.com)

947:デフォルトの名無しさん
16/11/03 22:08:01.44 CtrzsuW8.net
例題にはnotepad.exeとコマンドプロンプトを使えって書いてあるのか?
書いてあるなら、そこまでに説明されていることの何かが欠けてるんだろうよ
書いてないなら、書いてある方法で問題は解けよ

948:デフォルトの名無しさん
16/11/03 22:08:26.76 kVn2ZEfC.net
質問させてください。
これまでC言語を学んで趣味としてプログラミングをやっていましたが、
ひょんなことからJAVA Black bookを入手することになり、いい機会なので新しい風を入れるつもりで
この本でJAVAを学びはじめました。
しかしながら、この本が2000年9月出版で、もしかしたら今と大きく変わった部分があるのではと
心配しています。
そのあたり、ご存知の方にご教示いただけたら幸いです。

949:デフォルトの名無しさん
16/11/03 22:17:14.22 CtrzsuW8.net
1.3時代の本か
少なくとも1.6以降じゃないと、予約語を覚える以外の役には立たない

950:デフォルトの名無しさん
16/11/03 22:21:30.80 QFrf3CuS.net
>>941
メモ帳とコマンドプロントを使うって書いてたんでそれが一般的かと思ってたんですが違うんですか?
どっちにしてもこれが通らないのが納得行かないですが

951:デフォルトの名無しさん
16/11/03 22:36:56.93 g7gHuu9b.net
>>940
URLリンク(docs.oracle.com)

CalcLogicを先にコンパイルして、クラスパスにCalclogic.classファイルの場所を設定するか、
いっこ上のフォルダに上がって、クラスを2つ同時に指定するかで行けんか

952:デフォルトの名無しさん
16/11/03 22:37:38.25 g7gHuu9b.net
あと、PATHとCLASSPATH混同しとるな

953:デフォルトの名無しさん
16/11/03 22:47:12.50 kVn2ZEfC.net
>>943
あちゃ~そんなに変わってますか
JAVAがC言語学習者にとって学びやすい言語であることは今の本のさわりでわかったので、
改めて別の本を買ってみることにします。

954:947
16/11/03 22:47:37.54 kVn2ZEfC.net
ありがとうございました。

955:デフォルトの名無しさん
16/11/03 23:32:50.63 QFrf3CuS.net
>>945
PATHはjavaの定義のため、CLASSPATHはクラス指定のためと分かったんですが一つ目の方法では駄目でした
二つ目のクラスを二つ同時に指定するというのが分からないのですが試しにcalcapp.mainとcalcapp.logicsにクラスパスを設定してCalcディレクトリでjavac Calc.java
→Calcファイルが見つからない
calcapp.mainディレクトリでjavac Calc.java
calcapp.logicsが存在しない
複雑な構成のプログラムではないし、何らかの設定でつまづいてる気がするんですが暗中模索がこんなにしんどいとはと実感してます

956:デフォルトの名無しさん
16/11/03 23:37:47.60 x/s1yBiE.net
パッケージとディレクトリの対応は「calcapp.main」という名前よディレクトリじゃなく「clacapp¥main」だぞ

calcappディレクトリの下にmainディレクトリ作らないと

957:デフォルトの名無しさん
16/11/03 23:39:47.53 x/s1yBiE.net
calcapp¥mainとcalcapp¥logicsの二つのディレクトリを作れば解決するはず

958:デフォルトの名無しさん
16/11/03 23:58:11.81 g7gHuu9b.net
あw

959:デフォルトの名無しさん
16/11/04 00:10:29.41 9L4bsxNE.net
皆さんにアドバイス頂いていろいろやるも通らず…
その外こんなのも駄目で
javaのバージョンが良くないのか自分を疑うべきなのか

URLリンク(i.imgur.com)

960:デフォルトの名無しさん
16/11/04 00:12:46.15 tO492IJ7.net
と思ったけど
おい普通にいけたぞ

xxx\Calc> C:\Program Files\Java\jdk1.8.0_92\bin\javac" calcapp.main\Calc.java calcapp.logics\CalcLogics.java

961:デフォルトの名無しさん
16/11/04 02:46:44.66 A/+Iym3t.net
スッキリJavaの「複数クラスを用いた開発」の章の最後に書いてある。
クラスローダーの動作原則

パッケージ階層と全く同じ、ディレクトリ階層を作って、そこにクラスファイルを置く

こういう環境構築が難しいから皆、paiza.IO, codepad などで、ブラウザから実行する

962:デフォルトの名無しさん
16/11/04 08:55:17.07 hTUXm8GA.net
>>953
ディレクトリ構成を見せてくれ

963:デフォルトの名無しさん
16/11/04 12:13:16.04 0ltYjQIh.net
>>949
CLASSPATH には calcapp.main や calcapp.logics そのものではなく
それらの上のディレクトリを指定するんだぞ。
そしてコンパイルも実行も calcapp.main や calcapp.logics に
降りてはダメなのもわかってるのか?>>954 みたいにするんだぞ。

964:デフォルトの名無しさん
16/11/04 20:13:25.77 9L4bsxNE.net
>>954
わざわざ試していただいてありがとうございます!

>>953
については成功しました

WOKS¥Main2¥hontai¥Main2.java
WOKS¥Main2¥comment¥Zenhan.java/Kouhan.java
という構成でMain2をCLASSPATHでMain2.javaをjavacして成功
JVMの性質を考えると納得できます

しかし同じ構成のCalc
WOKS¥Calc¥calcapp.main¥Calc.java
WOKS¥Calc¥calcapp.logics¥CalcLogic.java
でCalcをCLASSPATHにしてCalc.javaをjavacしても何故かcalcapp.logicsは存在しませんといった状況です

正直練習問題の初めて作ったMain2がうまく動作しなくて確実に動くだろうCalcを動作確認のため作ったらMain2の方だけ実行できて本末転倒状態です

965:デフォルトの名無しさん
16/11/04 20:31:51.14 4SeM2Q5g.net
>>958
.(ドット)はパッケージの区切りを示すものなので、
WOKS\Calc\calcapp\main\Calc.java
WOKS\Calc\calcapp\logics\CalcLogic.java
こうやって
calcappの下にmainとlogicsの階層を作らないといけないよ

966:デフォルトの名無しさん
16/11/05 01:48:38.64 0FZEaghz.net
>>955
に書いてあるページを、読んでからやれ。
ここに書いてある通りにやれ

本を読まずに、やるな

967:デフォルトの名無しさん
16/11/05 04:53:30.02 edcXpxnV.net
>>958
いいか。まず Calc ディレクトリの下に calcapp っていうディレクトリを作れ。
それから calcapp の下に main と logics っていうディレクトリを作れ。
その main の下に Calc.java を置け。logics の下には CalcLogic.java を置け。

で、コマンドプロンプトでカレントディレクトリを Calc ディレクトリに移動した後で、こうする。

javac calcapp\main\Calc.java calcapp\logics\CalcLogic.java

するとそれぞれのソースと同じディレクトリにクラスファイルが作られる。
この時の環境変数 CLASSPATH は Calc ディレクトリになっていてもいいが、なってなくてもいい。
というのは javac ではカレントディレクトリは自動で CLASSPATH に含まれるからだ。

で、実行はそのまま Calc ディレクトリでこうする。

java calcapp.main.Calc

この時もし CLASSPATH に何かがセットされていてそれがカレントディレクトリを含まない
場合はエラーになる。かといって CLASSPATH を一々セットし直すのは面倒だ。
という場合はこうする。

java -cp . calcapp.main.Calc

この -cp で指定している . (ドット) はカレントディレクトリだ。これで CLASSPATH に
カレントディレクトリを指定した上で実行したことになる。またドットの代わりにカレント
ディレクトリの絶対パスを指定しても同じになる。更にそのように絶対パスで指定
するならカレントディレクトリをどこに移動しても実行できる。

968:デフォルトの名無しさん
16/11/05 13:27:53.71 mhverHUI.net
>>961
>>959
>>957
まさに試そうとしたところで丁寧に教えていただきありがとうございます!

実は
>>950
のコメントを頂いたときに似たようなことを試したんですがうまく行かなくて
これこらもう一度試すんですが、calcapp.mainやcalcapp.logicsみたいに"."が入るパッケージ名自体は不正じゃないんですか?
パッケージ名を修正しなかったから失敗したのかと思ったんですが

969:デフォルトの名無しさん
16/11/05 13:32:23.18 0pOl8O7N.net
>>962
パッケージ名が aaa.bbb.ccc だとしたら
ディレクトリー構造が aaa\bbb\ccc になる
パッケージ名のドットを\に置き換えたのがpath

970:デフォルトの名無しさん
16/11/05 15:17:41.43 edcXpxnV.net
おまけ情報

java コマンドで実行するクラスを指定する時は区切りのドットに代わりに / で書くこともできる。
しかし \ はできない。つまり java calcapp.main.Calc で実行できるなら java calcapp/main/Calc でも実行できる。
しかし java calcapp\main\Calc はできない。

これはおそらくSunがJavaを作っていた当初は UNIX (Solaris) 使っていたことの名残だと思う。
(UNIXではディレクトリの区切り文字は / を使う)。

971:デフォルトの名無しさん
16/11/05 15:29:17.38 mhverHUI.net
>>961
>>963
通りました!本当にありがとうございます!

一つだけ疑問が残ってるんですが、Main2プログラムの方はMain2だけを指定、
つまりMain2をCLASSPATHでMain2.javaだけでjavacする事が出来たのに対してCalcの方は
>>961
にあるように javac calcapp\main\Calc.java calcapp\logics\CalcLogic.java
と二つのクラスを指定してjavacしないと通らないのには何か明示的な理由があるんでしょうか?
極端な話プログラムによっては大量のクラスをコンパイル時に指定する必要があるのかという疑問が浮かびます

972:デフォルトの名無しさん
16/11/05 15:56:23.66 yMN3xLAC.net
標準出力へのアンバッファな出力ってどうやればよいですか?

973:965
16/11/05 16:00:02.68 yMN3xLAC.net
自分が考え付くのは、BufferedReaderをバッファサイズ=1でnewする
程度です。

974:デフォルトの名無しさん
16/11/05 17:16:29.78 anO0HCtb.net
>>965
依存してるからだよ。Calcクラス内からCalcLogicを使っているからコンパイラはCalc.javaコンパイル時にCalcLogicクラスのことがわからないとダメだ。
つまり先にCalcLogicがコンパイルされてクラスファイルになっている必要がある。

で、依存関係のあるクラスをCLASSPATHを起点とするディレクトリ以下でコンパイルする時に全て指定した場合はコンパイル順序は自動で考慮してコンパイルしてくれるってこと。
もし依存がないならひとつづつ順序考慮せずにコンパイルすることも可能だ。

ただ場合によっては大量のソースを一度にコンパイルする必要があるわけだが、その場合はコマンドラインに書ききれないならテキストファイルにスペースまたは改行区切りでファイル名を並べて書いておいて javc の引数で @ 付けてそのファイルを指定するという方法が使える。
これはWindows用javcだけの機能かも知れない。昔からDOS用コマンド等でやられてきた方法だ。DOSは引数の文字列制限がとても小さかったからね。
UNIX系OSではそんなこと考えずシェルスクリプトに引数並べちゃえばいいんだけどね(見辛い場合は行末に \ 入れて次の行と繋がってる事にする)。

975:デフォルトの名無しさん
16/11/05 17:20:04.72 anO0HCtb.net
ああ。でもその辺はこの頃は eclipse 使ったりすれば自動で考慮して無駄なくコンパイルしてくれるからあまり考える必要ないと思う。

976:デフォルトの名無しさん
16/11/05 17:23:33.18 Vdk40yXv.net
>>966
バッファせずに出力したいなら
Writer out = new OutputStreamWriter(System.out);
でいいのではと思ったら、そもそもそういう話ではなく、毎回flushを呼ぶ必要がある
URLリンク(ideone.com)

977:デフォルトの名無しさん
16/11/05 18:00:46.58 zg/6JUlg.net
>>966
参考
URLリンク(d.hatena.ne.jp)

978:デフォルトの名無しさん
16/11/06 02:21:03.04 nNdE2u+1.net
こうやってバッファなしを out にセットしちゃえばいいのかな。
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));

979:デフォルトの名無しさん
16/11/06 11:44:21.04 4ZaT28cB.net
System.out.close()しておきながら以降出力されませんとかとぼけてるドジっ子かもな
どのみち実務では利用する機会のないネタだね、いわゆるトリビア

980:966
16/11/06 12:40:21.24 jofbsDf+.net
>>970
ありがとうございます。読ませていただきます。
OutputStreamWriterはnioのcharBufferとbyteBufferでバッファリングしながら
エンコードしているようなので、>>970さんのおっしゃるように駄目でした。

>>972
ありがとうございます!FileOutputStream(FileDescriptor.out)で出来るように
なりました!FileOut~は直接native writeを呼んでいる様でした!

981:デフォルトの名無しさん
16/11/06 19:21:27.22 rNdTzEdK.net
>>968
なるほど依存によってはコンパイル順で指定する必要がある訳ですね
つまりJVMの優先順位次第だけど基本的には全部指定した方が無難そうですね

今回つまづいて皆さんに助言をいただいたおかげでかなりJVMとコマンドプロントについての理解が深まりました。ありがとうございます!
いずれは統合開発環境を使うと思いますがやっぱり基本構造は理解したいのでこのままコマンドプロントでもう少しやってみます

982:デフォルトの名無しさん
16/11/06 20:38:06.30 5/z3Ppl4.net
JAVAはいい人多いな

983:デフォルトの名無しさん
16/11/07 02:12:01.71 LVMUK9Ip.net
ハゲも多いけどな

984:デフォルトの名無しさん
16/11/07 04:50:06.17 4jym6Vde.net
>>976
Javaというかこのスレにね。
C++のスレカオスだよ。

985:デフォルトの名無しさん
16/11/07 13:28:02.93 f+d8GbUt.net
type="hidden"のボタンをクリックする方法はありますか?

986:デフォルトの名無しさん
16/11/07 13:40:01.53 /8UUm0jP.net
type=hiddenはボタンじゃない
URLリンク(www.htmq.com)

987:デフォルトの名無しさん
16/11/08 18:43:02.58 jUCVZHcM.net
>>978
C++は基地外ばっかです

988:デフォルトの名無しさん
16/11/09 20:10:07.13 loi9raWA.net
日付(時刻)を扱うクラスにも習熟しとかないといけませんか?

989:デフォルトの名無しさん
16/11/09 22:31:54.88 f1pFjyzB.net
StringとString[](配列)の違いを教えてください
文字列は複数なので必然的に配列になってしまうような気もするのですが
前者に格納できていれるのでなぜなのかと

990:デフォルトの名無しさん
16/11/09 23:28:39.36 kFU4IgnS.net
>>983
String自体がjava開発者がそういう風に文字を扱えるように作ったクラスの集合体だから
そして頻繁に使うからStringと書くだけでそのクラス集合体を呼び出せるようにちょっと特別扱いした
と後々説明されます

991:デフォルトの名無しさん
16/11/10 00:20:10.42 VI/Gf6Nq.net
ありがとうございます。
他の基本の型とは違う扱いということで理解すればいいのでしょうか。

992:デフォルトの名無しさん
16/11/10 01:19:11.86 mM/8alJk.net
URLリンク(nobuo-create.net)

993:デフォルトの名無しさん
16/11/10 08:47:44.97 vUqiNNag.net
ニート卒業の為にまずオラクルJAVAのシルバー取ろうと思うんだ
会場はわかったんだけど試験日って決まりあるのかな
申し込めばいつでも受けれるって認識で大丈夫?

994:デフォルトの名無しさん
16/11/10 15:17:20.49 yQ+SgR9x.net
>>982
あなたにそれが必要であれば

995:デフォルトの名無しさん
16/11/10 15:31:46.08 yQ+SgR9x.net
>>985
String は一応普通のクラスだ。ただし頻繁に使われることを考慮して初期化などは楽にできるように言語レベルでサポートされている。
それと、CやC++での char * での文字列操作については忘れろ。それとは全く違うものだと思って最初から入門書等をよく読んでどういうものか覚えろ。
表現が似ているからといってわかったつもりになってはいけない。そうするとハマる。

996:デフォルトの名無しさん
16/11/10 21:18:04.76 mM/8alJk.net
このsetterの妥当性検証のif構文について、弾きたい条件をif指定するのは当然として
それ以外をelseで処理してるパターンとif構文外で処理してるパターンがあるのには何か意味があるんですか?
具体的には12行目はelse、19行目、26行目、33行目はelse無し
自分で考えてるときは指定したい条件をifで弾いてそれ以外はelseで処理すると思ってたけど考えてみればifに引っかからなければそのまま下に進むやり方でも結果一緒でならelseいらないじゃんとか思ったり
そもそもここで使い分けてる理由がわからないです
URLリンク(i.imgur.com)

997:デフォルトの名無しさん
16/11/10 21:27:54.75 FNhtM1mh.net
>>990
if で引っ掛かった時に throw で必ずメソッド抜けてしまうやつはelseなしってだけのこと。

998:デフォルトの名無しさん
16/11/10 21:36:52.16 mM/8alJk.net
>>991
なるほど、ifの処理内容の問題だったんですね
スッキリで基礎は勉強できるけどAPIはまだ全然なんでまずAPIを疑うべきでした

999:デフォルトの名無しさん
16/11/11 00:29:13.33 Y+Bz51WV.net
class="" と記述された要素をcssセレクターで抽出出来ますか

1000:デフォルトの名無しさん
16/11/11 00:41:49.70 Y+Bz51WV.net
自己解決

1001:982
16/11/11 00:52:39.32 qy8zOpAk.net
>>988
Javaを仕事で使うのであればやはり必要でしょうか?

1002:デフォルトの名無しさん
16/11/11 09:22:15.80 YwN9JhrQ.net
>>995
仕事の内容によっては細かく全て知る必要がある。

しかしだいたいの仕事では現在住んでる国のlocaleでのローカルタイムの文字列出したり読んだり出来れば良い程度だと思う。
せいぜいこれに3日後は何日かとか、生年月日から計算して今日で何歳何ヵ月かみたいな計算が伴うぐらい。

1003:995
16/11/11 16:58:03.57 qy8zOpAk.net
>>996
ありがとうございました。
参考になりました。

1004:デフォルトの名無しさん
16/11/11 20:26:15.01 zFksT2Ki.net
次スレです

Java入門・初心者質問スレ Part.2 [無断転載禁止]©2ch.net
スレリンク(tech板)

1005:デフォルトの名無しさん
16/11/12 16:53:04.67 KzeRaaZ8.net
うめ

1006:デフォルトの名無しさん
16/11/12 16:53:18.10 KzeRaaZ8.net
1000なら佐々木希のまんまんをクンニし放題

1007:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch