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 そんなん仮に参照カウント方式でやってても循環参照がなければ普通に回収されるだろ…… >>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 にわかですか? >>125 classリテラルでも使ってください。 貴方が理解できるかどうかは知らんが。 >>126 クラスリテラルを使ったらインスタンス化しなくても継承先のフィールド使えるんどすか、それはステキザマスな インスタンスフィールド使うんやったら インスタンス化せなあかんやろ 誰やスタティックフィールドのこと言い出したんわ おしりペンペンや! >>124 言葉遊びしてんのはお前や ええ加減にせえ! Field[] fields = A.class.getFields(); 取り出したFieldの使い方について、 貴方がインスタンス経由で扱うというならそうなんだろう、 としか言いようないな。 使うの定義が狭い貴方なら成り立つ、これでいい? >>133 誰がリフレクションの話してんのや オブジェクト指向を愚弄するな! ほんまお前らしょうもない揚げ足取りでええ加減なことばかり言いやがって、親の顔が見てみたいわ 親のフィールド使うんやったら インスタンス化は必須や、ええなこれで 必須かどうかを聞かれたから、必須ではない、合ってないと 教えてあげただけなのに困ったもんだ┐(´д`)┌ヤレヤレ しかも理解できないときた。 友達のいないキモオタ共がしょうもない知識ひけらかしおって >>137 言葉を切り取るな、文脈を理解せえ アホなマスコミのようなことやりやがって >>136 貴方が己にそれが必須であるという制約を課すのを止めるつもりはない。 炎上学習法は成功したでしょ、これでclose。 >>140 なんの勉強にもならんかったわ アホがなんか言うとるで言うて 俺の教室盛り上がっとるでw やっぱ5chはこんなクズしかおらんわ言うて リフレクションとかアホやろ スタティックフィールドはバカや インスタンスフィールドは賢い 落ち着けw まぁ人間的に言えば文脈から察しろだし プログラマ的に言えば正確に言わないのはNGってことでいいじゃないか 仕事場でそんな質問されたら俺は突っ返すけど あれ?誰かがキレたの? 暑いからな。体には気を付けないとな。 水分取るの忘れずにな。 ID:Op5duy3qM ひさびさの究極のキチガイって感じだなw 生きている価値のない究極のゴミクズw 言ってることは普通なのになんでこんなバカっぽく見えるんだろう? 入門書の例文なんですが5行目はなぜ書かないとエラーになるんですか? あとこの行は添字にiを代入してるですか? public class Main{ public static int[] makeArray(int size){ int[] newArray = new int[size]; for(int i = 0;i < newArray.length;i++){ newArray[i] =i; } return newArray; } public static void main(String args[]){ int array[]=makeArray(3); for(int i : array){ System.out.println(i); } } } >>148 5行目って newArray[i] =i; でしょ 実行すればわかるけど5行目がなくてもエラーにはならない 配列のi番目に値を代入している 後スッキリ分かるjava入門6章の複数クラスによる開発って所は JDKっていうのダウンロードしないと学習できないですか?dokojavaだとエラーがでます・・ >>149 ありがとうございます。 要素に代入してたんですね。もっかい5行目消して実行したら000で出来ました。すいません 配列変数は初期化しなくてもいいんですね >>150 どういうプログラムでなんてエラーが出るのかしら? public class CalcLogic{ public static int tasu(int a,int b){ return (a+b); } public static int hiku(int a,int b){ return (a-b); } } public class Calc{ public static void main(String[]args){ int a =10;int b =2; int total = tasu(a,b); int delta = hiku(a,b); System.out.println("足すと"+total+"引くと"+hiku); } } クラスCalcLogicはpublicであり、ファイルCalcLogic.javaで宣言する必要があります Main.java(1行目) クラスCalcはpublicであり、ファイルCalc.javaで宣言する必要があります Main.java(10行目) シンボルを見つけられません シンボル: メソッド tasu(int,int) 場所: クラス Calc Main.java(13行目) シンボルを見つけられません シンボル: メソッド hiku(int,int) 場所: クラス Calc Main.java(14行目) シンボルを見つけられません シンボル: 変数 hiku 場所: クラス Calc って出ますね…他のコードも同じようなエラーで出来ないですね。 JDKって物をダウンロードしないと6章は飛ばすしかないんですかね CalcLogicをCalcLogic.javaで宣言すればいんじゃないかな dokojavaのタブのところを押すとクラスファイル作れるっしょ そこでCalcLogic.javaを作ればいい Eclipseとか使った方が良いと思うけどね 本持ってないから6章を飛ばしたが良いかはわからん さすがにもうeclipseとかいう糞は忘れていい IntelliJかVSCodeを使おう クラス名・ファイル名を合わせないといけないとか、 パッケージを作ったら、それをフォルダ階層と合わせないといけないとか、 パッケージ化について、色々なルールがある >>156 VSCでインクリメンタルコンパイラ使えるん? >>159 インクリメンタルコンパイルなんかeclipseもIntelliJもやってないぞ Javaコンパイラにそんな機能はない .class単位のインクリメンタルビルドのことならVSCodeも当然やってる デバッグ実行中のエディットコンティニューすら可能 ここに書いておいた https://paiza.io/projects/5G9gtFuq0b7Uu2vL667kfw paiza.io では、ファイル名はMain.java、クラス名はMain にしないと動かない。 また、同一ファイルに、複数のpublic クラスを置けない。 CalcLogic.tasu のように関数名の前に、クラス名も必要 paiza.io では、別ファイルのクラスは、エラーになって読み込めない >>162 eclipseなら文字入力するとリアルタイムにコンパイルエラーがわかるんよ、超便利、超素敵、VSCでもそうなのかなって思っただけ コンパイラの機能じゃないかも アナライザが動いてんのかな VSCでも型が間違ってたらすぐエラーがでる? スペルチェックみたいな感じで それができたら良いよね eclipseを使ってると、プログラムの3分の1はeclipseに書いてもらうって感じだな。 インスタンス名の次にピリオドを入力するととメソッドの一覧が出るので、そこから選ぶだけだし。 自分がものすごくものぐさになった気がするわ。 >>155 ,>>161 dokojavaのクラス変更のタブいじってみましたがダミでした 使うコンパイラによってもルールが違うんですね・ やはりJDKというのをインストールしないとだめみたいですね・・・ サンプルコードまで・・・ありがとうございます APIで提供されてるクラス名とかもな 3文字位打って候補出しちゃうわ >>167 paiza.io, codepad などで、ブラウザを使って、プログラミングすれば? それに一々、動かさなくても理解できれば、検索して何とかなるから十分 一々、動かして確認していると、時間を食う。 最初に、スッキリを3回読んでから、動かした方が手っ取り早い 読むだけなら、20時間で読める。 2回目は5時間、3回目は2時間で読める https://devnote.jp/jdk_windows/index.html の説明を詠みながらJDKを導入しようとしましたが失敗しました setx /M Path "%JAVA_HOME%\bin;%Path%" を入力すると エラー)構文が無効です。既定のオプションは2回より多く使えないみたいなエラーと javac -version といれると操作可能なプログラムまたはバッチファイルとして認識されていませんみたいなエラーが出ます 何回かやり直しましたが同じエラーが出て駄目でした 他にもう少し簡単に環境導入できて似たような機能が使えるお勧めのものはないでしょうか? >>169 プログラミング言語入門で・・・今までいじったこともないので見ただけで覚えるってのはちとハードル高いです APIとか複数クラスは後回しにしてもいいんですかね。アドバイスはありがとうございます >>170 GUIで設定すれば? start C:\Windows\system32\rundll32.exe sysdm.cpl, EditEnvironmentVariables >>173 >(他の環境変数のパス) ;C:\Program Files\Java\jdk1.8.0_101\bin 複数のパスがつながっている場合は、前のパスの後ろに、区切り文字 ; が必要! PowerShell を起動して、以下を入力して、パスを表示してみ。 ひょっとしたら、前のパスとつながっているかも $env:Path.split(";") 他には、ファイルパス・ユーザー名など、 システムに半角英数字以外を使っていて、誤動作しているとか? OS のバージョン・ビット数、エラーメッセージも書いて。 まず正確なエラーメッセージで、検索するのが速い >>173 コントロールパネル開けた?新しい Windows 10 (バージョン 1803) だとスタートの所で右クリックしても コントールパネルは出てこないわけだが。(メニューの中の「Windows システムツール」の中にある)。 JDK10をMacにインストールしようとしたんですが Oracleのダウンロードページが全て404 not foundになっています どこかにミラーはないのでしょうか? Dmgファイルを探してみましたがファイルサイトだと 怪しいアドウェアしかないようです >>174 https://devnote.jp/jdk_windows/index.html ここの3-3の3を実行すると ”エラー:構文が無効です。既定のオプションは'2'回より多く使用することはできません と出ます。 また3-5のjavac -versionを入力すると"avac'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。"と出ます。 他は説明どおりに出来てるんですが・・・ 初めてこういうものを導入するのでPowerShellとかよくわからないです… >>178 構文が間違ってるんだと思うよ "とか省略してない? リンク先のそのまま貼り付けるんやで >>180 一応サイトの方からコピーで全て張ってましたけど駄目でしたね・・・ これがないと読んでる入門書の複数クラス・APIの章が実行できないんですが 飛ばしてオブジェクト指向の章に飛んでも後々支障ないですかね・・・ >>181 もっかいやってみたら? コマンドの構文エラーくらい解決できるっしょ >>178 旗の(スタート)ボタンを右クリックすれば、PowerShell・PowerShell(管理者用)がある。 普通の(管理者用ではない)PowerShellを起動して、以下を入力して、 JAVA_HOME など、関係のある部分を書いて! すべての環境変数を表示する。JAVA_HOME を探して書いて。 ls env: すべての環境変数PATH を表示する。 $env:Path.split(";") 3-3.1 では、普通のコマンドラインプロンプト(cmd)ではなく、管理者用のcmdで設定している。 だから、普通のcmdではエラーになる 3-3.2, 3 では、setx /M と、/M が付いているから、 ユーザー環境変数じゃなくて、システム環境変数に設定している 念の為に、システム環境変数を設定した後に、PC を再起動して。 それと、書き込む時は、名前欄に最初に質問した時の、レス番号を書いて 3-3.2, 3 では、setx /M と、/M が付いているから、 ユーザー環境変数じゃなくて、システム環境変数に設定している コマンドではなく、画面操作でも設定できる エクスプローラーで、PC を右クリックして、プロパティー選択。 システムの詳細設定 > 環境変数 3-3.2 では、システム環境変数に、JAVA_HOME があるかどうかを確認する。 そして「C:\Program Files\Java\jdk-何々」と、 jdk をインストールしたフォルダを正しく、追加か修正すればよい 3-3.3 では、システム環境変数Path を修正して、「%JAVA_HOME%」を追加すればよい。 こうすれば、3-3.2で、JAVA_HOMEに設定した値が、Pathにも設定される 【Windows版】初心者のための!環境変数の基礎とPathの設定方法 https://yukiwet.com/setpath/ 細かくありがとうございます powershellからやったら3-3の3,setx /M Path "%JAVA_HOME%\bin;%Path%"入力で 指定した値は保存できましたが javac -versionと入力すると>>178 と同じエラーです システムから環境変数を覗いたら以下全てありましたが・・・ 足りないものはないと思いますが何故でしょうか C:\ProgramFiles\Java\jdk-10.0.2\ C:\Program Files\Java\jdk-10.0.2\bin %JAVA_HOME%\bin;%Path% >>185 Windowsの画面のメニュのところを右クリックして ファイル名を指定して実行で cmdを実行するっしょ その画面で dir "C:\Program Files\Java\jdk-10.0.2\bin" を実行してjavacが表示されなかったらパスが間違ってる 表示されるならパスが反映されてないだけだから 新たにcmdを実行すればよい Program Files(x86)にインストールされたとかじゃね? >>185 >C:\ProgramFiles\Java\jdk-10.0.2\ >C:\Program Files\Java\jdk-10.0.2\bin ProgramFiles Program Files 半角空白が片方にしかないじゃん。両方に必要 >%JAVA_HOME%\bin;%Path% setx /M Path "%JAVA_HOME%\bin;%Path%"を入力したら、 「%JAVA_HOME%\bin」と表示されているだろ? 後ろに、%Path% は付かないだろ。 %Path%は、すべての環境変数PATH の文字列の事だから、 %JAVA_HOME%\bin を、それらの前に追加したという意味 PowerShellを起動して、以下の2つを入力して、 JAVA_HOME など、関係のある部分を書いて! すべての環境変数を表示する。JAVA_HOME を探して書いて。 ls env: すべての環境変数PATH を表示する。 $env:Path.split(";") >>184 間違って書いたので、修正します。 >3-3.3 では、システム環境変数Path を修正して、「%JAVA_HOME%」を追加すればよい 「%JAVA_HOME%」ではなく「%JAVA_HOME%\bin」です システム環境変数Path の画面で、直接書いた方が速いかも 最終的に、システム環境変数に、%JAVA_HOME% と、 システム環境変数Pathに、%JAVA_HOME%\bin 、1つずつがあるはず インストールが失敗してるのか何度試しても同じ結果でした… 別のpcでまた今度試してみます。ありがとうございました(´Д`) 161さんが挙げてくれたコード使えばブラウザ上でも実行できたのでこれで代用してみます ラジオボタンやチェックボックス、テキストビューなどをデザインしなおすというか カッコいい見た目に作り直したいのですが、どのような勉強をすればいいのでしょか? 参考書やサイトなど教えてくださいませ、よろしくお願いします。 >>190 普通にcss まさかとは思うが今時SwingやJavaFXなんか使ってないよね Swingみたいにawtから継承して色々なのを作れなくはない。 ようするに絵を描いてしまえば良いだけなので。 まあしかし自作するのは面倒くさいのと、そのソフト配布する時に必ずそのライブラリも付加しなければいけなくなり、それにバクがあったらまた自分で配布するとか、色々と面倒なので作る人は少ない。 そもそも醜悪なSwingの見た目を良くしようと思ったらIntelliJレベルまでフルカスタマイズする必要があるから、 どうしてもJavaクライアントでやるなら最初から見た目は諦めるのが一般的だね >>191 ありがとうござます。 javaでcssを使えるようになりたいのですが、おすすめサイトや本を教えてくださいませんか? CSS は、JavaScript のjQuery か、Ruby のNokogiri Selenium WebDriver なら、数言語から使える >>199 javaでgui作りたいのにjsやrubyが必要なのか? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる