タグ付けされた質問 「java」

Javaは、元はSun Microsystemsによって開発された、プラットフォームに依存しない高レベルのオブジェクト指向プログラミング言語です。Javaは現在、2010年にSunを購入したOracleが所有しています。

6
クラスメンバーを優先するか、内部メソッド間で引数を渡すか
クラスのprivate部分内に、複数のprivateメソッドで使用される値があると仮定します。人々はこれをクラスのメンバー変数として定義することを好むか、それを各メソッドへの引数として渡すことを好みますか?そしてなぜですか? 一方で、クラスの状態(つまり、メンバー変数)を減らすことは一般に良いことであるという議論を見ることができましたが、クラスのメソッド全体で同じ値が繰り返し使用されている場合、それは理想的ですクラスの状態としての表現の候補。コードが他に何もないとしても見た目にきれいになるようにします。 編集: 提起されたコメント/質問のいくつかを明確にするために、私は定数について話しているのではなく、これは特定のケースに関連するものではなく、他の人に話している仮説にすぎません。 OOPの角度をしばらく無視すると、私が念頭に置いていた特定のユースケースは次のようになりました(擬似コードを簡潔にするために参照によるパスを想定しています) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) つまり、複数の機能に共通する変数がいくつかあるということです-私が念頭に置いていた場合、それは小さな機能の連鎖によるものでした。OOPシステムでは、これらがすべてクラスのメソッドである場合(たとえば、大きなメソッドからメソッドを抽出することによるリファクタリングが原因)、その変数はそれらすべてに渡されるか、クラスメンバーになる可能性があります。

3
Cスタイル言語の論理NOT演算子が「~~」ではなく「!」なのはなぜですか?
二項演算子には、ビット演算子と論理演算子の両方があります。 & bitwise AND | bitwise OR && logical AND || logical OR NOT(単項演算子)の動作は異なります。ビットごとに〜があります!論理的に。 NOTはANDおよびORとは反対の単項演算であると認識していますが、デザイナーがここでシングルがビット単位であり、ダブルが論理的であるという原則から逸脱し、代わりに異なるキャラクターを選んだ理由を考えることはできません。常にオペランド値を返すダブルビット演算のように、間違って読むことができると思います。しかし、それは私にとって本当の問題ではないようです。 行方不明の理由はありますか?
39 java  c#  c++  c 


7
変数のスコープを減らすためだけにブロックを作成するのは理にかなっていますか?
私はJavaでプログラムを書いていますが、ある時点でキーストアのパスワードをロードする必要があります。ただの楽しみのために、私はこれを行うことによって、Javaでパスワードをできるだけ短くしようとしました。 //Some code .... KeyManagerFactory keyManager = KeyManagerFactory.getInstance("SunX509"); Keystore keyStore = KeyStore.getInstance("JKS"); { char[] password = getPassword(); keyStore.load(new FileInputStream(keyStoreLocation), password); keyManager.init(keyStore, password); } ... //Some more code 今、私はこのインスタンスでそれがちょっと馬鹿げていることを知っています。他にもできることがたくさんありますが、それらのほとんどは実際には改善されています(変数をまったく使用できませんでした)。 しかし、私はこれを行うことがそれほど愚かではない場合があるかどうか興味がありました。私が考えることができる他の唯一のことはcount、またはのような一般的な変数名を再利用したい場合ですtempが、良い命名規則と短いメソッドはそれが有用になる可能性が低いことです。 可変スコープを縮小するためだけにブロックを使用することが理にかなっている場合はありますか?
38 java  variables  scope 

