Java入門・初心者質問スレ Part.9

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/03/09(土) 23:59:15.92ID:ACok0wnJ
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.8
http://mevius.5ch.net/test/read.cgi/tech/1528370228/
132デフォルトの名無しさん
垢版 |
2019/08/01(木) 20:29:11.30ID:aVYnxNEs
>>131
普通にファイルから読もうとしているだけなので問題ないと思うんだけど。うーん。

ところでそのうまく行ったプログラムは読み書きが別々に動くように書いてあって別々に起動して書くだけ、または読むだけが動くようになってますか?
それとも書いて読むという順序になっている一つのプログラムですか?

というのは、色々検索して探していたらクラスローダの問題と書いてあるページを見つけたからです。
(かといってどうすれば良いかまだよくわからない)。
2019/08/01(木) 21:25:46.03ID:iHxbPEOX
>>132
com.example.test.XMLEncoderTest, XMLDecoderTestそれぞれのmainメソッドで
Stringとintのフィールが1つづつのTestBeanをtest.xmlに書いて読むだけ
動かないわけがないぐらいシンプルなもの

こんなのだったらそちらでも問題なく動くと思うけど、
それが(仮に)動いて、今トラブってるのが動かないのであれば、
XMLDecoderを使う箇所以外のコードか環境が原因じゃない?

#それか単純に間違ったXMLファイルをロードしちゃってるか(以前にテスト用に作ったクラスをXMLEncodeしたファイルとか)
134132
垢版 |
2019/08/02(金) 01:42:46.68ID:4xKDT1Cg
すいません。こちらの問題でした。Kotlin と混在させていて Kotlin 側でやるとダメな結果になってました。Java で同じように作ると問題なく動きました。失礼しました。
135デフォルトの名無しさん
垢版 |
2019/08/14(水) 21:01:00.61ID:k4UWt8la
OpenJDKメインにすれば、
ライセンス料かからないんですか?
2019/08/14(水) 22:00:13.68ID:ART9Vgv/
>>135
OpenJDKならライセンス料はかからない
個人の勉強用なのか会社で業務システム動かすのかとか目的によって選択肢は色々だろうけど

以下のスライドが良くまとめられていると思う(ちょっと長いかもしれないけど)

最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
https://www.slideshare.net/TakahiroYamada3/how-to-choose-the-best-openjdk-distribution-201905
137デフォルトの名無しさん
垢版 |
2019/08/14(水) 22:23:14.84ID:k4UWt8la
いい!
2019/08/15(木) 00:06:19.61ID:wbNX/uYv
>>136
半年毎のアップデート面倒だろ
139デフォルトの名無しさん
垢版 |
2019/08/24(土) 05:21:30.59ID:9pxya9Ba
この資格とったら時給いくら?
セミリタイアして、派遣で働きたい週3ほど。
希望時給は2500円以上です。
140デフォルトの名無しさん
垢版 |
2019/08/24(土) 20:06:03.58ID:5HTqte9i
Oracle Master Platinumくらいないとな
2019/08/24(土) 23:32:22.46ID:v6W8/Gxl
で、結局いくらなの?
個人で趣味程度に開発してアップしてるんだけど
不安になって小鳥に切り替え中
2019/08/29(木) 21:11:06.28ID:aj2mK3E5
スッキリわかるJava入門の第2版って本はまだ有効?
2019/08/30(金) 02:47:21.38ID:JjDABWUq
有効だけど実践編と Servlet までやらないと意味ないよ
Java で何をしたいのかにもよるけど
javadrive のサイトではいけないの?
2019/08/30(金) 03:03:59.15ID:cFfAoNHG
Servlet以外にJavaの意味有るか?
2019/08/30(金) 05:39:27.15ID:lIbkhvzM
>>143,144
ありがとうjavadriveのサイトで頑張ってみる
2019/08/30(金) 15:19:14.06ID:JjDABWUq
近頃は spring までできて一人前らしいが
2019/08/31(土) 02:56:23.70ID:2HqpObEY
OpenJDKなんて不要
AdoptOpenJDKで十分
148デフォルトの名無しさん
垢版 |
2019/08/31(土) 08:00:48.30ID:cAVHGBLQ
おまえだれや
2019/08/31(土) 12:41:17.30ID:VU1TvKMl
結局 spring のメリットは何なの?
コードが複雑になるだけのような気がする
150デフォルトの名無しさん
垢版 |
2019/08/31(土) 13:07:29.21ID:E5RG3LAO
Kotlin もよろしく
2019/08/31(土) 14:25:57.35ID:tr0ocvmw
そこはよろりんで
152デフォルトの名無しさん
垢版 |
2019/08/31(土) 14:26:16.17ID:cytRkna2
>>149
フレームワークであるところ、かな
他にこの規模・機能のものがない
2019/09/07(土) 17:16:04.72ID:x28E9rEB
2次元配列で
int[][] array = new int[8][10];
これで
array[1][10]
array[2][30]
array[3][15]
のように二つ目の要素のサイズをバラバラにしたいのですが
こういうことってできますか?どう記述すればよいのでしょう?
2019/09/07(土) 17:39:16.13ID:x28E9rEB
自己解決しました
2019/09/07(土) 17:39:47.44ID:kl0P3WfA
>>153
int[][] array = new int[8][];
array[1] = new int[10];
array[2] = new int[30];
array[3] = new int[15];
2019/09/07(土) 17:43:51.55ID:x28E9rEB
どうもです
157デフォルトの名無しさん
垢版 |
2019/09/22(日) 17:47:53.42ID:XzkjllAa
>>149
seasar2のような偽物と違って消えないところ
158デフォルトの名無しさん
垢版 |
2019/09/23(月) 18:34:10.83ID:moFSllv1
ttps://pastebin.com/U8wjQzzb
四分木を実装しようとしています。
四角の中に2つ以上モノがある際、その四角を分割してほしいのですが、
その四角を分割せず、べつの場所を分割しています。

