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 >>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 が呼ばれるのか? そんなん仮に参照カウント方式でやってても循環参照がなければ普通に回収されるだろ…… >>100
どこからも参照されないのならGC対象になるよ
{
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
// ここではaもa[0]もGC対象になる {
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
と
{
Integer[] a = new Integer[1];
a[0] = 1;
}
は、全く同じコードかそうでないか。答えと理由を述べよ。 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>103
a[0] = 1;
はコンパイル時に
a[0] = Integer.valueOf(1);
に変換される
Integerクラスはスタティック変数に
-128〜127までのIntegerオブジェクトをキャッシュしていて
valueOfメソッドは引数がキャッシュの範囲内であればキャッシュしている
オブジェクトを返す。さもなくばnew Integerしたオブジェクトを返す。
new IntegerはJava 9からDeprecatedになっているから
プログラムから直接呼び出さないことが推奨される。
a[0] = new Integer(1)よりも
a[0] = Integer.valueOf(1)やa[0] = 1が
良いコードと言えるでしょう。 したがって
{
Integer[] a = new Integer[1];
a[0] = new Integer(1);
}
と
{
Integer[] a = new Integer[1];
a[0] = 1;
}
は全く同じコードとは言えない。
理由はコンパイル時に異なるバイトコードが生成されるからだ。 今Java環境ってどうなってるか知らんが
それ全部実装依存じゃなくて、言語仕様で決まってるの? 言語仕様で縛るような話じゃないし
言語って結局文法だからね ドキュメントも言語仕様とAPIはわけられてるし
一緒にして良いものではないと思う と思いきや、ボクシングにvalueOfが使われるとは書かれてないけど
-128〜127なら同じオブジェクトになるってことは書かれてる
これはもう全部言語仕様と言って良いでしょう!
5.1.7. Boxing Conversion
https://docs.oracle.com/javase/specs/jls/se10/html/jls-5.html#jls-5.1.7 仮に実装依存だとするならば
実装によって異なる可能性が存在するわけであるから
全く同じコードかという命題は偽になる
ゆえに、実装依存であっても偽になり、
実装依存でなくても偽になるわけであるから
恒偽命題と言って良いでしょう! 恒偽命題とは、他の命題の真偽に依存することなく、常に偽になる命題です。
コードAとコードBが全く同じコードになるかという命題が真であると
仮定した場合、それが実装依存ならば偽となり、実装依存でないならば真となる。
ゆえに、実装依存かという命題は他の命題の真偽に依存するわけであるから恒偽命題とは言えないのです。 あなんかすみません、荒らしてるみたいで
全然そういうことやるつもりは無いんですけど
3連休で休息取りまくった結果、脳がフル活動してるっていうか
そういう状況でいわばしかたがないんです 違うなあ、命題という言葉の使い方を間違えてる
全部見なかったことにして欲しい
ID:EqDA6MfF0 <- NG推奨ID 別ファイルにあるクラスやフィールドやメソッドを参照するにはどうすれば良いのでしょうか?
また、継承できるクラス(ファイル)は1つのみですよね
継承の場合はインスタンス化しなくてもそのまま使えるけど、
別ファイルの場合はインスタンス化してからでないと使えない
という認識で合っていますか? 上1行:importして使えばいい。
下4行:貴方にとって継承はオーバーテクノロジ。いったん忘れろ。 >>117
継承していようが親のフィールドを使う場合は
子でもインスタンス化は必須・・・で合っていますか;
ありがとうございました。 「インスタンス化」と「コンストラクタを書くこと」をごっちゃにしていないか? クラスフィールド弄るのにインスタンスは関係ないし。 ではクラスフィールど以外のフィールドでは大正解なわけですね フィールドを「使う」の使い方次第だけど、
getDeclaredFields()から使うなんてのもありなら
クラスフィールド以外でもインスタンスにしなくても「使える」よ。
「クラスフィールど以外のフィールドでは大正解」
みたいな言葉遊びを始めたら、きりないと思うよ。 >>124
メソッド使うのにもインスタンスいるでしょw
にわかですか? ■ このスレッドは過去ログ倉庫に格納されています