記事を理解するために必要な知識のレベル:初心者。あなたは Java 構文の探求を勉強しており、その初期レベルに近づいています。
あなたは Java の学習を始めたばかりです。まるで宝庫からのように用語が浴びせられます。技術的な情報が山ほどあり、時には三松に混乱してしまうこともあります。信じてください、あなたはすでにプログラミングに関わっているので、それは常にそうなります(この瞬間、不気味な笑い声が画面の外で聞こえ、文の途中で途切れた静かな声がささやきます、「逃げてください...前に自分を救ってください)」もう手遅れです...」)。たとえあなたが最高の開発者であっても、バグはプログラミング人生の残りの間、あなたを悩ませることになります。ただし、これは思っているほど怖いものではありません。
JavaRush の学習を始めたばかりの場合は、この記事で取り上げた問題にすでに遭遇している可能性が高くなります。いずれにせよ、Java を学習し始めて最初の数か月間で発生した問題について説明するコメントを歓迎します。 |
レベル 0 の問題: 比較演算子 (==) と代入演算子 (=) の混同。
これは、他のプログラミング言語から切り替えた人にとって非常に一般的な問題です。そして一般に、私たちは小学校以来、
(=)
これが等号であるという事実に慣れてきました。覚えておくために使用できる簡単なトリックは次のとおりです。値の 1 つだけを考慮する (一方をもう一方に代入する) ことがわかっている場合は、単一の "
=
" 記号を使用します。そうでない場合は、すべての変数を考慮する必要があります。と値 (それらを比較する) には二重の " " 記号が必要です
==
。
問題: 比較演算子 (==) を使用して文字列の等価性をテストする
対処方法:この演算子はプリミティブ型の等価性をテストするように設計されているため、
を使用して Java オブジェクトの等価性をチェックすることはできないことに注意してください(==)
。
オブジェクトの場合は、 を使用する必要があります
.equals()
。Java 言語では、
String
それは単なるオブジェクト (および
immutable
) にすぎません。
とマークされたオブジェクトは、Immutable 作成後に状態を変更できないオブジェクトです。Javaでは、これは、クラスのすべてのインスタンス フィールドが としてマークされ、 およびfinal プリミティブ (またはimmutable ) であることを意味します。 |
問題: ループ内の文字列の連結
これを自分で試さないでください。文字列が連結されるたびに、新しいオブジェクトが作成されます
String
(上でわかったように、文字列は
immutable
不変です)。ある時点でメモリが不足するか、プログラムの完了に時間がかかりすぎるようになります。
解決。ループ内のコンテンツを連結するときに
StringBuilder
代わりに使用します。
String
このクラスは、
StringBuilder
文字列に多くの変更を加える必要がある場合に使用されます。そして、そのような行は、 とは異なり
String
、 ではありません
immutable
。
問題: NullPointerException
null
この種の例外は、実際には実際のオブジェクトが必要な場合に null ポインターを使用しようとすると発生します。
すべてのプリミティブ型にはデフォルト値があります。したがって、 yint は であり0 、 yboolean は です false 。参照型、つまりオブジェクトのデフォルト値は ですnull 。これはオブジェクトや型ではなく、特別な値です。これは本質的に「ここには何もない」という意味です。 |
対処方法:ある時点でオブジェクトが値 を受け入れることができるようにコードが記述されている場合、特にオブジェクトを自分で作成していない場合は、
null
「チェック」を追加する必要があります。
null
また、 のセットを返すよりも空のコレクションを返す方が良いことにも注意してください
null
。ゲッターとセッターの検証を追加するのも良いでしょう。
問題: 何らかの理由で if / while / for ループが機能しない
if (something.equals («что-то еще»)); {
System.out.println («Почему я не работаю???»);
}
ここで何が間違っているのでしょうか?それは簡単です。余分なセミコロンが、何十万もの初心者 Java プログラマの血を汚してきました。まあ、その後は必要ありません
if ()
。言語の観点からは、このような構文は十分に許容されるため、コンパイラーはそれについて文句を言いません。ただし、条件文は終了するため、ブロック内のコードは
{}
上記の条件を満たすことはありません。
解決策:設計ロジックを思い出してください。「
;
」記号は特定のブロックの終わりを意味しますが、ここではすべてが始まったばかりです。
問題: 静的メソッド (main など) から非静的メンバー変数にアクセスしようとしている
解決。この問題は、概念自体の理解に関係しています
static
。メソッドにこの単語が付いている場合は、メイン メソッドを呼び出すためにクラスをインスタンス化する必要がないことを意味します。したがって、解決策は「静電気」をよく理解し、その本質を理解することです。
問題: 既存のライブラリとツールを開発して車輪を再発明しようとしている
解決。実際にはそれほど問題ではありません。初心者にとって、これはより有益な演習です。ただし、便利な加入者データベースの作成など、結果に重点を置きたい場合は、電話帳での加入者の検索はアプリケーションの結果の 1 つにすぎません。この場合、二分探索アルゴリズムを記述する必要はありません。既存のものを使用してください (保証します、あなたより前に誰かがすでに書いており、標準ライブラリにあります)。したがって、Oracle のドキュメントで Java 標準ライブラリを学習してください。Google を学び、Stack Overflow を読むことに慣れ、
JavaRush のヘルプで質問してください。…もちろん、初心者の問題はこれだけではありません。コメントであなたのことを説明してください!
Java 関連の記事を読むことに興味がありますか? Java 開発者グループに参加してください。
ここには興味深いものがたくさんあります。
GO TO FULL VERSION