QuadTreeのsubdivide()が原因だと思うのですが、
ttps://www.youtube.com/watch?v=OJxEcs0w_kE
を見る限りでは分割方法は正しいようなのです。

QuadTreeのsubdivide()を修正するとしたらどのようにしたら良いでしょうか?
2019/09/23(月) 19:05:58.27ID:NZsx3e2R
qr.x - w → qr.x
qr.y - h → qr.y
じゃね?
160デフォルトの名無しさん
垢版 |
2019/09/23(月) 20:36:04.88ID:moFSllv1
>>159
ありがとうございます。
まだQuadTreeのinsert()が分割すべき四角を分割しなかったりしているので、
どこが間違っているのか考えてみます。
2019/09/30(月) 19:29:28.87ID:JiaaNZda
missing return statementというエラーについて質問させてください

例えばif文でint型の変数iの条件を

10≦i≦20とelseでそれぞれ戻り値を指定するとエラーはでないのですが

10≦i≦20

else ifでi>10 、i<20
という条件にするとエラーになってしまい、ここに適当にelseを追加するとエラーがでなくなります


やってることは一緒で、どちらも全ての場合を網羅できてると思うのですが、これはどうしてなんでしょうか

if文はelseでしめないとダメという文法上の決まりですか?
それとも論理的な誤りがあるのでしょうか?

今一プログラミングの仕組みがわかってません、、、
2019/09/30(月) 19:32:18.74ID:JiaaNZda
すいません
符号が逆でした

else ifのところはi<10、i>20
2019/09/30(月) 19:34:28.78ID:jed1FLcT
コードをそのまま書いてみて
2019/09/30(月) 19:53:42.06ID:JiaaNZda
>>163
今出先でスマホなのでそのままは書けないのですが・・・情報足りなかったらすいません


test(i)

public static String test(int i); {

if (i >= 10 && i <=20) {
return "10≦i≦20";
} else {
return "i<10、またはi >20";
}
}

これだとエラーにならないんですが

test(i)

public static String test(int i); {

if (i >= 10 && i <=20) {
return "10≦i≦20";
} else if (i < 10 || i > 20){
return "i<10、またはi >20";
}
}

これだとmissing return statementとなってしまいます
2019/09/30(月) 20:14:37.87ID:s1CTVBg3
>>164
Javaだと
if (condition1) {
return;
} else if (condition2) {
return;
}
というコードは
if (condition1) {
return;
} else {
if (condition2) {
return;
}
}
と記述したことと同一なんですよ。

