トップページ⇒tech
1002コメント343KB

Java入門・初心者質問スレ [無断転載禁止]©5ch.io

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2016/05/12(木) 05:18:33.40ID:nzHoBPh8
Java初心者のためのスレッドです。
0952デフォルトの名無しさん2016/11/03(木) 23:58:11.81ID:g7gHuu9b
あw
0953デフォルトの名無しさん2016/11/04(金) 00:10:29.41ID:9L4bsxNE
皆さんにアドバイス頂いていろいろやるも通らず…
その外こんなのも駄目で
javaのバージョンが良くないのか自分を疑うべきなのか

http://i.imgur.com/Ehiljd7.jpg
0954デフォルトの名無しさん2016/11/04(金) 00:12:46.15ID:tO492IJ7
と思ったけど
おい普通にいけたぞ

xxx\Calc> C:\Program Files\Java\jdk1.8.0_92\bin\javac" calcapp.main\Calc.java calcapp.logics\CalcLogics.java
0955デフォルトの名無しさん2016/11/04(金) 02:46:44.66ID:A/+Iym3t
スッキリJavaの「複数クラスを用いた開発」の章の最後に書いてある。
クラスローダーの動作原則

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

こういう環境構築が難しいから皆、paiza.IO, codepad などで、ブラウザから実行する
0956デフォルトの名無しさん2016/11/04(金) 08:55:17.07ID:hTUXm8GA
>>953
ディレクトリ構成を見せてくれ
0957デフォルトの名無しさん2016/11/04(金) 12:13:16.04ID:0ltYjQIh
>>949
CLASSPATH には calcapp.main や calcapp.logics そのものではなく
それらの上のディレクトリを指定するんだぞ。
そしてコンパイルも実行も calcapp.main や calcapp.logics に
降りてはダメなのもわかってるのか?>>954 みたいにするんだぞ。
0958デフォルトの名無しさん2016/11/04(金) 20:13:25.77ID:9L4bsxNE
>>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の方だけ実行できて本末転倒状態です
0959デフォルトの名無しさん2016/11/04(金) 20:31:51.14ID:4SeM2Q5g
>>958
.(ドット)はパッケージの区切りを示すものなので、
WOKS\Calc\calcapp\main\Calc.java
WOKS\Calc\calcapp\logics\CalcLogic.java
こうやって
calcappの下にmainとlogicsの階層を作らないといけないよ
0960デフォルトの名無しさん2016/11/05(土) 01:48:38.64ID:0FZEaghz
>>955
に書いてあるページを、読んでからやれ。
ここに書いてある通りにやれ

本を読まずに、やるな
0961デフォルトの名無しさん2016/11/05(土) 04:53:30.02ID:edcXpxnV
>>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 に
カレントディレクトリを指定した上で実行したことになる。またドットの代わりにカレント
ディレクトリの絶対パスを指定しても同じになる。更にそのように絶対パスで指定
するならカレントディレクトリをどこに移動しても実行できる。
0962デフォルトの名無しさん2016/11/05(土) 13:27:53.71ID:mhverHUI
>>961
>>959
>>957
まさに試そうとしたところで丁寧に教えていただきありがとうございます!

実は
>>950
のコメントを頂いたときに似たようなことを試したんですがうまく行かなくて
これこらもう一度試すんですが、calcapp.mainやcalcapp.logicsみたいに"."が入るパッケージ名自体は不正じゃないんですか?
パッケージ名を修正しなかったから失敗したのかと思ったんですが
0963デフォルトの名無しさん2016/11/05(土) 13:32:23.18ID:0pOl8O7N
>>962
パッケージ名が aaa.bbb.ccc だとしたら
ディレクトリー構造が aaa\bbb\ccc になる
パッケージ名のドットを\に置き換えたのがpath
0964デフォルトの名無しさん2016/11/05(土) 15:17:41.43ID:edcXpxnV
おまけ情報

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

これはおそらくSunがJavaを作っていた当初は UNIX (Solaris) 使っていたことの名残だと思う。
(UNIXではディレクトリの区切り文字は / を使う)。
0965デフォルトの名無しさん2016/11/05(土) 15:29:17.38ID:mhverHUI
>>961
>>963
通りました!本当にありがとうございます!

