Java入門・初心者質問スレ [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/05/12(木) 05:18:33.40ID:nzHoBPh80002デフォルトの名無しさん
2016/05/12(木) 07:04:37.72ID:/eB9RrGz0003デフォルトの名無しさん
2016/05/12(木) 11:54:40.41ID:LTEnCbUtpublic以外の修飾詞って何のためにあるんでしょうか
春からjavaはじめてなるべくせまい範囲でアクセスできるように書いた方がいいと教わったのですが意味がわかりません
とりあえずprivateってかいておいてコンパイルエラーがでるたびにpublicに書き直す必要があって
だったらはじめからpublicってかいておいたほうがprivateの完全上位互換だと思うのです
0004デフォルトの名無しさん
2016/05/12(木) 13:52:26.21ID:zeyNygYOフィールドをクラス外から、アクセスできないようにする(カプセル化)
もし、外からアクセスされて、値を変えられたら、正常に処理できない
外からフィールドにアクセスしたいのなら、そのフィールドに、
getter/setter(アクセッサ)を宣言して、それを通してアクセスする
0005デフォルトの名無しさん
2016/05/12(木) 14:08:00.84ID:LTEnCbUtみたいなコードをかきたいのにわざわざ
obj.setValue(obj,getValue() + 1);
みたいなコードをかかないといけなくなるってことですよね?
>外からアクセスされて
の部分がよくわからないのですが
具体的にどういうケースで問題になるのでしょうか
0006デフォルトの名無しさん
2016/05/12(木) 18:12:02.87ID:zeyNygYOオブジェクト同士・モジュール同士の密結合。
密結合で開発していくと、いずれスパゲティ・泥団子になっていって、修正できなくなっていく
どこかを修正すると、他の部分にバグが生じる。
1か所修正すると、数か所にバグが出るようになる
だからオブジェクトなどをカプセル化して、狭いスコープに封じ込めて、
外からいじれないようにする(疎結合)
つまり、フィールドをprivateにして、外からオブジェクトの状態を変える場合は、
publicのメソッド・アクセッサを通して、アクセスする
0007デフォルトの名無しさん
2016/05/12(木) 18:30:03.02ID:zeyNygYOオブジェクトの中のフィールドを設定することはまずない
もし、obj.a = 1; obj.b = 2; のように、直接フィールドに設定すれば、
フィールドの詳細を理解しなくてはならないから、すごく大変
設定する順序は、先にaに設定してから、bに設定するとか、
そういうことを考えるだけでも、開発はできなくなる
例えば、ファイルを読むのでも、obj.read() とか、
オブジェクトの詳細を知らずに、簡単に使えなければならない
0008デフォルトの名無しさん
2016/05/12(木) 20:01:25.53ID:LTEnCbUtプログラム上便利に短くかけることが運用しやすいとは限らないってことですか…
いまいち実感できないですけど…
0009デフォルトの名無しさん
2016/05/12(木) 21:21:12.65ID:hY0jzmnfフィールドの詳細を知らなくちゃいけないから大変www確かにお前の頭では大変そうだな
0010デフォルトの名無しさん
2016/05/12(木) 21:23:21.11ID:Vmwu/plUC#みたいにプロパティのある言語使ってると、javaは冗長で嫌になるよね
0011デフォルトの名無しさん
2016/05/13(金) 06:59:23.53ID:5RjflIb0getXはpublicにしとくけど、setXはデフォルトにしといて同パッケージ内からしか書けないとか
柔軟に対応できるというメリットもある
0012デフォルトの名無しさん
2016/05/13(金) 15:21:46.75ID:yywl+o9x簡単なように見えても、次に、200行目に修正が入ると、
if(x == 1){
obj.a = 1
}else{
obj.a = 2
}
こういうようにオブジェクト内の詳細が、外側のスコープに、
ソースコードの飛び飛びの場所に出現する
これがオブジェクト内のスコープじゃないのだから、やってられんわw
0013デフォルトの名無しさん
2016/05/14(土) 00:18:07.59ID:MDtr7m89PL/SQLくらいであとそのPLを動かすためのshくらいしかやったことない。
Javaの資料とか見てると、英語の羅列じゃん・・・
一通りの文法覚えたら、メソッドとException関連をじっくり見た方がいいのかな?
0014デフォルトの名無しさん
2016/05/14(土) 08:42:14.37ID:uvV1TjlT0015デフォルトの名無しさん
2016/05/14(土) 09:53:58.19ID:fLeelvLJ大きなシステムを分担して組む時の話だよ
組織が大きくなると担当をしっかり決めて部外者が勝手に触らない
必要なら決められた窓口を通して依頼や調整をする
それと同じことをプログラム内のルールとしても実践するだけ
0016デフォルトの名無しさん
2016/05/14(土) 13:45:29.21ID:5pXvQAwDJavaのお進め図書・情報・url
http://ula.2ch.net/test/read.cgi/echo.2ch.net/tech/1457392971/l50
ここに推薦書が書いてある
0017デフォルトの名無しさん
2016/05/14(土) 14:31:43.29ID:gAeocMbe0018デフォルトの名無しさん
2016/05/17(火) 02:55:12.85ID:op8lS/VFとりあえずsetter(getter)が仲介すると
変数の定義域(値域)が設定出来るってのはあるよね
例えばRGB(r, g, b)で
r=0〜255しかオブジェクト内で想定してないのに外からr =9999とか値を設定されたらオブジェクトがどんな動作するか想定出来ない
setterを噛ませれば引数が0〜255以外の時に値を丸めておいたり出来る
少なくとも外部から値の範囲が汚染されないのは大きい
作る時にオブジェクト内での動作に集中出来る
0019デフォルトの名無しさん
2016/05/17(火) 08:11:51.20ID:+pynX6Ny0020デフォルトの名無しさん
2016/05/18(水) 18:14:51.82ID:Kc9Ol4u0突然見ず知らずの人が使い出したら困るだろ
アクセス修飾子っていうのは見ず知らずの人に機械を触らせないためのルールだよ
見ず知らずの人が機械を動かすときは工場の人(publicなメソッド)にお願いして、機械を動かしてもらう
そうすれば工場の人は勝手に機械をいじられないし、見ず知らずの人は機械の使い方を知らなくても目的が果たせる。
0021デフォルトの名無しさん
2016/05/18(水) 20:56:08.39ID:HhGNLqnc0022デフォルトの名無しさん
2016/05/18(水) 20:58:39.95ID:/QzLYINMつまり忍び込んで勝手に使う
0023デフォルトの名無しさん
2016/05/19(木) 14:42:20.03ID:W+na7P2Uあんま詳しくないけど関数呼び出しのオーバーヘッドは思いの他、軽いらしい
ゲームみたいなのは、また別なのかもしれんが
0024デフォルトの名無しさん
2016/05/20(金) 13:43:38.26ID:l93PzyPZ打ち込んだ段数まで順にピラミッド型に数字並べるのってどうするの?
1
2 2
3 3 3
4 4 4 4
は検索ででるけど
1
2 3
4 5 6
・
・
・
はでない
0025デフォルトの名無しさん
2016/05/20(金) 17:33:39.04ID:L/JKULD40026デフォルトの名無しさん
2016/05/21(土) 10:44:45.47ID:dQoHFKwAhttp://ideone.com/GpApJB
0027デフォルトの名無しさん
2016/05/21(土) 14:05:21.39ID:dQoHFKwAナウい書き方するとこんな感じ
http://ideone.com/r4YieI
0028デフォルトの名無しさん
2016/05/30(月) 01:53:29.89ID:ILfmqIwkナウいが前世紀じゃないかっw
0029デフォルトの名無しさん
2016/06/06(月) 07:59:27.97ID:jYEPRp2Aコンストラクタの項でそのインスタンス型フィールドの値を初期化できる程度しか覚えられてないんですが
こんな程度で先に進んじゃって大丈夫でしょうか?thisもあまりよくわかってないし読み戻したほうがいいのかな
0030デフォルトの名無しさん
2016/06/06(月) 09:15:04.16ID:e+TlXwYN0031デフォルトの名無しさん
2016/06/06(月) 11:58:33.14ID:n0tXPRWo0032デフォルトの名無しさん
2016/06/06(月) 18:22:44.32ID:jYEPRp2A曖昧な記憶でもいいから一回読み切るやり方が正しいんでしょうか?
早く入門レベルを脱したいです
0033デフォルトの名無しさん
2016/06/06(月) 18:37:54.69ID:yI68iStU0034デフォルトの名無しさん
2016/06/06(月) 19:02:01.23ID:/EU6sUkvブロンズの問題集でもやって見れば?
0035デフォルトの名無しさん
2016/06/06(月) 19:44:14.76ID:LbzoRXHIド初心者なら3周してわからないところを潰すくらいでちょうどいいと思うの
0036デフォルトの名無しさん
2016/06/06(月) 20:13:59.73ID:AvO2qKU5受験勉強と違うから色々覚えるのが目的になっちゃダメだと思うよ
自分がやりたい事を最小限の知識で実現するように努力した方がいい
一番大事なのは何をプログラムしたいか、そのためにはどういうプログラムが必要か考える事だと思う
0037デフォルトの名無しさん
2016/06/06(月) 20:40:56.36ID:mpQlVXrLしたければしても良いけど、わからないことに出くわしたらそのたびにそれについて調べるというのを繰り返せば自動的に記憶にも残る。
0038デフォルトの名無しさん
2016/06/07(火) 00:56:55.92ID:41OqMrsx特定の本を信用しても、仕方がない
誰も君に、その本を100%暗記しろなんて頼んでいないし、
もし頼まれたとしても、聞かなければよいだけ
100%理解せずに、読めばいい。
100%理解できないと、先に進めない人をよく見かけるけど、
そういう人は、先には進めない
すべての物事にはリスクがある。
50%ほど理解したら先に進む方が、むしろリスクが少ない
これこそ生来、人間が持っている忘却力なのだ。
自分の脳を通すことで、不必要なものを忘れて、
重要なことだけを覚えて、人生を効率化するようになっている
100%暗記できるような人は、むしろ何が重要なのか、わかっていない
0039デフォルトの名無しさん
2016/06/07(火) 02:24:15.54ID:ip6Cz1PK細かいとこ理解しないで次に進むと凄い気持ち悪い感じが…したんですが、まぁ考えが変わりました。
ありがとうございました。頑張ります
0040デフォルトの名無しさん
2016/06/07(火) 09:38:49.84ID:dPQve5Cg0041デフォルトの名無しさん
2016/06/07(火) 20:23:22.06ID:UCJwx0XGJavaって静的なコンパイル言語で早いと言われているけれど、Eclipseは非常に重いけど理由は?
PhotoshopやIllustratorが何で書かれているかは知らないけれど、あれも非常に重くて遅いけどCとかコンパイル言語で書かれてるんだよね?
本当にJavaとか早いの?
0042デフォルトの名無しさん
2016/06/07(火) 21:06:18.92ID:JBCZTfFCバイトコードインタプリタで実行されてる
cよか遥かに遅いしCADとか画像処理みたいのはJAVAだけじゃキツいじゃろね
そういう事を単独でさせる為の言語じゃない
新調したPCだとeclipseは重くないなぁ
それほど重い処理も無さそうだけど
逆にこんだけ拡張性のあるもんが分かりやすく書けるのは凄いと思うんだが
0043デフォルトの名無しさん
2016/06/07(火) 21:20:13.75ID:FPF8u3mi0044デフォルトの名無しさん
2016/06/07(火) 21:31:55.39ID:vZWlpmFJJava自体、環境次第でJITの動きも変わってくるから一概に遅いとは言えないわ
そもそもどのプログラムもそうだけどコードが糞ならどの言語でも遅くなる。
そもそも話の限り>>41のスペックが貧弱なだけな気がする
0045デフォルトの名無しさん
2016/06/07(火) 21:48:39.39ID:UCJwx0XGありがと
自分はLLをずっとやってて、最近JavaやGoを使い始めたんだけど、
簡単なコードのコンパイル(javacやgo run)だけで時間かかる(数秒、または数十秒)んで、何故これが早いと言われるのかなと思ったもので
>>44
重いは表現が間違ってたかも
WindowsXPとか昔のパソコンで使ってた時は本当に重かったけれど
でも遅いのは確かだと思う
スペックは、自作Linux, CPU: corei3, Memory: 8DB
ノートの場合はCPU: corei5
0046デフォルトの名無しさん
2016/06/07(火) 22:53:35.57ID:NeAadZdx0047デフォルトの名無しさん
2016/06/07(火) 23:10:24.79ID:Izwt65pO0048デフォルトの名無しさん
2016/06/08(水) 00:08:40.70ID:ZBwXDrqR9でjshell搭載予定らしいが全裸待機っていうのもどうかと思うしな
0049デフォルトの名無しさん
2016/06/08(水) 05:54:07.00ID:E3Y0fydP画像系は、多くのメモリを使う。
各プロセスの使用メモリをチェックすれば?
Eclipse, Gradle なんかも、速くコンパイルをするなら、
JVMを起動しっ放しにすればよいけど(常駐化)、その分、メモリを使ってしまう
Javaが遅いのは、I/O処理。
50年も最適化を研究しているから、CPUセントリックな処理は、Cよりも速い
Rubyでも、JRubyだと、10万回〜100万回のループ時間が、0.3秒ぐらいで同じ。
1千万回(1秒)以上では、CRubyよりも速くなる
つまりJRubyでは、この回数分ループすると、機械語に置き換えたり、
分岐予測を使ったり、さらなる最適化をする
0050デフォルトの名無しさん
2016/06/08(水) 07:12:18.25ID:Ko7KPTTd0051デフォルトの名無しさん
2016/06/08(水) 12:43:12.18ID:dkuXgh3bIOは使い物にならないくらい遅いけど
0052デフォルトの名無しさん
2016/06/08(水) 16:42:46.58ID:BCgime2Achannelなにそれやjava8のstreamもなにそれのひとをしばしば見かけるわ
初心者向けサイトが未だにstream使ってるところが多いからそのままnio知らずにやってんだろうなぁって思う
0053デフォルトの名無しさん
2016/06/08(水) 16:43:46.23ID:BCgime2A未だにInput/Output Streamを使ってる
0054デフォルトの名無しさん
2016/06/08(水) 17:27:08.74ID:EYWDZbyTそれって何をやらせた時なんだろうね?
0055デフォルトの名無しさん
2016/06/08(水) 18:21:37.35ID:Q4ck869Aだが、Javaのバーチャルマシンを開発した本人によると、
それはバグのせいであったとさ。普通行われているベンチマークの
測定の仕方には問題があって、大勢がそうした「誤ったやり方」を
していたおかげでJavaの方が速いと言われていたのだが、
ちゃんとした測定をやるとCの方が速くてJavaは遅かったという
常識的な結論に至るのだよ。開発者自身が認めているんだから
そうなんだろ。
Cの20倍速いというのはその「間違った方法」を踏襲している
昔の論文だよ。
0056デフォルトの名無しさん
2016/06/08(水) 18:44:31.08ID:kX/X1XCcようにしたいんですが、教えてください!やり方は問いません!!
ttp://plsk.net/rocknroll
最初書き込み先まちがえました!
0057デフォルトの名無しさん
2016/06/08(水) 19:14:28.31ID:dkuXgh3bandroidっぽいのでスレチでは?
0058デフォルトの名無しさん
2016/06/08(水) 19:24:24.39ID:kX/X1XCcスレ違いでしたか!申しわけありません。
0059デフォルトの名無しさん
2016/06/08(水) 19:45:25.60ID:bHvDUpho0060デフォルトの名無しさん
2016/06/08(水) 23:16:40.18ID:7xYKaWGHここのHPの内容を一通り見れば理解できるかも ってど素人に都合のいいサイトありますか?
あと僕が理解できなかったとこなんですが、以下のサンプルで
import java.util.***
public class AAA { ←�@
static public void main(String[] args){
AAA aaa = new Arrylist [] ←�A
for ( ){
--なんしかの処理
}
void BBB {
--なんしかの処理
}
} ←�B
�@でクラスAAAを定義してそのクラスの定義途中?で�AのAAAクラスのオブジェクトを作成するって、
何かが僕の中で引っかかって悩んでいます。
�@から�Bの内容を全て包括したのが、�Aであるなら�A以降�Bの処理までは�Aの時点でリードしてないんじゃ・・・
という初歩的なものです //卵が先?親鳥が先?みたいな感じなんですが
うまく説明できずにすみません。こんなので悩むってことは、基礎の基礎からやり直せって事なんですかね?
2週間で納得できた事は、UNIXの xargs と String[] args が似たようなもんだったんだ。というくらい(泣)
0061デフォルトの名無しさん
2016/06/08(水) 23:36:07.42ID:E3Y0fydP巻き上げとは、下の行で定義した関数を、上の行で呼び出せる
f(); → 呼び出せる
f(){ 定義 }
構文解析では、上の行を読んだ際、関数:f → シンボル未解決、のようにいったん処理しておいて、
下の行を読んだ際、関数:f → 定義あり、のようにシンボル表に書き込む
�@円囲み数字のような、Windows固有の環境依存文字を使ってはいけない。
他のOSでは、読めないから
0062デフォルトの名無しさん
2016/06/08(水) 23:46:10.01ID:7xYKaWGH回答ありがとうございます。
関数の巻き上げっすね。。。メモメモ
�@�A�BはMacから記載してしまいました。
今後気をつけます。
0063デフォルトの名無しさん
2016/06/09(木) 01:11:31.02ID:xz94zbOXjava入門でググってでてくる、一番簡単なJava入門というサイトで自分は勉強した
後は入門書読んだり
質問の答え
mainメソッドはstaticでクラスに属するメソッドだから、AAAをインスタンス化しなくても実行できる
クラスはインスタンスの雛型みたいな存在で、staticメソッドやフィールドはその雛型を見て実行される。
ちなみにインスタンス化は、クラスのコピーをメモリに作ること
このサンプル、どこから見つけたか知らないけど、突っ込みどころ多すぎる
このサンプルの情報源は使わない方がいいかも
継承関係の無い型でインスタンス化してるし、インスタンス化の最後は()
ArrayListの間違え?ならジェネリクスの型指定も推奨される
void BBBはメソッド?
メソッドなら()が抜けてる上に、メソッドの中にメソッドを書いている謎
インナークラスでも無さそうだし
0064デフォルトの名無しさん
2016/06/09(木) 12:31:33.58ID:863pratv丸で囲った数字はUnicodeに定義されているし元のエンコードであるWindows-31j(またはcp932)も今ではWindows固有のものではなくなっている。
0065デフォルトの名無しさん
2016/06/09(木) 12:34:01.10ID:58zVJbW4おじいちゃんなんだよきっと
0066デフォルトの名無しさん
2016/06/09(木) 12:37:23.87ID:CSH5zx3Aクライアント(とブラウザ)が該当フォントをサポートしてるかどうかだろう
0067デフォルトの名無しさん
2016/06/09(木) 17:46:48.45ID:Ms1oj4bl0068デフォルトの名無しさん
2016/06/10(金) 07:27:25.95ID:o8hFzx97いったいどうプログラミングしたら、そういうバグが出るのか、聞きたいよな?
0069デフォルトの名無しさん
2016/06/10(金) 07:33:35.22ID:FgCN9jAe0070デフォルトの名無しさん
2016/06/10(金) 07:34:27.78ID:FgCN9jAe0071デフォルトの名無しさん
2016/06/10(金) 09:14:37.58ID:YX5Xpu4Pそんなわかりやすいバグあったらとっくに修正してるだろ
0072デフォルトの名無しさん
2016/06/10(金) 09:37:17.37ID:E5hpPV0Kそれは初耳だが、その情報はどこから仕入れたのだ?
0073デフォルトの名無しさん
2016/06/10(金) 11:00:34.52ID:o8hFzx97ダブルクォーテーションの次に、= を付けるだったかな?
0074デフォルトの名無しさん
2016/06/10(金) 11:02:49.19ID:FgCN9jAe0075デフォルトの名無しさん
2016/06/10(金) 11:03:32.71ID:FgCN9jAe0076デフォルトの名無しさん
2016/06/10(金) 12:56:47.75ID:E5hpPV0K0077デフォルトの名無しさん
2016/06/10(金) 17:27:07.43ID:YiBZsNFP0078デフォルトの名無しさん
2016/06/10(金) 17:32:35.64ID:2OxUQDLtスレ民釣れまくってるね
0079デフォルトの名無しさん
2016/06/10(金) 23:51:32.58ID:1F9oZ6BShttp://www.techscore.com/tech/Java/JavaSE/Thread/answer/5-1/
FileCopyExample.java の下記の場所の readerThread.join();は writerTThread.join();かな?と勝手に思って先に読み進めました
writerThread.start();
try {
System.out.println("書き込み開始");
readerThread.join();
System.out.println("書き込み完了");
writerThread.start() で呼ばれるのはWriteImp.java のpublic void run() の{中身}なんですよね?
そう考えると1つ上に書いてある private String text = null; は何か別の意味があるのでしょうか?
public void run() の{中身}しかコールされないのに、なんであんな位置に・・・
こりゃぁ、手強そうと思い、amazonで「スッキリわかるJava入門」ポチりました。
0080デフォルトの名無しさん
2016/06/11(土) 00:47:14.15ID:NyI1yYzNスッキリJavaは、実践編でないとスレッドの話はでてこない、残念
以下回答
WriteImp.javaのフィールドで変数textを宣言しているのは、
run()メソッドとsetText()メソッドの2つのメソッドでtextを使用しているから
setText()はmain()メソッドの中ほどで使われている(下記の部分)
//読み込んだデータを渡す
writer.setText(reader.getText());
main()メソッドの中身の簡単な流れを以下に
WritelmpとReadlampをインスタンス化(writer, reader)
↓
readerのrun()メソッドをスレッドとして実行、join()する
↓
readerのtextの内容をwriterのtextに渡す
writer.setText(reader.getText());
↓
writerのrun()メソッドをスレッドとして実行、join()する
以上
0081デフォルトの名無しさん
2016/06/11(土) 00:52:49.52ID:NyI1yYzN追記
下のreaderThread.join()はwriterThread.join()の間違えたでいいと思う
0082デフォルトの名無しさん
2016/06/11(土) 08:54:03.40ID:mzLyb6AV■ このスレッドは過去ログ倉庫に格納されています