で、下側のコードを見れば、condition2がfalseの時にreturnが呼ばれないですよね。
もちろんcondition1とcondition2が排他であれば、
実際にはcondition2が成立しないケースは(condition1で処理されているので)存在しないのですが、
コンパイラはそこまでは見てくれない、ってことです。
2019/09/30(月) 20:20:08.09ID:s1CTVBg3
訂正
「コンパイラはそこまでは見てくれない」はあまり正しくないですね。
言語仕様として、
ifステートメントのブロック内でそのブロックが選択された際の条件が考慮されたりしない
と言ったほうが良いでしょう。
167デフォルトの名無しさん
垢版 |
2019/09/30(月) 21:02:33.67ID:eT2YwU2a
俺だったらわざわざ2個目のif書かずにelse使っちゃうな。もし仮にコンパイルエラーにならなかったとしても無駄だし見辛いしバグの温床になりそうだから。
2019/09/30(月) 22:31:55.68ID:JiaaNZda
>>165-166
詳細に解説いただき、ありがとうございます
帰宅したので回答いただいたことを踏まえて色々と弄ってみたのですが

例えば、

if (condition1) {
System.out.print("true");
} else if (condition2) {
System.out.print("false");
}

このようにした場合はエラーにならなかったので、
今回のエラーの現象はif文がどうこうではなく、returnの問題、
すなわち、(表現が適切でないかもしれませんが)
if文のブロック内の詳細な条件の処理が行われる前に、return文によって、各ケース全てがfalseになる可能性がないことが確認されるために起きるエラーという理解でいいでしょうか?

てっきり外側に書かれている処理が常に先に実行されるものだとばかり思っていましたが、そういうわけではないということでしょうか…
2019/09/30(月) 23:17:31.99ID:s1CTVBg3
>>168
間違っています。
先程の回答では理解されていると思っていたので端折りましたが、
Javaでは戻り値がある通常のメソッドからは常に "return 戻り値" か例外のthrowで抜けなければなりません。


int exOk1() { // OK
return 0;
}
int exOk2() { // OK
throw new RuntimeException();
}
int exNg() { // NG, compile error
// return がない
}
2019/09/30(月) 23:17:48.15ID:s1CTVBg3
これはif文などの条件分岐を伴う全ての可能性があるパスで満たされている必要があります。

int ex1() { // OK
if (condition) {
return 0;
} else {
return 1;
}
}
int ex2() { // OK
if (condition) {
return 0;
}
return 1;
}
int ex3() { // NG, compile error
if (condition) {
return 0;
}
// return がない
}
2019/09/30(月) 23:23:06.84ID:s1CTVBg3
ですので、最初の>>164の後者のString test(int i)の実装でも
メソッドの閉じカッコの手前に
return "";
の一行があればコンパイルは通ります。
オススメはしませんが。
2019/10/01(火) 00:15:55.07ID:LqGEIZr5
>>169-171
なるほど、理解できました!多分だけど・・・
とても勉強になりました!
ありがとうございました
173デフォルトの名無しさん
垢版 |
2019/10/09(水) 00:40:52.63ID:pXAO71yV
safariでも閉じれるようなaタグ作るのに
onClick="window.open('about:blank','_self').close();"
じゃabout:blank開くだけなんですけど、なんでですか?
初心者質問で申し訳ありません。
2019/10/09(水) 02:19:15.94ID:jo1nm3zd
JavaとJavaScriptは一見似てるけど別の言語なので、このスレの対象外です
紛らわしいんじゃ、という苦情は当時のNetscape社へどうぞ
JavaScriptの質問は(この板の)他スレかWeb製作板、Webプログラミング板あたりへどうぞ
2019/10/09(水) 02:51:30.46ID:z4DviLBe
JavaScript(JS) は、web制作管理板のJavaScript のスレへ、書き込んでください!

この板の、JSのスレは、web制作管理板が荒らされたときに、
緊急避難用に立てたもので、今は使われていません
176デフォルトの名無しさん
垢版 |
2019/10/14(月) 15:19:38.66ID:GdF/YAu+
職業訓練校でjava勉強してる自分なんですが、すでにSESで内定もらってます。
でもスキル向上の事考えると自社開発に入りたいのでこのスレで情報共有お願いいます