一つだけ疑問が残ってるんですが、Main2プログラムの方はMain2だけを指定、
つまりMain2をCLASSPATHでMain2.javaだけでjavacする事が出来たのに対してCalcの方は
>>961
にあるように javac calcapp\main\Calc.java calcapp\logics\CalcLogic.java
と二つのクラスを指定してjavacしないと通らないのには何か明示的な理由があるんでしょうか?
極端な話プログラムによっては大量のクラスをコンパイル時に指定する必要があるのかという疑問が浮かびます
0966デフォルトの名無しさん2016/11/05(土) 15:56:23.66ID:yMN3xLAC
標準出力へのアンバッファな出力ってどうやればよいですか?
09679652016/11/05(土) 16:00:02.68ID:yMN3xLAC
自分が考え付くのは、BufferedReaderをバッファサイズ=1でnewする
程度です。
0968デフォルトの名無しさん2016/11/05(土) 17:16:29.78ID:anO0HCtb
>>965
依存してるからだよ。Calcクラス内からCalcLogicを使っているからコンパイラはCalc.javaコンパイル時にCalcLogicクラスのことがわからないとダメだ。
つまり先にCalcLogicがコンパイルされてクラスファイルになっている必要がある。

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

ただ場合によっては大量のソースを一度にコンパイルする必要があるわけだが、その場合はコマンドラインに書ききれないならテキストファイルにスペースまたは改行区切りでファイル名を並べて書いておいて javc の引数で @ 付けてそのファイルを指定するという方法が使える。
これはWindows用javcだけの機能かも知れない。昔からDOS用コマンド等でやられてきた方法だ。DOSは引数の文字列制限がとても小さかったからね。
UNIX系OSではそんなこと考えずシェルスクリプトに引数並べちゃえばいいんだけどね(見辛い場合は行末に \ 入れて次の行と繋がってる事にする)。
0969デフォルトの名無しさん2016/11/05(土) 17:20:04.72ID:anO0HCtb
ああ。でもその辺はこの頃は eclipse 使ったりすれば自動で考慮して無駄なくコンパイルしてくれるからあまり考える必要ないと思う。
0970デフォルトの名無しさん2016/11/05(土) 17:23:33.18ID:Vdk40yXv
>>966
バッファせずに出力したいなら
Writer out = new OutputStreamWriter(System.out);
でいいのではと思ったら、そもそもそういう話ではなく、毎回flushを呼ぶ必要がある
http://ideone.com/rHtUIO
0971デフォルトの名無しさん2016/11/05(土) 18:00:46.58ID:zg/6JUlg
>>966
参考
http://d.hatena.ne.jp/Kappuccino/touch/20080731/1217480162
0972デフォルトの名無しさん2016/11/06(日) 02:21:03.04ID:nNdE2u+1
こうやってバッファなしを out にセットしちゃえばいいのかな。
System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
0973デフォルトの名無しさん2016/11/06(日) 11:44:21.04ID:4ZaT28cB
System.out.close()しておきながら以降出力されませんとかとぼけてるドジっ子かもな
どのみち実務では利用する機会のないネタだね、いわゆるトリビア
09749662016/11/06(日) 12:40:21.24ID:jofbsDf+
>>970
ありがとうございます。読ませていただきます。
OutputStreamWriterはnioのcharBufferとbyteBufferでバッファリングしながら
エンコードしているようなので、>>970さんのおっしゃるように駄目でした。

>>972
ありがとうございます!FileOutputStream(FileDescriptor.out)で出来るように
なりました!FileOut〜は直接native writeを呼んでいる様でした!
0975デフォルトの名無しさん2016/11/06(日) 19:21:27.22ID:rNdTzEdK
>>968
なるほど依存によってはコンパイル順で指定する必要がある訳ですね
つまりJVMの優先順位次第だけど基本的には全部指定した方が無難そうですね