2
現代の言語はまだパーサージェネレーターを使用していますか?
これが出てきたとき、私はここウィキペディアで gccコンパイラスイートについて調査していました: GCCはBisonで生成されたLALRパーサーの使用を開始しましたが、徐々に手書きの再帰パーサーに切り替えました。2004年のC ++、および2006年のCおよびObjective-Cの場合。現在、すべてのフロントエンドは手書きの再帰下降パーサーを使用しています。 最後の文で(そしてウィキペディアを信頼する限り)私は間違いなく「C(gcc)、C ++(g ++)、Objective-C、Objective-C ++、Fortran(gfortran)、Java(gcj)、 Ada(GNAT)、Go(gccgo)、Pascal(gpc)、... Mercury、Modula-2、Modula-3、PL / I、D(gdc)、およびVHDL(ghdl)」はすべてフロントエンドであり、パーサージェネレーターを長く使用します。つまり、それらはすべて手書きのパーサーを使用します。 私の質問は、このプラクティスはどこにでもあるのですか?特に、[Python、Swift、Ruby、Java、Scala、ML、Haskell]のxの「xの標準/公式実装には手書きパーサーがありますか」に対する正確な答えを探していますか?(実際、他の言語に関する情報もここで歓迎されています。)掘り下げた後、私は自分でこれを見つけることができると確信しています。しかし、これはコミュニティによって簡単に答えられると確信しています。ありがとう!