職業訓練校プログラミング修了後(プログラマー掲示板)
http://itest.5ch.net/test/read.cgi/prog/1571032349/l50
2019/10/14(月) 22:47:32.93ID:8P/N9iXF
これ実行したときにAが1つしか表示されないのは何故ですか?
bのインスタンス生成は新しくSampleのインスタンスを生成することにはならないのですか?
3行目と6行目それぞれでAが表示されるのでは無いのですか?
https://i.imgur.com/O63piVm.jpg
https://i.imgur.com/dkGWlmY.jpg
2019/10/14(月) 23:17:04.66ID:wMZrtyOx
「これ実行」というのは GarbageCollectionTest を実行した時の話ですか?
あなたの理解で正しいです。"A" が2回表示されるはずですよ。
されないとしたらあなたが入力したコードに間違いがあるか、
コード修正後に再コンパイルを忘れているか、
別のクラスを実行しているのでしょう。
2019/10/14(月) 23:38:28.83ID:8P/N9iXF
>>178
ほんとですか!
ありがとうございます!
後で見直してみます…!
認識間違ってなくて良かったです
2019/10/17(木) 13:03:46.73ID:/8o3fN68
実行可能jarファイルをWindowsのエクスプローラーからダブルクリックで起動すると
内部的にはjavawコマンドが実行されるためコンソールに何も表示されないとの事ですが
もし実行可能jarファイルでSystem.out.println()を使用してコンソールになにか表示させたい場合、何か方法はありますか?
できればbatファイルなどは使用せずjarファイル単体でダブルクリックから起動できるようにしたいです
2019/10/17(木) 13:59:30.14ID:msbWP/Fe
swing とかじゃダメなの?
2019/10/17(木) 14:57:24.16ID:LD/T244T
exewrap使えば?
2019/10/20(日) 11:25:18.43ID:O9tNcv03
もすもす、JPanelで線を引くんだが、ボタンやスクロールバーなどの上に線を引けるように出来ませんか?
2019/11/15(金) 05:47:24.59ID:Y3ZHF9D8
質問です
メインメソッドからAクラスをインスタンス化し、その中で更にBクラスをインスタンス化してます
メインメソッドで宣言、代入した変数をBクラス内で使いたいです
今はAクラスのコンストラクタの引数として渡して、更にBクラスのコンストラクタの引数として渡して使っていて、一応動きはするのですが凄くお粗末な気がします
何か他に良いやり方はないのでしょうか?
2019/11/15(金) 09:30:38.23ID:MDhJ3LYt
その変数が何なのかがもう少し具体的にわからないと回答が定まらないんじゃないだろうか
それでいいというケースもあるし、メインで宣言しているのがおかしいというケースもある
変数をコンテキストのようなクラスに集約すれば収まりがよくなるケースもあれば、staticやThreadLocalが向くケースもある
2019/11/16(土) 08:06:20.38ID:0ftlRXKG
>>185
ありがとうございます
GUIアプリケーションを作っていて、ボタンなどのオブジェクトを変数に入れてます
ボタンを押したときにAオブジェクトを精製して処理をするようにしているのですが、
処理の工程に応じて状態を変えたいので、ボタンやラベルをABクラスに持って行きたいという感じです
2019/11/17(日) 14:25:54.63ID:F+mUJMV6
>>186
横からだけど&設計の話は深入りしたくないのだけど、
そー言う場合、AオブジェクトなどにはUI部品の参照を直接渡すのではなくて、
「状態が変化したよ」と通知する先を教える。
(インターフェイスを定義してその型のオブジェクト(メインのクラス自身のインスタンスでも可)を渡す、とか)
で、変更通知を受け取るオブジェクトが、
Aオブジェクトなどから変更通知を受けた際に必要であればUI部品の状態を変化させる、
ってのがおそらくは一般解。
2019/11/17(日) 14:28:23.94ID:F+mUJMV6
こういう設計が望ましい理由は色々あるんだけど(MVCとかPAC etc.でググるよろし)
GUIアプリケーションの好ましい設計パターンだという以外にも
- そもそも(Swingのイベントスレッド以外から)SwingのUI部品の状態などを変える際には
SwingUtilities.invokeLater(...)を使ったりする必要があるけれども、様々な場所で行うのは面倒
- ウィンドウを破棄した際などに、
そのウィンドウ上のUI部品の参照を保持したままのオブジェクトがあったりすると
UI部品のインスタンスがGCで回収されない
- 仮に Swing -> SWT などへの乗り換えとか(あるいはロジックをWebアプリに流用するとか)
する際に、あちこちに Swing への依存が散らばってると大変面倒
とかいう現実的な問題もありますよ。
2019/11/27(水) 13:40:30.89ID:eKMjAvMi
コンストラクタに関しての質問です!