今回つまづいて皆さんに助言をいただいたおかげでかなりJVMとコマンドプロントについての理解が深まりました。ありがとうございます!
いずれは統合開発環境を使うと思いますがやっぱり基本構造は理解したいのでこのままコマンドプロントでもう少しやってみます
0976デフォルトの名無しさん2016/11/06(日) 20:38:06.30ID:5/z3Ppl4
JAVAはいい人多いな
0977デフォルトの名無しさん2016/11/07(月) 02:12:01.71ID:LVMUK9Ip
ハゲも多いけどな
0978デフォルトの名無しさん2016/11/07(月) 04:50:06.17ID:4jym6Vde
>>976
Javaというかこのスレにね。
C++のスレカオスだよ。
0979デフォルトの名無しさん2016/11/07(月) 13:28:02.93ID:f+d8GbUt
type="hidden"のボタンをクリックする方法はありますか?
0980デフォルトの名無しさん2016/11/07(月) 13:40:01.53ID:/8UUm0jP
type=hiddenはボタンじゃない
http://www.htmq.com/html/input_hidden.shtml
0981デフォルトの名無しさん2016/11/08(火) 18:43:02.58ID:jUCVZHcM
>>978
C++は基地外ばっかです
0982デフォルトの名無しさん2016/11/09(水) 20:10:07.13ID:loi9raWA
日付(時刻)を扱うクラスにも習熟しとかないといけませんか?
0983デフォルトの名無しさん2016/11/09(水) 22:31:54.88ID:f1pFjyzB
StringとString[](配列)の違いを教えてください
文字列は複数なので必然的に配列になってしまうような気もするのですが
前者に格納できていれるのでなぜなのかと
0984デフォルトの名無しさん2016/11/09(水) 23:28:39.36ID:kFU4IgnS
>>983
String自体がjava開発者がそういう風に文字を扱えるように作ったクラスの集合体だから
そして頻繁に使うからStringと書くだけでそのクラス集合体を呼び出せるようにちょっと特別扱いした
と後々説明されます
0985デフォルトの名無しさん2016/11/10(木) 00:20:10.42ID:VI/Gf6Nq
ありがとうございます。
他の基本の型とは違う扱いということで理解すればいいのでしょうか。
0986デフォルトの名無しさん2016/11/10(木) 01:19:11.86ID:mM/8alJk
http://nobuo-create.net/string/
0987デフォルトの名無しさん2016/11/10(木) 08:47:44.97ID:vUqiNNag
ニート卒業の為にまずオラクルJAVAのシルバー取ろうと思うんだ
会場はわかったんだけど試験日って決まりあるのかな
申し込めばいつでも受けれるって認識で大丈夫?
0988デフォルトの名無しさん2016/11/10(木) 15:17:20.49ID:yQ+SgR9x
>>982
あなたにそれが必要であれば
0989デフォルトの名無しさん2016/11/10(木) 15:31:46.08ID:yQ+SgR9x
>>985
String は一応普通のクラスだ。ただし頻繁に使われることを考慮して初期化などは楽にできるように言語レベルでサポートされている。
それと、CやC++での char * での文字列操作については忘れろ。それとは全く違うものだと思って最初から入門書等をよく読んでどういうものか覚えろ。
表現が似ているからといってわかったつもりになってはいけない。そうするとハマる。
0990デフォルトの名無しさん2016/11/10(木) 21:18:04.76ID:mM/8alJk
このsetterの妥当性検証のif構文について、弾きたい条件をif指定するのは当然として
それ以外をelseで処理してるパターンとif構文外で処理してるパターンがあるのには何か意味があるんですか?
具体的には12行目はelse、19行目、26行目、33行目はelse無し
自分で考えてるときは指定したい条件をifで弾いてそれ以外はelseで処理すると思ってたけど考えてみればifに引っかからなければそのまま下に進むやり方でも結果一緒でならelseいらないじゃんとか思ったり
そもそもここで使い分けてる理由がわからないです
http://i.imgur.com/WQ0EiAg.jpg
0991デフォルトの名無しさん2016/11/10(木) 21:27:54.75ID:FNhtM1mh
>>990
if で引っ掛かった時に throw で必ずメソッド抜けてしまうやつはelseなしってだけのこと。
0992デフォルトの名無しさん2016/11/10(木) 21:36:52.16ID:mM/8alJk
>>991
なるほど、ifの処理内容の問題だったんですね
スッキリで基礎は勉強できるけどAPIはまだ全然なんでまずAPIを疑うべきでした
0993デフォルトの名無しさん2016/11/11(金) 00:29:13.33ID:Y+Bz51WV
class="" と記述された要素をcssセレクターで抽出出来ますか
0994デフォルトの名無しさん2016/11/11(金) 00:41:49.70ID:Y+Bz51WV
自己解決
09959822016/11/11(金) 00:52:39.32ID:qy8zOpAk
>>988
Javaを仕事で使うのであればやはり必要でしょうか?
0996デフォルトの名無しさん2016/11/11(金) 09:22:15.80ID:YwN9JhrQ
>>995
仕事の内容によっては細かく全て知る必要がある。

しかしだいたいの仕事では現在住んでる国のlocaleでのローカルタイムの文字列出したり読んだり出来れば良い程度だと思う。
せいぜいこれに3日後は何日かとか、生年月日から計算して今日で何歳何ヵ月かみたいな計算が伴うぐらい。
09979952016/11/11(金) 16:58:03.57ID:qy8zOpAk
>>996
ありがとうございました。
参考になりました。
0998デフォルトの名無しさん2016/11/11(金) 20:26:15.01ID:zFksT2Ki
次スレです

Java入門・初心者質問スレ Part.2 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1478863511/
0999デフォルトの名無しさん2016/11/12(土) 16:53:04.67ID:KzeRaaZ8
うめ
1000デフォルトの名無しさん2016/11/12(土) 16:53:18.10ID:KzeRaaZ8
1000なら佐々木希のまんまんをクンニし放題
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 184日 11時間 34分 45秒
10021002Over 1000Thread
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/

▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。