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

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

2
JavaでStackOverflowErrorをキャッチしても大丈夫ですか?
以前はそうではないと思っていましたが、昨日はそうしなければなりませんでした。Akka(JVMのアクターシステム実装)を使用して非同期ジョブを処理するアプリケーションです。アクターの1人がPDF操作を実行しますが、ライブラリーにはバグがあるため、たまに死にStackOverflowErrorます。 2番目の側面は、JVMの致命的なエラー(StackOverflowErrorなど)がキャッチされた場合、Akkaがアクターシステム全体をシャットダウンするように構成されていることです。 3番目の側面は、このアクターシステムがWebアプリ内に埋め込まれている(WTFのような、レガシー、理由のため)ため、アクターシステムがシャットダウンされても、Webアプリはそうではありません。最終的な効果はStackOverflowError、ジョブ処理アプリケーションで空のWebアプリになることです。 迅速な修正として、StackOverflowErrorアクターシステムのスレッドプールが破棄されないように、スローされているものをキャッチする必要がありました。これは、特にこのようなコンテキストでそのようなエラーをキャッチしてもいいかもしれないと思うようになりましたか?任意のタスクを処理するスレッドプールがある場合 とは異なり、アプリケーションが一貫性のない状態のままOutOfMemoryErrorになることを想像することはできませんStackOverflowError。スタックはこのようなエラーの後にクリアされるため、計算は正常に続行できます。しかし、おそらく重要なものが欠けています。 また、最初にエラーを修正するのはすべてです(実際、数日前にこのアプリでSOEを修正済みです)ある種の状況が発生する可能性があります。 をキャッチするのStackOverflowErrorではなく、JVMプロセスを再起動して、そのジョブを失敗としてマークし、ビジネスを続行する方がよいのはなぜですか? 国営企業を捕まえない理由はありますか?「ベストプラクティス」を除きます。これは、何も言えないあいまいな用語です。

5
Pythonでのプログラミングは、C、C ++、Javaよりも高速ですか?[閉まっている]
プログラマーの間では、より動的で緩やかに型付けされた言語であるほど、プログラマーの生産性は向上すると広く信じられています。Guido van Rossumは1998年にpythonを使用したプログラミングの生産性について書いており、ウェブ上を検索しています。 構文的には、Pythonコードは実行可能な擬似コードのように見えます。Pythonを使用したプログラム開発は、C / C ++を使用した場合の5〜10倍、Javaを使用した場合の3〜5倍の速度です。多くの場合、アプリケーションのプロトタイプは、C / C ++ / Javaコードを作成せずにPythonで作成できます。多くの場合、プロトタイプは十分に機能し、最終製品として提供されるのに十分な性能を発揮し、開発時間を大幅に節約します。また、プロトタイプの一部または全体をC ++またはJavaに翻訳できる場合もあります。Pythonのオブジェクト指向の性質により、翻訳は簡単なプロセスになります。 この問題は科学的に適切に評価されていますか?Pythonでない場合は、おそらくruby、perl、phpなどの兄弟スクリプト言語ですか? 問題を調査するために時間をかけた研究者や専門家の意見でない限り、答えが難しい可能性がある理由の合理化、類推、または説明を探しているわけではありません。 最初にこの質問をskeptics.SEで尋ねましたが、誰かが私もここで質問すべきだと提案しました。

5
TDDの使用を開始します。初心者向けのヒントはありますか?[閉まっている]
私はどのプロジェクトでも自動テストメカニズムを使用したことはなく、多くのことを失っていると感じています。私は自分自身を改善したいので、私はこのように無視してきたいくつかの問題に取り組み始め、SVNに固執する代わりにGitを試す必要があります。 TDDを学ぶ良い方法は何ですか?おそらくEclipseを使用してJavaでプログラムするでしょう。JUnitのことは聞いたことがありますが、他に検討すべき点があるかどうかはわかりません。