クラスを作成する際にコンストラクタを用意すると、
デフォルトコンストラクタが自動的には用意されなく
なるようですが、
インスタンス生成時に発動するのは、コンストラクタか
デフォルトコンストラクタの片方のみである、
という解釈で問題無いでしょうか?
(両方が発動する事はあり得ない...?)
2019/11/27(水) 14:42:58.29ID:ymKEnJ4Y
>>189
クラスにコンストラクタを明示的に定義しない場合に限り
コンパイラが自動的に生成する引数無しのコンストラクタをデフォルトコンストラクタと呼ぶ
コンストラクタを明示的に定義した場合にはデフォルトコンストラクタは生成されれない

インスタンス生成時はコンストラクタを指定する (発動はしない)
指定されたコンストラクタが別のコンストラクタを呼び出してれば
複数のコンストラクタが呼び出されることはある

もし、明示的に定義した引数無しコンストラクタも含めてデフォルトコンストラクタと呼んでいるなら
一つのインスタンス生成時に引数有りのコンストラクタと引数無しのコンストラクタの両方が呼び出されることはある
2019/11/27(水) 19:38:04.93ID:eKMjAvMi
>>190
了解です。
即レス感謝です、ありがとうございます!
2019/12/01(日) 07:25:23.15ID:31lHsrX5
独学の初心者です。よろしくお願いします
スッキリわかるjavaを読んだ後、ブロンズの黒本読んでいます
頭が悪いのでブロンズから頑張ります。
193デフォルトの名無しさん
垢版 |
2019/12/07(土) 16:45:03.75ID:Ls4Z5fPU
「○秒長押しされました」と表示されるサンプル
この記事を読んで参考にしたのですが
動画を長押しすると動画の内容と同じgif画像?を確認できる機能を実装する事は可能でしょうか?
194デフォルトの名無しさん
垢版 |
2019/12/07(土) 16:47:36.92ID:Ls4Z5fPU
すみません動画じゃなく画像です
195デフォルトの名無しさん
垢版 |
2019/12/07(土) 18:11:14.71ID:mWZs4nzy
キャプチャするタイミングが難しい機能に需要があるのか?
196デフォルトの名無しさん
垢版 |
2019/12/07(土) 19:33:12.07ID:IgndtoHY
>>195
いえ具体的に言うとgifサイトを作ろうと思っています
2019/12/07(土) 22:07:56.91ID:f6AT/JyU
JavaScriptの話ならWeb製作板の関連スレへどうぞ、らしいですよ。
あと「この記事」と書くならURLぐらいは貼ったほうが良いかと思います。
198デフォルトの名無しさん
垢版 |
2019/12/07(土) 22:13:53.91ID:IgndtoHY
>>197
サイトを載せても良かったのですか?始めてきましたのですいません…
javaで聞いてみます
2019/12/07(土) 22:47:33.94ID:/3OJwFPr
JavaScript(JS), Java は異なる言語です!
まず、どちらの言語か確かめろ!

Javaなら、このスレで良いし、
JSなら、この板ではなく、Web製作板の方へ書き込む!
2019/12/08(日) 18:00:47.44ID:I897a0vD
JavaとJavaScriptは両方勉強するように
2019/12/08(日) 18:12:01.45ID:7oRGKglS
Java→Python→HTML→Javascript
この順番であってる?
202デフォルトの名無しさん
垢版 |
2019/12/08(日) 21:27:19.53ID:L49zIdxx
しらん
203デフォルトの名無しさん
垢版 |
2019/12/08(日) 23:03:55.69ID:NjrEGBDe
>>201
何がやりたいの?
2019/12/09(月) 03:30:42.65ID:PdZy7TF4
正しい順番は
VBScript→ActionScript→Delphi→XSL-FOだよ
2019/12/09(月) 06:51:47.98ID:LWYACK6h
>>203
起業したい
206デフォルトの名無しさん
垢版 |
2019/12/09(月) 12:24:39.38ID:CtHj4jqx
どうぞ。遠慮なく。
2019/12/09(月) 17:04:33.97ID:+FpDkG8n
正しい順番は、この順番で読むこと!

スッキリわかる Java入門 第2版、2014
たのしいRuby 第6版、2019/3/19

起業に適する言語は、Ruby 一択!

成功したベンチャー・自社サービス系は、ほとんど、Rails, Sinatra。
GitHub, Twitter, Airbnb, Cookpad, カカクコム, GMOペパボ など

ハーバード大学にも、Rails の講座がある

サーバー側開発では、Ruby → Go
他には、JavaScript, Kotlin, Julia, Elixir
2019/12/09(月) 17:28:30.64ID:7ipbecmp
スッキリ厨w退散汁w
2019/12/09(月) 20:40:53.74ID:OFTzs0Zl
Javaスキルで独立(フリーランス)は厳しいな
PHPかRubyがいいよ

Javaはサラリーマン用の言語やね
2019/12/09(月) 20:51:26.34ID:ZryjKmS+
Ruby で食えるとは思わないのですが…だまされたとおもってやってみようかな?
211207
垢版 |
2019/12/10(火) 09:21:20.62ID:H4kARQqE
Rubyのフリーランス求人・案件情報
https://arma-search.jp/article/ruby-freelance

YouTube のKENTA の動画でもやってる。
web 系では、Python の10倍ぐらいある

Sinatra を使っている企業は、
アップル、BBC、イギリス政府、LinkedIn、Heroku、GitHub、Songbird、スタンフォード大学、レッドハットなど

Herokuは、Sinatraの開発を支援している

上からの順で、年収。
550〜600万円
Python, Kotlin, Ruby, Java

500〜550万円
C, JavaScript, PHP
212デフォルトの名無しさん
垢版 |
2019/12/10(火) 09:46:10.87ID:rfn5dPqX
Kotlin もよろしく
2019/12/12(木) 00:45:44.09ID:q3SJEpa/
まだProgateでJAVA勉強始めたばかりなんだけど、ちょっと違和感があって質問。
メインメソッドで変数のデータ型をきっちり指定してるのに、その後に続くメソッド定義で再度データ型指定するのって必要なの?
「int age」ってさっき指定したじゃん!
「public static void printData(int age〜」って書く度に二度もデータ型書かせんなよ!って思うんだけど。
それともあとあとデータ型を変更するようなことがあんの?
2019/12/12(木) 01:10:19.19ID:n05Ewb3K
>>213
public static void main (String[] args) {
int age = 20;
printAge(age);
}

public static void printAge(int age) {
System.out.println(age);
}

↑こういうこと言ってるんだよね?
メソッド定義にあるint ageと、mainメソッドにあるint ageは別物でたまたま名前が同じだけ
違う名前の変数でもint型ならprintAgeメソッドに渡せる

public static void main (String[] args) {
int age1 = 20;
int age2 = 22;
printAge(age1);
printAge(age2);
}
2019/12/12(木) 01:21:16.21ID:n05Ewb3K
public static void printAge(int age)

このメソッド定義はint型の変数を1つ受け取りますよ、
受け取ったその変数をこのメソッド内ではageという変数名で扱いますよ、
戻り値の型はvoid型(=なにも返さない)ですよ
ってなことを定義している

>二度もデータ型書かせんなよ!って思うんだけど。
こういう疑問を持つのは個人的にスジが良いと思うのでどんどん聞くといいかも
2019/12/12(木) 01:51:48.26ID:q3SJEpa/
>>214
レスありがとうございます
ああなるほど、つまりprintAgeメソッドではメインメソッドのint ageに関連した何かを行うから、
このprintAge内でもとりあえずageという変数名で扱うことにして、見やすくしておこうというわけ・・・なんですよね?
ずっと、なんで変数名だけで理解してくれないんだろう、そういう言語なのかなあと思ってました
2019/12/12(木) 02:38:13.67ID:n05Ewb3K
>>216
mainの中の変数名も、printAgeの引数名も意味のわかりやすい名前にして見やすく(あとで理解しやすく)しておこうというのはその通り

下のようなコードからprint部分をprintAgeメソッドとして抽出する場合は
もとが同じ名前なので渡す変数名とメソッド定義の引数名が同じになることが多いけど
必ずしもそうなるわけじゃない

public static void main (String[] args) {
int age = 20;
System.out.println(age);
}
2019/12/12(木) 02:55:02.44ID:6AtmeJ1B
メソッドの中に書いてあるint ageやString[] argsは引数と言って、厳密には変数とは異なる概念
引数と変数は同じ名前であっても必ず別のモノになる
今回はint型のageという変数の値を、int型のageという引数の値として、いわば代入しているような感じ
2019/12/12(木) 02:55:40.03ID:6AtmeJ1B
変数にはスコープという有効範囲があって、たとえばメソッド内でint xのように宣言した場合、その変数のスコープはそれを宣言したメソッドの中に限られる
隣のメソッドでいきなりxを参照しようとしてもエラーになる
改めてint xのような引数なり変数なりの宣言が必要だし、String xとしても良い
2019/12/12(木) 02:56:27.44ID:6AtmeJ1B
この狭いスコープの何が便利かというと、10万行くらいあるプログラムのどこかでageをint型で宣言されているとき、ある日誰かが他のメソッドでageをPerson型として宣言しても問題ないことにある
2019/12/12(木) 02:58:24.67ID:6AtmeJ1B
>>218
訂正
メソッドの中に書いてある
じゃなくて
メソッド名の次のカッコの中に書いてある
2019/12/12(木) 03:02:10.76ID:q3SJEpa/
>>217
ごっちゃにしてた変数名と引数名の区別がついたおかげで今やっているところのコードは全部理解できました
やっとオブジェクト指向に進めます
これ一発で理解できる人はすごいなあと思う
2019/12/14(土) 19:24:04.56ID:3zIjLAlr
初心者です。よろしくお願いします
ブロンズの黒本で勉強中です

public abstract class B implements A {
// any code
}

これは
「抽象クラスとしてBをもち、BはAを継承している」
という意味で宜しいのでしょうか。
224デフォルトの名無しさん
垢版 |
2019/12/14(土) 19:38:38.25ID:1W9B8xqK
アムロ「アソコにドップの変態が!」
225デフォルトの名無しさん
垢版 |
2019/12/14(土) 19:42:54.47ID:1W9B8xqK
>>223
「このプログラムは〜」のような問題文の文言が省略されているのだろうが、選択肢だけを見ると何を言っているのかわからない日本語。
226デフォルトの名無しさん
垢版 |
2019/12/14(土) 21:00:33.40ID:SgtXLdNQ
もち?
2019/12/14(土) 21:25:20.00ID:3zIjLAlr
>>225
返信ありがとうございます。ブロンズの黒本の問題です。
左側の数字(1.2.3.)は行数です。誤字脱字あるかもしれません。宜しくお願いします

問、次のようなインタフェースやクラスがあるとき、is-a関係を正しく表しているものを選びなさい、2つ選択
1. public interface A{
2. // any cdoe
3. }

1. public abstract class B imolements A {
2. // any code
3. }

1. public class C extends B {
2. // any code
3. }

1. public class D implements A {
2. // any code
3 .}

A. A is-a B
B. C is-a A
C. B is-a A
D. D is-a B
E. B is-a D
F. B is-a C
2019/12/14(土) 21:27:57.68ID:3zIjLAlr
>>225
public abstract class B implements A {
// any code
}

↑ここは
「抽象クラスとしてBをもち、BはAを継承している」という意味で宜しいでしょうか
2019/12/14(土) 21:39:00.99ID:Mmv8Rj84
もち、というのが変
もちだとするとBを持っているのは誰?
近くにhas-a関係の説明があって混乱してる?
Bがあり、とか、Bを定義し、とかならわかる
ほかはだいたい合ってる
正確にはAを継承しているのではなく実装している
2019/12/14(土) 22:21:37.89ID:3zIjLAlr
>>229
有難うございます。私の日本語がおかしいです。
「implemnts→継承」と覚えてしまいました。
「抽象クラスとしてBを定義し、BはAを実装している」ですね
231デフォルトの名無しさん
垢版 |
2019/12/14(土) 22:29:57.19ID:c7QhHveE
is-a関係は型が継承関係にあることを表していて
あるクラスをexntedsで継承するのは継承だし
あるインターフェースをimplementsで実装するのも継承の一種

問題のプログラムは次の関係にある
B ⇒ A
C ⇒ B
D ⇒ A

日本語で表現するなら
・抽象クラスBはインターフェースAを実装している
・クラスCは抽象クラスBを継承している
・クラスDはインターフェースAを実装している
ってところ

選択肢はB, Cが正解

is-a関係は日本語で考えて良いと思う
「AはBである」という場合
「A」を主語と言い
「B」を述語と言うけれども
述語の範囲内に主語が入っていれば論理的に正しい
たとえば、ドラえもんはロボットである、みたいな
ロボットはドラえもんである、は間違い、ペッパーくんかもしれないからね
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況