window.pipedriveLeadboosterConfig={です。 ベース:'leadbooster-chat.pipedrive.com'、 companyId:11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2、 } ;(function () { var w = window もし (w.LeadBooster) {なら console.warn('LeadBooster already exists') } else { w.LeadBooster = { {. q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 関数 (n) { { this.q.push({ t: 'o', n: n, h: h }) this.q.push({ t: 't', n: n }) }, } } })() Javaプログラミングで避けるべき9つの間違い - The Codest
The Codest
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 産業
    • フィンテック&バンキング
    • E-commerce
    • アドテック
    • ヘルステック
    • 製造業
    • 物流
    • 自動車
    • アイオーティー
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
  • 会社概要
  • サービス
    • ソフトウェア開発
      • フロントエンド開発
      • バックエンド開発
    • Staff Augmentation
      • フロントエンド開発者
      • バックエンド開発者
      • データエンジニア
      • クラウドエンジニア
      • QAエンジニア
      • その他
    • アドバイザリー
      • 監査&コンサルティング
  • 価値
    • CEO
    • CTO
    • デリバリー・マネージャー
  • チーム
  • Case Studies
  • ノウハウ
    • ブログ
    • ミートアップ
    • ウェビナー
    • リソース
採用情報 連絡先
戻る矢印 戻る
2022-07-08
ソフトウェア開発

Javaプログラミングで避けるべき9つの間違い

The Codest

ラファル・サヴィツキ

Java開発者

Javaでのプログラミングで避けるべき間違いとは?次の記事では、この質問にお答えします。

ジャワ の世界で確固たる地位を築いている人気言語である。 ソフトウェア開発.これは強力で汎用性の高いプログラミング言語である。世界中で約30億台のデバイスが ジャワ そのため、少なくとも30億回以上のミスがあった。この記事では、これ以上ミスを犯さないようにする方法に焦点を当てよう。

1.同時変更例外の取得

これは私が出くわしたミスの中で圧倒的に多いものだ。私もキャリアの初期には何度もやってしまった。この間違いは、反復処理中にコレクションを修正しようとしたときに起こります。その ConcurrentModificationException 複数のスレッドで作業する場合にも発生する可能性があるが、今は基本的なシナリオに集中しよう。

を持っていると仮定する。 コレクション ユーザーの中には大人もいればそうでない人もいる。あなたの仕事は、子供をフィルタリングすることです。

for (ユーザー : ユーザー) {

   if (!user.isAdult()) { { { (!user.isAdult())

       users.remove(user);

   }

}

前述した コード を得ることに終わる。 ConcurrentModificationException.どこで間違ったのか?反復を終える前に、いくつかの要素を削除しようとした。それが例外の引き金になった。

どうすればそれを避けることができますか?

その場合に役立つアプローチがいくつかある。まず第一に ジャワ 8の良さ ストリーム.

List adults = users.stream()

       .filter(User::isAdult)

       .toList();

を使用している。 述語 フィルタを使うことで、前の条件の逆を実行したことになる。このようなアプローチの利点は、除去の後に他の関数を連鎖させるのが簡単なことだ。 地図.しかし、お願いだから、以下のようなことはしないでほしい:

users.stream()

       .filter(v -> !v.isAdult())

       .forEach(users::remove);

で終わる可能性もある。 ConcurrentModificationException なぜなら、ストリーム・ソースを変更しているからです。また、デバッグしにくい例外が発生する可能性もある。

解決するには ConcurrentModificationException シングルスレッドシナリオでは、直接 イテレータ そして 削除() メソッドを使うか、あるいは単純に反復中に要素を削除しないようにすることもできる。しかし、私のお勧めは ストリーム - 2022年だ。

2.パスワードを文字列として保存する

サイバーセキュリティーに関わるようになってきている今、少なくとも1つのことに触れないと、私は自分自身に忠実ではないだろう。 ジャワのミス セキュリティ問題につながる可能性がある。ユーザーから受け取ったパスワードを ストリング それこそが、あなたが恐れるべきものなのだ。

の問題(あるいは利点かもしれない)。 ストリング は不変である。サイバーセキュアな世界では、一度作成した値を消去することができないため、潜在的な脅威となる。 ストリング オブジェクトにアクセスできる。あなたのコンピュータのメモリにアクセスした攻撃者は、そこでプレーンテキストのパスワードを見つけることができる。

次に ジャワ はJVMによってインターンされ、PermGen空間かヒープ空間に格納される。JVMで ストリング オブジェクトからパスワードが削除されると、そのパスワードはキャッシュされ、ガベージコレクタが処理を開始したときに削除されます。ガベージ・コレクターは非決定論的な方法で動作するため、パスワードがいつStringプールから削除されるかはわかりません。

それを避けるには?

推奨されるアプローチは char[] としてパスワードの保存をサポートするライブラリがあればなおよい。 char[]例えばパスワード4j.その char[] 配列は変更可能であり、初期化後に変更することができる。パスワードを処理した後で char[] パスワード配列にランダムな文字を書き込む。攻撃者がコンピュータのメモリにアクセスした場合、ユーザのパスワードとは無関係のランダムな値が表示されるだけです。

3.例外の(未)処理

初心者や上級プログラマーは、例外の正しい扱い方を知らない。彼らの主な罪は、例外を無視することだ。それは決して良い方法ではない。

しかし、残念ながら、私たちは、すべての人に適合する銀の弾丸のような解決策を提供することはできません。 例外のシナリオに出くわす。それぞれのケースについて個別に考える必要がある。しかし、私たちはそのテーマに着手する方法について、いくつかのアドバイスをすることができます。

どうすればそれを避けることができますか?

  1. 無視 例外のようなことは決して良い習慣ではない。 例外を無視してはならない。

  2. try {...} catch(Exception e) { log(e); }. が正しいアプローチであることは稀である。 例外 を扱う。

  3. レスロー 例外ユーザーにエラーダイアログを表示するか、少なくともログに包括的なメッセージを追加する。

  4. もし例外を処理しないままにしておいたのなら(処理すべきではないが)、せめてコメントで説明してほしい。

4.ヌルの使用

残念なことに、Javaの関数が、場合によっては ヌル.問題は、このような関数がクライアントに対して、結果に対するヌルチェックを強制することである。これがないと NullPointerException がスローされる。

もうひとつは ヌル 価値がある。なぜそんなことを考えたのですか?このような場合、関数はヌルチェックを行わなければならない。サードパーティのライブラリを使う場合、関数の内部を変更することはできない。ではどうする?

さらに重要なことは、あなたのコードを読んだ他の開発者が、あなたが ヌル なぜそんな奇抜な方法を選んだのか、おそらく混乱するだろう。

どうすればそれを避けることができますか?

を返さないでください。 ヌル 価値!今まで関数が何らかの コレクションを返すことができます。 コレクション.単一のオブジェクトを扱う場合は、ヌル・オブジェクト・デザイン・パターンを利用することができます。なぜなら ジャワ 8 のように実装されている。 オプション.それ以外では、最も推奨されない方法として、次のようなものがある。 例外.

5.重い文字列の連結

最もポピュラーな(あるいはFizzBuzzに次いで2番目にポピュラーな)面接の質問なのだから。もうお分かりのように ストリング オブジェクトは ジャワ - 一度作成されたものは変更できない。だから ストリング リテラルは、多くの不必要なメモリ割り当てを意味する。連結 ストリング オブジェクトを毎回作成するには、一時的な 文字列ビルダー オブジェクトを作成し、それを文字列に戻す。したがって、この解決策は、大量の文字を組み合わせたい場合には絶対に適さない。

どうすればそれを避けることができますか?

この問題を解決するには 文字列ビルダー.これは、簡単に操作できる変更可能なオブジェクトを作成する。もちろん、いつでも 文字列バッファ もし プロジェクト はコンカレント・コンテキストで使用される。

6.既存のソリューションを使用しない

ソフトウェアを開発するとき、使用する言語の基本を知ることは必須だが、それだけでは十分ではない。新しい機能を実装するときに出くわすアルゴリズム上の問題の多くは、すでに他の誰かが解決している。セキュリティ・アルゴリズムをゼロから実装している人を何度も見たことがある。そのようなアプローチでは、エラーが起こりがちです。このような複雑な解決策を一人で徹底的にテストすることはできません。の集合的な知識が必要なのです。 チーム 一人の天才プログラマーの偉大さよりも、中上級プログラマーで構成されたチームの方が常に優れている。 Java開発者.車輪を再発明する必要はなく、既存のソリューションをお客様のニーズに合わせてアレンジするだけです。

どうすればそれを避けることができますか?

あなたが取り組んでいる問題に取り組んでいるライブラリを検索してみてください。似たような解決策を探してみてください。ウェブ上で利用可能なライブラリの多くは無料で、経験豊富な開発者やJavaコミュニティ全体によって磨かれ、テストされています。それらを利用することを恐れないでください。

7.テストを書くのに十分な時間が取れない

私たちのコードは常に完璧に動くと信じたくなる。コードのテストを書かないことは、次のような最悪の罪である。 ジャワ ソフトウェア開発者.私たちの多くは、ユニットテストの代わりに手動テストや探索的テストを好む。 バグのない世界最高のコードをプロジェクトに提供することに集中できるのに、なぜテストを書くのに時間を浪費するのでしょうか?現実は残酷で、テストを書かずに高品質のコードを提供することはできない。

どうすればそれを避けることができますか?

自分のコードには必ずテストを用意すべきだ。TDDのアプローチは保守が容易でないことは承知しているが、少なくとも、コードが実行されるすべての条件をカバーするテストを用意すべきだ。これには例外的な状況のテストも含まれる。ユニットテストは必要だ。もしあなたのコードがリファクタリングしやすく、今後の開発でも拡張可能であることを確認したいのであれば、プロジェクトのすべての機能に対してユニットテストを提供しなければなりません。 

もうひとつ。テストコードの水準を高く保つこと。これはボブおじさんのアドバイスだが、私もまったく同感だ。

さらに、他の種類のテストについても忘れてはならない。統合テストは、すべてのプロジェクトで考慮すべきものだ。

8.アクセス修飾子を忘れる

公私混同でしょう?忘れるわけがない。もっとたくさんあることがわかった。あなたが最初に学び始めたとき ジャワ保護されたアクセス修飾子について学んだはずだ。場合によっては役に立つこともあるので、その存在は知っておいて損はない。

Java開発者 パッケージ・スコープのことを忘れている人が多いようだ。パッケージ・スコープは暗黙的なものであり ジャワ キーワードパッケージ・スコープは重要だ。これにより、プロテクトされたメソッドをテストすることができます。プロテクトされた項目は、パッケージが同じであればテストクラスのパスからアクセスできます。

どうすればそれを避けることができますか?

protected修飾子についてと、パッケージ・スコープでテストできることを覚えておいてほしい。

9.Springの代わりに純粋なJavaEEを使う

学んだ次のステップ ジャワ SEは走り方を学ぶ ジャワ サーバー上でエンタープライズ・レベルのアプリケーションを作る方法。

JavaEEについては膨大な数のチュートリアルがあるため、初心者はJavaEEを学習する際に陥りがちだ。Javaで考える'でさえ Javaプログラマー'のバイブルには、JavaEEのことが書かれているだけで、他のオプションについては何も書かれていない。

どうすればそれを避けることができますか?

JavaEEは過去の歌だ。今やSpringは必須アイテムであり、Java EEは持っているだけでありがたい存在だ。最新のエンタープライズ・レベルのアプリケーションはすべてSpringを使っている。 こちら.

Javaエキスパートの紹介

続きを読む

トップJava開発者を見つける正しい方法

Javaに最適なプロジェクトの種類

フィンテック企業に人気のプログラミング言語

関連記事

ソフトウェア開発

将来を見据えたウェブ・アプリケーションの構築:The Codestのエキスパート・チームによる洞察

The Codestが、最先端技術を駆使してスケーラブルでインタラクティブなウェブアプリケーションを作成し、あらゆるプラットフォームでシームレスなユーザー体験を提供することにどのように秀でているかをご覧ください。The Codestの専門知識がどのようにデジタルトランスフォーメーションとビジネス...

ザ・コデスト
ソフトウェア開発

ラトビアを拠点とするソフトウェア開発企業トップ10社

ラトビアのトップソフトウェア開発企業とその革新的なソリューションについて、最新記事でご紹介します。ラトビアの技術リーダーたちがあなたのビジネスをどのように向上させるかをご覧ください。

thecodest
エンタープライズ&スケールアップ・ソリューション

Javaソフトウェア開発の要点:アウトソーシングを成功させるためのガイド

outsourcingのJavaソフトウェア開発を成功させるために不可欠なこのガイドを読んで、The Codestで効率性を高め、専門知識にアクセスし、プロジェクトを成功に導きましょう。

thecodest
ソフトウェア開発

ポーランドにおけるアウトソーシングの究極ガイド

ポーランドのoutsourcingの急増は、経済、教育、技術の進歩がITの成長とビジネス・フレンドリーな環境を促進していることによる。

ザ・コデスト
エンタープライズ&スケールアップ・ソリューション

IT監査ツール&テクニック完全ガイド

IT監査は、安全かつ効率的で、コンプライアンスに準拠したシステムを保証します。その重要性については、記事全文をお読みください。

The Codest
ヤクブ・ヤクボヴィッチ CTO & 共同創設者

ナレッジベースを購読して、IT部門の専門知識を常に最新の状態に保ちましょう。

    会社概要

    The Codest - ポーランドに技術拠点を持つ国際的なソフトウェア開発会社。

    イギリス - 本社

    • オフィス 303B, 182-184 High Street North E6 2JA
      イギリス、ロンドン

    ポーランド - ローカル・テック・ハブ

    • ファブリチュナ・オフィスパーク、アレハ
      ポコジュ18、31-564クラクフ
    • ブレイン・エンバシー, コンストルクトースカ
      11, 02-673 Warsaw, Poland

      The Codest

    • ホーム
    • 会社概要
    • サービス
    • Case Studies
    • ノウハウ
    • 採用情報
    • 辞書

      サービス

    • アドバイザリー
    • ソフトウェア開発
    • バックエンド開発
    • フロントエンド開発
    • Staff Augmentation
    • バックエンド開発者
    • クラウドエンジニア
    • データエンジニア
    • その他
    • QAエンジニア

      リソース

    • 外部ソフトウェア開発パートナーとの協力に関する事実と神話
    • 米国から欧州へ:アメリカの新興企業がヨーロッパへの移転を決断する理由
    • テックオフショア開発ハブの比較:テックオフショア ヨーロッパ(ポーランド)、ASEAN(フィリピン)、ユーラシア(トルコ)
    • CTOとCIOの課題は?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • ウェブサイト利用規約

    著作権 © 2025 by The Codest。無断複写・転載を禁じます。

    jaJapanese
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek jaJapanese