7
リンクされたノード構造を不変にする実用的な方法はありますか?
単一リンクリストを作成することにし、内部リンクノード構造を不変にする計画を立てました。 しかし、私は思わぬ障害に遭遇しました。次のリンクされたノード(以前のadd操作から)があるとします。 1 -> 2 -> 3 -> 4 を追加したいと言います5。 これを行うには、ノード4は不変なので、の新しいコピーを作成する必要があります4が、そのnextフィールドをを含む新しいノードに置き換えます5。問題は3、古いものを参照していること4です。追加されていないもの5。今、コピーし3、そのnextフィールドを置き換えて4コピーを参照する必要がありますが、今2は古いものを参照してい3ます... または、言い換えると、追加を行うには、リスト全体をコピーする必要があるようです。 私の質問: 私の考えは正しいですか?構造全体をコピーせずに追加を行う方法はありますか? どうやら「効果的なJava」には推奨事項が含まれています。 クラスを変更可能にする非常に正当な理由がない限り、クラスは不変でなければなりません... これは可変性の良いケースですか? 私はリスト自体について話していないので、これは提案された答えの複製ではないと思います。これは明らかに、インターフェイスに準拠するために変更可能でなければなりません(新しいリストを内部に保持し、getterを介して取得するなどの操作を行わないでください。リストの内部が不変でなければならないかどうかについて話している。


2
JSPをデバッグするにはどうすればよいですか?
プロジェクトのJSPを編集しようとしていますが、サーバーから要求されたときに、JSPのどこかでNullPointerExceptionが発生します。 私のWebサーバー(JBoss)は例外を報告していますが、偽の行番号を教えてくれます。702行目で例外が発生したことが報告されていますが、JSPの長さは146行しかないため、どの行が窒息しているかを特定できません。 JSPのエラーをデバッグするための良いテクニックは何ですか?IDEとしてIntelliJ 9 Ultimateを使用しています。 ありがとう
26 java  ide  debugging  jsp  intellij 

4
なぜC ++とJavaの両方が「参照」の概念を使用しますが、同じ意味では使用しないのですか?
C ++では、関数への参照引数により、関数が参照を他のものに参照させることができます。 int replacement = 23; void changeNumberReference(int& reference) { reference = replacement; } int main() { int i = 1; std::cout << "i=" << i << "\n"; // i = 1; changeNumberReference(i); std::cout << "i=" << i << "\n"; // i = 23; } 同様に、関数への定数参照引数は、参照を変更しようとするとコンパイル時エラーをスローします。 void changeNumberReference(const int& reference) …
26 java  c++  pointers  reference 

6
Javaがパッケージアクセスをデフォルトにしたのはなぜですか?
私がこの質問をしているのは、彼らが非常に正当な理由でそれをし、ほとんどの人がそれを適切に使用していないと信じているからです。しかし、私の理論が本当なら、なぜプライベートアクセス修飾子が含まれているのか分かりません...? デフォルトのアクセスが適切に使用されると、カプセル化を維持しながら、テスト容易性が向上すると考えています。また、プライベートアクセス修飾子を冗長にします。 デフォルトのアクセス修飾子は、他の世界から隠される必要があるメソッドに固有のパッケージを使用することで同じ効果を提供するために使用できます。テストフォルダー内のパッケージは、ソースフォルダーで宣言されているすべてのデフォルトメソッドにアクセスできます。 これが、Javaがパッケージアクセスを「デフォルト」として使用する理由だと思います。しかし、なぜプライベートアクセスも含まれているのか分かりません、有効なユースケースがあると確信しています...

5
インスタンスは、より具体的なタイプの他のインスタンスと同等ですか?
私はこの記事を読みました:Javaで平等メソッドを書く方法。 基本的に、継承をサポートするequals()メソッドのソリューションを提供します。 Point2D twoD = new Point2D(10, 20); Point3D threeD = new Point3D(10, 20, 50); twoD.equals(threeD); // true threeD.equals(twoD); // true しかし、それは良いアイデアですか?これらの2つのインスタンスは同じように見えますが、2つの異なるハッシュコードを持つ場合があります。それは少し間違っていませんか? 代わりにオペランドをキャストすることで、これがよりよく達成されると思います。
25 java  c#  scala  comparison 

2
Java:なぜコレクションはComparatorを受け入れますが、(仮想的な)HasherとEquatorを受け入れませんか?
この問題は、インターフェイスのさまざまな実装があり、特定のコレクションの目的のために、オブジェクトのインターフェイスレベルのビューのみに関心がある場合に最も顕著です。たとえば、次のようなインターフェイスがあるとします。 public interface Person { int getId(); } クラスを実装hashcode()および実装する通常の方法equals()では、equalsメソッドに次のようなコードが含まれます。 if (getClass() != other.getClass()) { return false; } あなたがの実装混ぜるときに問題が発生Person中をHashMap。がHashMapのインターフェイスレベルのビューのみに関心がある場合、Person実装クラスのみが異なる重複が発生する可能性があります。 equals()すべての実装で同じリベラルな方法を使用してこのケースを機能させることはできますが、その後equals()、異なるコンテキストで間違ったことを行うリスクが発生します(Personデータベースレコードに裏付けられた2つのsをバージョン番号と比較するなど)。 私の直感では、平等はクラスごとではなくコレクションごとに定義する必要があると教えられています。順序に依存するコレクションを使用する場合、カスタムComparatorを使用して各コンテキストで正しい順序を選択できます。ハッシュベースのコレクションに類似するものはありません。どうしてこれなの? 明確にするために、この質問は、コレクションの実装を処理するため、「。equals()がJavaのクラスにあるのに、なぜ.compareTo()がインターフェイスにあるのか」とは異なります。compareTo()およびequals()/ hashcode()両方ともコレクションを使用する際の普遍性の問題に苦しんでいます:コレクションごとに異なる比較関数を選ぶことはできません。したがって、この質問の目的上、オブジェクトの継承階層はまったく問題ではありません。重要なのは、比較関数がオブジェクトごとに定義されているか、コレクションごとに定義されているかです。
25 java  collections 

4
Javaが一部のクラスでカプセル化を使用しないのはなぜですか?
私の質問はSystem.inとSystem.outクラスに関連しています(標準ライブラリにあるようなものがあるかもしれません)。何故ですか?それはOOPの悪い習慣ではありませんか?次のように使用しないでください:System.getIn()およびSystem.getOut()?私はいつもこの質問をしてきました。ここで良い答えが見つかることを望みます。

5
共有コーディングパラダイムを使用するという点で、言語Yでプログラムを記述しているように、言語Xで何かを記述するのがなぜ悪いのか[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 しばらく前に、私はC ++で書かれた何かについてのSOの質問をし、代わりに手で問題に答えを得るための、コメントは、私はそれがあることが示された場合でも、私のコーディングスタイル上のすべての大騒ぎWIPのコードの一部そして、ベースケースを実行させたときに、後でクリーンアップするつもりだった。(私は非常に多くの票を集めたので、私はSOの担当者がすでにほぼ最悪であるため、質問を撤回することにしました) なぜ人々は「あなたは初心者だ、自分で性交をする」という厳しいラインを採用するのだろうと思いました。私は、あたかもJavaであるかのようにC ++を書いていると非難されていました。私が理解できない何か、それでも私を困惑させます。 私は、間隔を置いてではあるが、何年もの間、かなりの数のOOP言語でプログラミングを行ってきました。使用可能なライブラリと、手元のジョブに最適な実行環境の観点から、使用する言語を選択します。私はOOPコードにデザインパターンを採用していますが、パターンの使用は適切であり、オブジェクト指向では賢明であると確信しています。私はOOPツールボックスを理解していますが、コーディングの知恵を示すためにきちんとしたトリックを使用するのではなく、本当に必要だと思うときにのみツールを使用することを選択します。(私が知っているのは一流ではありませんが、n00bレベルでもないと思います)。 1行書く前にコードを設計します。テストを定義するために、特定のクラスの目標と、クラスが順守しなければならないテスト基準をリストします。シーケンス図を作成してコードを書く方が簡単なので、インターフェイスが明らかになった後にテストを書くことにしました。 質問で投稿したコードの一部で、スマートポインターを使用する代わりに、ポインターを使用していることを認めなければなりません。できる限りRAIIを使用しています。適切なRAIIとは、nullpointersに対する保護を意味しますが、徐々に作業を進めます。それは進行中の作業であり、後でクリーンアップするつもりでした。この働き方は強く非難されました。 私の見解では、基本ケースが実行可能な思考方法であるかどうかを確認できるように、最初に実際の例を用意する必要があります。また、ベースケースが証明された後、コードのクリーンアップはアジャイルのリファクタリングフェーズの典型的なことだと思います。私はゆっくりとCxx標準を取得していますが、実稼働コードでまだ習得していない概念を使用するリスクを負うのではなく、理解しているものを使用することを好みます。たまに新しいものを試すこともありますが、通常はその目的のために、私が脇に置いているプレイプロジェクトでやっています。 [編集]質問を始める前に、gnatの提案[1]が検索に表示されなかったことを明確にしたいと思います。ただし、彼の提案は質問の1つの側面をカバーしていますが、彼がリンクした質問は私の質問の核心ではなく、その一部にすぎません。私の質問は、自分のコーディングスタイルに対する応答と、さまざまなコーディングスタイルと(見かけの)レベルのスキルを処理する専門的な側面についてです。SOについての以前の質問と、それが適切な事例としての回答です。[/編集] 質問は次のとおりです。あなたのコーディングスタイルを使用していない人をsc笑するのはなぜですか。 手元にある問題/下位区分は次のとおりです。 リファクタリングにより後で堅牢になった場合、プロトタイプの状況でエラーが発生しやすいコードを使用するのはなぜプログラミングの悪い習慣になるのでしょうか? C ++で書かれたプログラムは、Javaで書かれたようにどのようにできますか?何が悪いプログラムになっているのですか(現在のスタイルの意図と改善する予定の作業を示したと考えていますか?) 特定のプログラミングパラダイム(たとえば、OOP / DP)で使用される構造を使用することを選択した場合、どのように悪い専門家になりますか? [1] 高速でバグのあるものを開発し、エラーを修正するか、コードの各行に注意して遅くしますか?

5
Tell Do n't AskとCommand Query Separationの選択方法
Tell Do n't Askの原則は次のとおりです。 オブジェクトに何をしたいかを伝えるよう努力する必要があります。彼らに彼らの状態についての質問をしないで、決定を下して、そして、彼らに何をすべきかを彼らに話します。 問題は、呼び出し元として、呼び出されたオブジェクトの状態に基づいて決定を下すべきではないということです。その結果、オブジェクトの状態が変更されます。実装しているロジックは、おそらく呼び出されたオブジェクトの責任であり、あなたの責任ではありません。オブジェクトの外側で決定を下すと、そのカプセル化に違反します。 「聞かないで」の簡単な例は Widget w = ...; if (w.getParent() != null) { Panel parent = w.getParent(); parent.remove(w); } tellバージョンは... Widget w = ...; w.removeFromParent(); しかし、removeFromParentメソッドからの結果を知る必要がある場合はどうでしょうか?私の最初の反応は、removeFromParentを変更して、親が削除されたかどうかを示すブール値を返すことでした。 しかし、私はこれをしないと言うコマンドクエリ分離パターンに出くわしました。 すべてのメソッドは、アクションを実行するコマンド、または呼び出し側にデータを返すクエリのいずれかである必要がありますが、両方ではないことを示しています。言い換えれば、質問をしても答えは変わらないはずです。より正式には、メソッドは参照的に透明であり、したがって副作用がない場合にのみ値を返す必要があります。 これら2つは本当に対立しているのですか?どうすれば2つを選択できますか?これについては、Pragmatic ProgrammerまたはBertrand Meyerを使用しますか?
25 java  coding 

17
今日の学生にリーチするための入門コースの良い課題は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 6年前に閉鎖されました。 Javaを使用したプログラミングコースの紹介を定期的に教えています。生徒たちに興味を持たせたり、面白く見つけたりできる刺激的な課題を与えたいです。少なくとも、理にかなっていて、内部にまとまりのある割り当てが必要です(たとえば、一部の非常に悪いプログラミング演習は、最新のプログラミング構成を使用する必要があるために不自然に思えます)。 あなたのスコープのアイデアを与えるために、ここで覆われているものです。 割り当てはJavaで行う必要があり、外部ライブラリを使用して実行できますが、完全なフレームワークではなく、単純なAPIである必要があります 変数、プリミティブ、および文字列 コンソール入出力 if、for、while 算術演算子と論理演算子 線と形状の描画を備えたシンプルなグラフィック 静的メソッド 一次元配列 生徒は高度なトピックに進みません(たとえば、再帰なし、継承に重点を置きません)。したがって、私は複雑なプロジェクトを探しているわけではありません。「それらにCコンパイラを作成してもらいます。5歳のときにやったので、それが唯一の学習方法でした!」 スコープよりも高度なアイデアがある場合は、これではなく、以下にリンクされている「挑戦的な」質問に投稿してください。 代わりに、私が探しているのは、短いプログラムで達成できる興味深いアイデアです。例えば: 学生は「スターウォーズ名」ジェネレーターのコンソール版を書くことができます。これは文字列を効果的に読み取り、を使用substringしていますが、楽しいと思います。同様のバリエーションは、「Mad Libs」プログラムです。私はこれを5年前に使用しましたが、おそらくすでに「古い」ものです。 提供されたいくつかのトリガーを使用して、生徒は通常のポリゴンを描画し、興味深いスパイラル形状を作成できます。 また、ほとんどのコードが提供されている単純なアニメーションクラスを使用することも問題ではありません。また、単純なAPIでアクセスできるTwitterまたはFacebookサービスを知っているなら、知りたいと思います。 この質問は、「初心者向けの挑戦的なJavaの質問」の質問とは異なることに注意してください。私はそれ自体がやりがいのあるものを探しているのではなく、ただ面白いものです。学生が「なぜそれをプログラムしたいのか」と簡単に答えることができる何かに取り組むと思います。その後、彼らはより良く学びます。 1ガロンあたりのマイル数を計算するような単純な問題でも良い場合があります。ただし、関連性を高めるために更新する方法があれば、それでもなお良いでしょう。他の場所(本またはWebサイト)からのエクササイズがある場合は、ソースを引用してください。 今日の典型的な新入生について考えるのを助けるために、Beloit Mindsetリストをチェックしてください。

14
なぜ大学でJavaを勉強するのですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 ロックされています。この質問とその回答はロックされています。なぜなら、質問はトピックから外れていますが、歴史的に重要だからです。現在、新しい回答やインタラクションを受け入れていません。 Javaは学界でよく見られます。その背後にある理由は何ですか?
25 java 

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