9
プログラミングにおけるメモリ管理は無関係な関心事になっていますか?
背景 私は、昔から行ったことのない古い(しかし素晴らしい)サイトであるAlioth Language Shootout(http://benchmarksgame.alioth.debian.org/)を再訪しました。 私は数年前にC / C ++でプログラミングを開始しましたが、それ以来、関与しているプロジェクトの言語の制約のため、ほぼJavaのみで作業を続けてきました。リソース使用量の点でC / C ++に反しました。 実行時間は最悪で、JavaはC / C ++よりも4倍も遅いを実行すると、まだ比較的良好であったが、平均の周りの(または以下)2倍に。Java自体の実装の性質により、これは驚くことではなく、パフォーマンス時間は実際に私が予想したものよりも短かったです。 実際のレンガはメモリ割り当てでした-最悪の場合、Javaが割り当てられました: Cの52倍ものメモリ C ++の25倍以上。 メモリの52倍...絶対に厄介ですよね?... またはそれは?現在、メモリは比較的安価です。 質問: 作業メモリに厳しい制限があるターゲットプラットフォーム(つまり、組み込みシステムなど)に関して話さない場合、今日汎用言語を選択する際にメモリ使用量を考慮する必要がありますか? 第一言語としてScalaへの移行を検討しているからです。私はそれの機能面が非常に好きですが、私が見ることができることから、それはJavaよりもメモリの点でさらに高価です。ただし、メモリは年々速く、安く、豊富になっているようです(少なくとも4GBのDDR3 RAMを持たない消費者のラップトップを見つけることはますます困難になっているようです)。より読みやすいソリューションを迅速に構築できる(おそらく実装上高価な)高レベル言語機能と比較して無関係ですか?

2
ライブラリコードからログを記録する必要がありますか?
Javaライブラリを開発している場合、ライブラリのコード内からログステートメントを発行することをお勧めしますか? ライブラリ内にログを記録すると、デバッグとトラブルシューティングがより透過的になります。ただし、一方で、ロギングステートメントでライブラリコードを散らかすのは好きではありません。考慮すべきパフォーマンスへの影響もありますか?
38 java  logging 

4
Java 1.0の「コア」APIパッケージとは何ですか?
Google v Oracleの事例を読んで、これらの質問に出くわしました(明らかに裁判長から) ... 少なくとも1996年の時点で、以下のことが真実であることに同意しますか? コアJavaアプリケーションプログラミングインターフェイスは次のとおりです。java.lang、java.util、およびjava.io。 Javaプログラミング言語は、上記の3つ以外のメソッド、クラス、またはパッケージを参照または要求していますか? ... ソース:Groklaw 明らかに多くの法的影響がありますが、GoogleとOracleはおそらくいくつかの点で意見が一致せず、私は気にしません。法律は弁護士に任せてください。 ただし、ここには興味深い歴史が少しあると思います。 私の質問は、Javaのバージョン1.0には、(最初の任意のJavaはバージョン1.3に2001の周りにコーディングなかった誰かのように)あるものは外を必要としたjava.lang、java.utilと、java.io有効なJavaプログラムをコンパイルするには? 例として(C#5.0を使用)、awaitキーワードは(特に)に依存しています。コンパイラは、そのクラスなしでは仕様どおりに機能できませんでした。Task<T> GetAwaiter() 同様に、他のパッケージに依存するコアランタイム機能(ClassLoader *など)はありましたか? 私は好奇心から尋ねますが、最小限の実行可能なJava(言語、その周りのすべての法的ビットを無視する言語)に必要なものはまさに興味深いものです。 * ClassLoaderはJava 1.0の機能でさえあると仮定しています。7.0の仕様の一部であり、おそらく以前の多くのバージョンです。
38 java  history 

5
Pythonを学習するJava開発者:頭を包むためにどのような概念が必要ですか?
背景:いくつかのチュートリアルを実行し、いくつかの小さなプロジェクトを作成しました。GoogleとStackOverflowを使用して、すべてが十分に機能しています。 過去数日間に何度か、「何が足りないの?」と思った。-Pythonで書いているので、まだJavaで考えているように感じます。 StackOverflowでのこの質問には、Pythonを学習するために読むべきリソースに関するヒントがたくさんありますが、私はまだPythonに翻訳するための辞書(しゃれなし)を持つJava開発者だと感じています。 私が本当にやりたいことは、私のJavaスキルを失うことなく、Pythonに変装したJavaの代わりにPythonic Pythonを書くことができるように頭をリファクタリングすることです。 だから、私の質問の核心は、Java開発者がPythonicを考えることを学ぶために本当に必要な概念は何ですか?これには、未学習の必要があるものすべてが含まれます。 注:言語の構文についてではなく、言語の概念について質問しています。

4
静的クラスよりも非静的内部クラスを好むのはなぜですか?
この質問は、Javaでネストされたクラスを静的なネストされたクラスにするか、内部のネストされたクラスにするかです。私はこことStack Overflowを検索しましたが、この決定の設計への影響に関する質問は本当に見つかりませんでした。 私が見つけた質問は、静的なクラスと内部のネストされたクラスの違いについて尋ねていることです。ただし、Javaで静的にネストされたクラスを使用する説得力のある理由はまだ見つかりませんでした。匿名クラスを除き、この質問では考慮していません。 静的なネストされたクラスを使用した場合の影響についての私の理解は次のとおりです。 結合の減少:クラスは外部クラスの属性に直接アクセスできないため、一般的に結合が減少します。一般に、結合が少ないということは、コードの品質の向上、テストの容易化、リファクタリングなどを意味します。 シングルClass:クラスローダーは毎回新しいクラスを処理する必要はなく、外側のクラスのオブジェクトを作成します。同じクラスの新しいオブジェクトを何度も取得するだけです。 内部クラスの場合、一般に、人々は外部クラスの属性へのアクセスをプロと考えることがわかります。この直接アクセスは高いカップリングを意味し、ネストされたクラスを別のトップレベルクラスに抽出したい場合は、本質的に向きを変えた後にのみ行うことができるため、デザインの観点からこの点で異なるようにお願いします静的なネストされたクラスに入れます。 したがって、私の質問はこれに帰着します:非静的内部クラスに利用可能な属性アクセスが高い結合につながり、したがってコード品質が低下すると仮定するのは間違っていますか、これから(非匿名)ネストされたクラスが一般的に静的ですか? または言い換えると:ネストされた内部クラスを好む理由は納得できますか?

8
Javaで「this」キーワードを使用するために受け入れられているスタイルは何ですか?
私はPythonやJavascript(およびオブジェクト指向ではない他の言語)の出身であり、Javaの実用的な知識を向上させようとしています。 常にthis現在のインスタンス属性の先頭に追加するのは悪い習慣と見なされますか?書くほうが自然に感じます ... private String foo; public void printFoo() { System.out.println(this.foo); } ... より ... private String foo; public void printFoo() { System.out.println(foo); } ... インスタンス属性とローカル変数を区別するのに役立ちます。 もちろん、Javascriptのような言語では、よりthis多くの関数をネストできるため、常に使用する方が理にかなっています。したがって、ローカル変数はより大きなスコープから取得されます。Javaでは、私が理解している限り、このようなネストは不可能です(内部クラスを除く)。したがって、おそらく大きな問題ではありません。 いずれにせよ、私は使用したいと思いますthis。風変わりではなく、奇妙に感じますか?

12
仲間のプログラマーが最悪のプログラミング手法を使用した
言うのは奇妙に思えますが、職場の仲間のプログラマーは故意にいくつかの悪いプログラミング慣行を意図的に使用しました!説明します。まず、彼は知的な男であり、ほとんどの場合、彼はわかりやすいコードを書いていると言いましょう。 彼は、Javaで書かれたWebアプリケーションプロジェクトにライセンスを実装するよう求められました。Javaなので、本当に必要な場合は、おそらくjarファイルをハックして、内部に記述されたクラスとメソッドの名前を読み取ることができます。この問題に対する彼の解決策は、文字通り、新しいクラスを生成するのではなく、変数とメソッドをわかりにくい名前で不自然に呼び出し、すでに混雑しているクラス内にそれらを植え付けることでした。 彼の正当化は、ハッカーがライセンスチェックをバイパスするために特定のクラスを切り替えたい(したがって、製品の無料コピーを取得したい)場合、どの方法が明らかでない場合、それははるかに困難な時間になるだろうということでしたこれらの特定のタスクを実行します。彼がそれを行って初めて、私は彼に立ち向かったので、良いプログラミングの実践を維持しながら、何らかの難読化ライブラリを購入してそれを行うことができるかもしれないと示唆しました。彼は、その種のソリューションを検索する時間やリソースがなかったと主張しています。 ..私はジレンマに陥ります。Javaで難読化ライブラリを探して、彼の古いコードを修正します(彼のコードを改造するのは少し面倒かもしれません)か、それをそのままにしておきますか?

17
プログラミングスキルに自信を持たせるにはどうすればよいですか?[閉まっている]
プログラミングは私にとって異質ではありません。私は最初にマークアップ(HTML、今は笑わないでください)を12歳のときに始め、13歳のときに少しBASICを使いました(この時点でフローチャート、擬似コードについて多くを知っていました)が、その後、高校での生物学。したがって、C、Javaなどの言語の「実際の」プログラミング知識を逃していました。UG BEのCSを取り上げました(BSに似ていますが、より理論的な方法です)。私は自分でCとC ++を(程度は低いが)学びました(私の教授は完全な痛みであり、クラスはコードジョックでいっぱいでした(学校で既に学んでいたため、クラスに注意を払わず、私のようなより低い定命の者にクラスに注意を払わせてください))、素晴らしい加算または乗算プログラム(今では幼稚園児でさえも) 私の主な問題は、限られたプログラミングスキルに常に不十分で首を絞められ、コードジョックに軽視されていることです(信じられませんが、私はこのサイトに何年も前に出会ったことがありますが、実際に投稿する勇気を築くことができただけです)質問)そして、時にはその無能さをめぐってさえ落ち込んでいます。ほとんどの人は、プログラミングは必ずしも言語ではなく、その人の心の状態と問題/問題を解決するために使用する技術に関するものだと言います。私はそのような感情に同意しますが、そのような「心の状態」を獲得することはできますか?そのような場合、「プログラミング/コーディング」にどのようにアプローチする必要があり、「Zen」を達成するための最も設定された方法と手順がある場合コーディング」。どうすればいいですか?また、ある聖人がこの虐げられた$#!^の一部を指導したいと思っても害はありません。 PS私は自分の時間の価値があると考える人に永遠に感謝し、ボーナスとして彼らの後に出荷する私の最初のソフトウェアの名前を付けます。(私が1つを出荷するようになったら、つまり) TL; DR:「プログラミング/コーディング」を実際に学んだことはありません。私が試みても問題を解決できません。助けて!

6
TDDを使用した複雑なコードの良い例[終了]
大規模な現実の複雑なプロジェクトでTDDを使用する良い例は何でしょうか?これまでに見た例はすべて、本や論文を目的としたおもちゃのプロジェクトです... TDDを多用するオープンソースプロジェクトに名前を付けることはできますか?C ++が望ましいですが、JavaとC#または他の類似言語を読むことができます。
37 java  c#  open-source  c++  tdd 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.