Java入門・初心者質問スレ Part.8
■ このスレッドは過去ログ倉庫に格納されています
Java初心者のためのスレッドです。 ※前スレ Java入門・初心者質問スレ Part.7 http://mevius.5ch.net/test/read.cgi/tech/1515549964/ VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured おお。IPアドレスも表示。 俺は今はスマホだから多分繋ぐたびに変わるけどな。 あ、テザリングで違う端末使ってるからワッチョイも変わったな。 分かる方説明お願いします。。。 <問>以下の実行結果になるように選択しから選びなさい。 【実行結果】 A B public class SuperClass{ public SuperClass(){ System.out.println("A"); } public SuperClass(String val){ System.out.println(String val); }} public class SubClass extends SuperClass{ public SubClass(){ //ここにコードを追加 } public SubClass(String val){ System.out.println(String val); } } public class Main(){ public static void main(String[] args){ new SubClass(); }} A: SubClass("B"); B: this("B"); C: super("B"); D: SuperClass("B") 正解:B ここで疑問なのですが、this("B")は自クラスだけのコンストラクトしか呼び出せない認識です。 親クラスのコンストラクタはどこで呼んでいるのでしょうか。 ググってみた。これとか。 ttps://qiita.com/katolisa/items/438a8d720ea5a60b55c4 >>12 https://docs.oracle.com/javase/specs/jls/se10/html/jls-8.html#jls-8.8.7 If a constructor body does not begin with an explicit constructor invocation and the constructor being declared is not part of the primordial class Object, then the constructor body implicitly begins with a superclass constructor invocation "super();", an invocation of the constructor of its direct superclass that takes no arguments. コンストラクタの呼び出しが明示されてなければ super()が暗黙的に呼ばれますよと public SubClass(String val) { // ここでsuper()が呼ばれる System.out.println(val); } Javaの資格試験の勉強してるなら紫本とか黒本とか 読んだ方がいんじゃないかな 毎回言語仕様調べるの大変でしょ コンストラクタについても丁寧に解説されてるよ インスタンスなのか変数なのか教えてください Soket so=new Soket("so.jp",80); InputStream is=so,getInputStream(); int i=is.read(); isはgetInputStream()メソッドのストリュームを受ける変数ですか? それともNewはしてないけれど、インスタンスなのでしょうか? isは2行目では変数に思えますし、3行目はインスタンスに思えますし、どっちなのでしょうか? >isはgetInputStream()メソッドのストリュームを受ける変数ですか? isはInputStream型の変数です >それともNewはしてないけれど、インスタンスなのでしょうか? InputStreamのインスタンスはisにセットされてます isは変数です >>16 さっそくありがとうございます。 InputStream isでインプット型の変数になって ここでInputStreamのインスタンスがセットされて、 is.read()と記載してinputstreamクラスのread()メソッドが使えるということなのですね ありがとうございました! クラス型変数を宣言すると、元クラスのstaticメソッドが使えるということなのでしょうか? すみません、疑問が深まってしまいました 1 Soket so=new Soket("so.jp",80); 2 InputStream is=so.getInputStream(); 3 int i=is.read(); 1で、スタック領域に、インスタンスsoを表すヒープ領域の参照アドレスを格納し 2で、InputStream型の変数isに割り当てられたヒープ領域に、インスタンスsoのgetInputStream()メソッドの結果であるストリュームを格納し 3で、変数iのヒープ領域に、read()メソッドの結果を格納する(どうして変数isがread()を呼びさせるのか疑問でした) と考えていたのですが [InputStream is」の記載で、InputStreamのインスタンス変数isを生成したということでしょうか? newしなくてもインスタンスを生成してインスタンス変数に格納できるのでしょうか? >>19 呼び出した先のどこかでnewしてる所があって、それが返されてるだけ。 それとstreamはストリームと読むのが元の発音に近いと思う。 >>20 ありがとうございました。 教えてくださったことを意識してコードを読み直してみます。 発音も指摘くださって感謝です。 >InputStream is=so.getInputStream(); so.getInputStream()の中で、 InputStream 型のインスタンスを、作って返しているのだろう そのメソッドの文書を見れば? >>22 ありがとうございます。 インスタンスを戻り値にしてるか調べているのですが まだ解答が得られてません また調べてみます。ありがとうございます。 「java socket getinputstream」で検索すれば? 文書に書いてある Socket クラス getInputStream() メソッド このソケットの入力ストリームを返します InputStream 戻り値の型 >>24 ありがとうございます。 疑問を持ってからリファレンスでgetInputStream()も何度か読んでみたのですが ストリームを返すということで、プリミティブ型の値を返すのかと考えていました。 ストリームはインスタンスではないとしますと、 >>19 の3行目で、is.read();とできるのは、他の場所でインスタンスが生成されているか InputStream型の宣言時に、isにセットされているか、どちらかということなのでしょうか? >>22 >>24 InputStreamを返すということは、InputStreamインスタンスを戻り値としてるということで インスタンスを受けたInputStream型の変数isからInputStreamクラスのメソッドを呼び出せた、ということでしょうか? いろいろ教えてくださってありがとうございます。感謝しています。 >>25 APIドキュメントの java.net.Socket の getInputStream() メソッドでしょ? それならちゃんと InputStream が戻り値の型として書いてあるよ。 質問を装った釣りなんじゃないの? かまって欲しいんだよ Socket.class のここまではたどり着いたけど、ここで挫折。 https://docs.oracle.com/javase/jp/8/docs/api/java/security/AccessController.html public InputStream getInputStream() throws IOException { if (isClosed()) throw new SocketException("Socket is closed"); if (!isConnected()) throw new SocketException("Socket is not connected"); if (isInputShutdown()) throw new SocketException("Socket input is shutdown"); final Socket s = this; InputStream is = null; try { is = AccessController.doPrivileged( new PrivilegedExceptionAction<InputStream>() { public InputStream run() throws IOException { return impl.getInputStream(); } }); } catch (java.security.PrivilegedActionException e) { throw (IOException) e.getException(); } return is; } >>27 ちゃんと読めていなかったです、すみません。 ストリームというのはバイトや文字を一文字ずつ扱うということで プリミティブ値を返すものだと勘違いしていました。 次からはAPIドキュメントをしっかり読みます。ありがとうございました。 >>29 ソース解析しなくてもとにかく InputStream のインスタンスを返すようになってる事はわかるよな。 てかそのメソッドはそれを返すか例外投げるかしかしない。 「java socket getinputstream」で検索すると、 Socket クラスの、getInputStream() メソッドを発見する 戻り値の型が、InputStream だから、次に、InputStream の文章を読む プログラミングとは、こういうサイクルの繰り返し。 プログラムを書くと言うよりは、調べものに追われる、writer に近い Windows7環境です。 コマンドプロンプトでソースファイルをコンパイルしてクラスを実行しようとすると Error: opening registry key ‘Software\JavaSoft\Java Runtime Enviroment’ Error: could not find java.dll Error: Could not find Java SE Runtime Enviroment. と表示されてしまいます。 Windows\System32とWindows\SysWOW64にもjava.exe、java.javaw.exe、javaws.exeが無い状態です。 どのようにしたら実行できるようになりますでしょうか? >>34 コンパイルはできてるの?変だな。コンパイル時にも同じJavaVMが裏で動いていると思うんだが。 >>35 コンパイルまではできているんです googleで色々調べてやってみたり、再インスコもしてみたのですがダメでした。 >>36 java -help は同じエラー? javac -help はエラーにならずヘルプ出る? javaコマンドをフルパス指定して実行してもエラー? >>37 それは試していませんでした 今出先なので帰宅したら試してみます ありがとうございます 下記の3タイプの違いが分かりません。教えてください。 Aのclsは@で生成したインスタンス BのFqcnは@のFQCNのクラス型 としています。 @ Class<?> cls=Class.forname(FQCN); A cls.newInstance(); B Fqcn cls=new Fqcn(); @〜Bは、どれもインスタンスを取得するコードということですが 用法の違いというか、使いどころの違いがあったりするのでしょうか? >>37 遅くなりましたがやはりダメでした 復元とかした方がいいのかもしれませんね 有償化したjavaをこっそり使う事は出来ますか 今さら有償は痛いです >>41 なにか勘違いをしているようですが ・OpenJDKとOracleJDKの統一 ・五月雨アップデートから半年毎に定期アップデートへ切り替え ・長期パッチ対応有償サポートの開始 なので自分でJDKのバージョン管理すれば変わらず使えますよ 要すに使用感はUbuntuとかと同じ感じになります 作るものが思いつかず、数ヶ月おきに何か作ってはまたしばらく何も作らないみたいなのの繰り返しで、上達してる気が全くしない みんな何作ってるの? では君に目標を与えよう。 俺の心を満足させるエロゲを作りなさい。 関連するファイル(.java .txt)をUTF-8(BOMなし)というのに統一しようと思うのだけど何かおもだった弊害はあるでしょうか >>45 全ファイル修正?全部試験し直して検証報告書もお前が書くんだよな? みたいなことを言い出す存在どころか生きている価値すらないクズPLやゴミ上司。 いえ個人でしかやらないのでそう言うのは一切問題はないです >>47 じゃあ君次第だ。君が変換後の状態を気に入るかどうか。ただそれだけ。 >>46 とか >>48 みたいなのが上司だったらやだなあ UTF-8N(BOMなし)だけを使う。 shift-jis は使わない パス・ファイル名には、半角英数字だけを使う。 半角空白も使わない oracleによる有償化でもjavaは現状維持すると思いますか 廃れると思いますか 有償化という言葉だけに惑わされすぎじゃねぇの 今までよりやりやすくなると思うけど サーバーはともかくクライアントをアップデートしないまま放置はヤバすぎる だからこそセキュリティパッチ未適用のJREが蔓延しても大災害にならないようにアプレットとWebStartは削除しといたよテヘペロってことなんだろうけど、 世界トップクラスの企業のやることたしてはあまりにもやり方が杜撰&無責任&悪質すぎる 正真正銘、史上最大規模のランサムウェアだよ >>54 お前のような情弱が居なくなって嬉しいwww 有償化はサーバーサイドにはノーダメージなんですね これから勉強しようと思う者としてクライアントjavaは逆にやりたく無かったので対象が絞られて助かります >>59 54のリンク先に書いてるよ > Enterprise wide, term based, Java SE Subscription model which includes cloud deployment, server, and desktop licensing and support. > Server and Cloud deployments Price $25 per processor per month, Desktop Price $2.50 per user per month, or lower with tiered volume discounts available. 古いバージョンを使い続けたいならデスクトップは$2.5/月・人 OracleはJDK11で完全有償化すると同時に、 いままで泳がせていたOpenJDKを一気に知財争いで一気に駆逐する予測も あるから、OpenJDKを過信しないほうがいい。 >>61 コミュニティがそんなこと許すわけ無いやろw 現実的に考えろよ >>62 コミュニティが許さないといくら言ったところで、 過去に多様な状況が起こされた場合では、確実にコミュニティ側が公開停止して 数年かけて知財侵害コードの除去作業をして再公開みたいな流れになってるよね ものによってはそのまま収束したり。 そうならない保証はないというリスクくらいは認識すべきだな。 Blackdown porting projectの悲劇。 涙なしには語れない。 やっぱjreについては書いてないなーと思って公式いったらjre自体がなくなるみたいだ クライアントjava提供してる側が個別にパッケージして再配布しろってことらしいから使う側は特に意識しなくていいな OpenJDKのサイトもうちょっとやる気出してくれないかね 多次元配列で[][][][][][]と要素数の多すぎるとメモリが足りないみたいなエラーが出るのだけどこれはマシンの性能に依存するのでしょうか また、(おおよその)目安になる計算みたいなのはあるのでしょうか? ヒープメモリだから実行時のパラメータに依存する ーXmxで指定できる 指定しなければ8 MB程度として必要に応じて拡張することもできると言う事でしょうか ありがとうございます androidアプリを開発できるようになるまでに どんな勉強過程が必要でしょうか? すっきり分かるjava(基礎、実践、sql、サーブレット) ↓ java魂 ↓ ... 独学希望です >>77 書籍なんて買うな 一年で使えなくなる Googleの公式サイトの情報だけでいい koltin使え スッキリシリーズと、 実践Javaコーディング作法、2014 Java 最強リファレンス、2014 EFFECTIVE 何々 第2版、2014 Kotlin の太郎本、2016 (広告規制で書き込めない) >>79 >>80 ありがとうございます! 公式サイトも推奨書籍も参考にします! 広告規制?じゃあこれが書けたらもう規制されていないってことになるな。 スッキリわかるJava入門 第2版 (スッキリシリーズ) http://amzn.asia/9g0zliW スッキリわかる Java入門 実践編 第2版 (スッキリシリーズ) http://amzn.asia/alqE1va 実践Javaコーディング作法 プロが知るべき、112の規約と21の心得 http://amzn.asia/23rpAka Java最強リファレンス http://amzn.asia/3aurJOH EFFECTIVE JAVA 第2版 (The Java Series) http://amzn.asia/4YFRoaX Kotlinスタートブック -新しいAndroidプログラミング http://amzn.asia/7IfUpj4 Kotlin Webアプリケーション 新しいサーバサイドプログラミング http://amzn.asia/bD9xF5D 入門的な質問ですいません スッキリ分かるjava入門のサンプルコードなんですが 外側の繰り返しと書いてあるんですが外側の繰り返し(?)というのはjのことであってますか?どっちが外か入門書に書いてないんですけど… それと6行目と8行目はどういう原理で5行目に空白と改行を与えてるのかわかりません教えて下さい; public class Main{ public static void main(String[]args){ for(int i=1;i<10;i++){ for(int j=1;j<10;j++){ System.out.print(i*j); System.out.print(" "); } System.out.println(" "); } } } iが外側ですが、これが入門書に説明がなくて理解できない、という状況が 理解できないので、すいませんがこれ以上は詳しく解説できません。 jが外側と判断したその理由を聞けば、なにをどう勘違いしたらそうなって しまったのかを説明できるかもしれませんが、Javaというより簡単な 日本語の領分かと思います。 え、プログラミング始めたてのときでもどっちが外か内か飲み込めました? どっちの値が先に繰り返しされてるかなんて実行結果見ても分からないですし どちらが外か内か分からなかったです。疑問に持つ所がおかしいんですかね・・・・・・・ 教えてくれてありがとうございます >>83 6行目は改行なしで空白のみ出力。 8行目は空白と改行を出力。 まあしかし8行目は System.out.println();だけでも良い筈なんだけどね。 >>82 少し文章を変えると、Rock54 規制に掛からない 漏れは「書籍名、著者名、出版年」を書いていたら、書き込めなかった。 2, 3文字の短い文字列を、偶然に使っても、規制されることもあるし、たまたまなんだろう MANGO 板で、何回もテストすれば、どの文字列がダメなのか、わかるのだろうが >>83 printf を使って、こうしてみ。 使い方は、printf を参照 for(int i=1;i<4;i++){ for(int j=11;j<14;j++){ System.out.printf("i = %d : j = %d%n", i, j); } } >>83 家の中、家の外。鬼は外、福は内。室内、室外。車内、車外。箱の内側、箱の外側。 箱の中の箱、ループの中のループ。 日本語では、先・後 ≠ 内・外 です。 どちらが先に繰り返しされるかではなく、iループのブロックの内側に(中に) jループのブロックがあるというイメージ。 よってjのループが内側の繰り返し、iのループが外側の繰り返し。 このような構造のループを入れ子になったループ構造、二重構造のループなどという。 6行目はjループの中、8行目はjループの外で実行される。 >>83 追加。 合計、平均値、ソート、探索など簡単なやつでいいのでアルゴリズムも並行して学習 したほうがいいですよ。 配列作成の宣言文はいくつかあるみたいですが どれ使ってもいいんですか?全て覚えないと後々問題抱えたりはしませんか int[] s= new int[5] int[] s =new int[]{1,2,34,4,4,5}; int[]s ={1,2,3,4,5,6,}; とか乗ってますが それぞれ何が省略されているだけなのかと 省略できる仕組みが分かっていれば。 >>92 ありがとうございます ガベージコレクションの説明項でnewで確保された要素は普通の変数じゃないからブロックが終了しても 変数は寿命を迎えないみたいなこと書いてあるんですけど、宣言文とは関係ないことですか? >>93 宣言文でプリミティブか参照型か決まるから、 関係はあるんじゃないかな。 参照型で宣言してスタックに参照があって実体がヒープに インスタンスを持つのがGC対象なのでこれはブロックの終了と 必ずしも連動しない。 >>94 すいません全然分からないです。難しすぎて…。 聞きたかったのはブロック内で宣言した変数はブロックが終わったと同時に消滅しますが newで確保された要素はブロックが終わっても消滅しないみたいなことが入門書に書いてあるので 配列変数の宣言文でnewを使った方がいいのか?って思って質問しました。 >>95 int[] s = new int[]{1,2,3}; int[] s = {1,2,3}; これはどっちも同じだよ コンパイルしたら↓こうなる int[] s = new int[3]; s[0] = 1; s[1] = 2; s[2] = 3; >>95 それ多分要素に入れる値はブロックから抜けても解放されないって説明じゃないかな? >>97 ありがとうございます それのことです。配列の宣言の仕方によってはブロックから抜け出しても変数の値は消滅しないのかなと思ってしまったんですが 関係なかったですか >>98 宣言の仕方は関係ない 配列に入れた値は配列自体が参照し続けるので開放されないってことをその本説明したいのだと思う この辺はJavaのデータがメモリへ値をどう確保するかってのとGCの対象になる値がどういう物か理解する必要がある もし、配列が格納している要素が、primitive じゃないオブジェクトだったら、 配列のスコープを出た所で、配列は消滅するけど、 中に入っていたオブジェクトは消滅しないし、 それらにアクセスする参照だけが無くなっている つまり、メモリリークか? それとも、どこからも参照できないから、その後、 各オブジェクトのGC が呼ばれるのか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる