HB小塩魚学習記録
- 中学生の時、プログラムへの足がかりとなるJavaを少し学びましたが、大学に行ったとき、初めてC言語とC ++を深く学ぶとは思っていませんでした。21日の初めのこの冬休みの初めに、私は自宅でJavaとネットワークプログラミングを学び、将来のレビューのためにプロセスを記録するために投稿することにしました。
Java学習記録
- 【準備】
- 【注1】1-基本文法
- 【注2】115-118Pスキャナー受信クラス
- 【注3】121-124P乱数クラス
- 【注4】133-142P文字列文字列クラス
- 【注5】143-147P静的静的キーワード
- [注6] 148-149Pアレイアレイツール
- 【注7】150-151P数学数学ツール
- 【注8】171-184Pインターフェース関連
- [注9] 185-194P継承はポリモーフィズムに関連しています
- 【注10】215-218Pオブジェクト/オブジェクトルートクラス
- 【注11】219-225P日時
- 【注12】226-226Pシステムシステムクラス
- 【注13】227-229PStringBuilder文字列バッファクラス
- 【注14】234-281Pコンテナおよび関連*
【準備】
- 選択されたJavaJDKバージョンは「1.8.0_181」です。
- 私が選んだコンパイラは次のとおりです。Eclipse
- 具体的な環境構築方法はインターネットの問い合わせからわかるので、これ以上は言いません。
- 学習アドレス:(ステーションBは常に神をドロップします)
ダークホースプログラマーJava言語の習熟度へのエントリー-[基本+上級]-資料一式(IDEAバージョン)
【注1】1-基本文法
- C ++のインクルードヘッダーファイルは、Javaのインポートパッケージメカニズムに似ています。
- C ++およびJavaコード実行の開始点はmain関数です。
- 可変キーワードは基本的にC ++と同じです。Javaにはポインタがないため、Javaの文字列は文字列変数Stringによって格納されることに注意してください。使用方法は、C ++ / STLの文字列に似ています。Javaの文字列の最初の文字を大文字にすることを忘れないでください。
- Javaで配列を申請する場合、動的割り当てと静的割り当てに分けられます。動的割り当てが新しくなった後は、初期値は設定されず、静的割り当てが新しくなった直後に初期値が設定されます。
int[] array1 = new int[3];//动态分配 int[] array2 = new int[]{1,2,3};//静态分配
- Javaの配列と文字列には、C ++ / STLの場合と同様の独自のメソッドがあります。たとえば、length()は長さを取得します。
- 変数型の強制はC ++と一貫性があり、(int)double形式を使用して変換できます。
- C ++と一致する文字タイプも、使用されるASCIIコードです。
- if / else条件付き判断ステートメントはC ++と一致しています。
- switchキーワードの使用は、C ++と一貫性があります。
- forループ、whileループ、do ... whileループの使用方法はC ++と一致しています。
- break andcontinueの使用法はC ++と一致しています。
- Javaのクラスの考え方は基本的にC ++の場合と同じです。Javaクラスのパブリック/プライベート識別子は「:」を追加する必要がないことに注意してください。
- Javaのクラスとメソッドの宣言/使用メソッドは基本的にC ++と同じです。
- 一度だけ使用されるオブジェクトの場合、新しい匿名オブジェクトを使用できます。
- finalキーワードは、finalおよびunchangeableを表します。
- 外部クラス名。内部クラス名オブジェクト名=新しい外部クラス名()。新しい内部クラス名();内部クラスを直接宣言します。
- 現在のコンパイラは、自動ボックス化と自動ボックス化解除をサポートしています。
- int–Integerとchar–Characterを除いて、他のタイプのパッケージは大文字になっています。
- ジェネリックスは型変換の手間を省き、より安全ですが、1つの型のデータしか保存できません。
- nativeキーワードは、メソッドがローカルオペレーティングシステムのメソッドを呼び出すことを意味します。
- メソッドのパラメータータイプが決定されているが、パラメーターの数が不明な場合は、可変パラメーターを使用できます。
修飾子の戻り値の型メソッド名(データ型...変数名){}最下層は配列です。
【注2】115-118Pスキャナー受信クラス
- Javaが入力を受け取る方法は、Scannerクラスを呼び出すことです。パッケージをガイドする必要があります:import java.util.Scanner;
- データを受信する方法であって、
文字列- Scanner.next()/ Scanner.nextLine();
他のタイプ- Scanner.next型();例:INT-Scanner.nextInt();二重-Scanner.nextDouble()。
【注3】121-124P乱数クラス
- Javaは、Randomクラスを呼び出すことによって乱数を生成します。パッケージをガイドする必要があります:import java.util.Random;
- 乱数を生成するRandomクラスのメソッドは、Random.nextInt(100)などのScannerのメソッドと似ています。範囲は左に閉じて右に開きます。つまり、[0,100)、0〜99です。
【注4】133-142P文字列文字列クラス
- パッケージをガイドする必要はありません。
- 文字列比較メソッド:str1.equals(str2);同じことがtrueを返します。.equalsIgnoreCase()は大文字と小文字を区別しません。
- 文字列の長さ:str1.length();文字列の長さを返します。
- 文字列の連結:str3 = str1.concat(str2);戻り値は新しい文字列アドレスです。
- 文字列の指定された位置にある文字を取得します。charch= str1.charAt(1);戻り値はcharです。
- メイン文字列内の部分文字列の最初の出現位置を見つけます。inta= str1.indexOf( "abc");戻り値は最初の出現のインデックス位置です。そうでない場合は、-1を返します。
- 文字列インターセプトメソッド:
str2 = str1.substring(5); //No.5から最後までインターセプト
str2 = str1.substring(4,7); // No.4からNo.6までインターセプト左を閉じて右開く[4,7) - 文字列をchar配列に変換します。char[] chars = "hello" .toCharArray();
- 文字列をバイト配列に変換します。byte[] bytes = "hello" .getBytes();
- 文字列内の指定されたコンテンツを置き換えます。Stringstr1= "how do you do?"。replace( "o"、 "*"); // h * wd * y * ud *?
- 文字列の分割:String [] array1 = "aaa.bbb.ccc" .split( "\\。"); // 3つの文字列にカットaaa、bbb、ccc
【注5】143-147P静的静的キーワード
- staticで変更すると、変更されたメソッド/変数はオブジェクトに属しなくなり、クラスに属します。
- オブジェクトに属していないため、staticのメソッド/変数を直接呼び出すことができます。
静的メソッド:クラス名。静的メソッド();
静的変数:クラス名。静的変数; - 静的は非静的に直接アクセスできません。たとえば、静的メソッドは非静的変数にアクセスします。
- これを静的メソッドで使用することはできません。
- 静的変数の初期化には、静的コードブロックを使用できます。静的コードブロックは、クラスが最初に宣言されたときに1回だけ実行されます。
- 静的コンテンツは常に非静的コンテンツよりも優先されます。
[注6] 148-149Pアレイアレイツール
- パッケージをガイドする必要があります:import java.util.Arrays;
- 配列を文字列に変換します:Arrays.toString();
int [] a1 = {10,20,30};
文字列s1 = Arrays.toString(a1); // [10、20、30] - 配列の並べ替え:Arrays.sort();
int [] a1 = {20,10,30};
Arrays.sort(a1); // 10,20,30デフォルトは昇順です
【注7】150-151P数学数学ツール
- パッケージをガイドする必要はありません。
- 絶対値を取る:Math.abs(); C ++と一致しますが、浮動小数点数の型もfabs()ではなくabs()です。
- 平方根を取る:Math.sqrt(); C ++と一致します。
- nの累乗を求めます。Math.pow(a、b); C ++と一致するaの累乗を求めます。
- 比率:Math.max(a、b)/ Math.min(a、b); aとbの比率はC ++と一致しています。
- 切り上げ:Math.ceil();
- 切り捨て:Math.floor();
- 丸め:Math.round();
- Mathパッケージには一般的な数学値もあります。たとえば、Math.PIは円周率で、Math.Eはe値です。
【注8】171-184Pインターフェース関連
- インターフェイスには静的コードブロックと構築メソッドはありません。
- クラスの親クラスは1つだけですが、クラスは同時に複数のインターフェイスを実装できます。
親クラスのメソッドがインターフェイスのデフォルトのメソッドと競合する場合、親クラスが優先されます。
複数のインターフェースを実装する場合、デフォルトのメソッドの競合があり、デフォルトのメソッドを書き直す必要があります。
複数のインターフェースが実装されている場合、抽象メソッドの競合が発生し、オーバーライドする必要があるのは1回だけです。 - インターフェイスを使用するには、最初にインターフェイスクラスを定義する必要があります。
インターフェイスクラスを定義するための形式は次のとおりです。publicinterfaceinterfacename {interface content} - インターフェイスを使用するには、インターフェイスを実装するためのインターフェイス実装クラスを作成する必要があります。
インターフェイス実装クラスの形式は次のとおりです。パブリッククラス実装クラス名はインターフェイス名を実装します{…} - インターフェイスで定義されている変数はすべて定数です。
定数の形式は次のとおりです。publicstaticfinalデータ型定数名=数値。前の3つのキーワードは省略できます。 - インターフェイスはすべて抽象メソッドであり、実装クラスも抽象クラスでない限り、実装クラスはインターフェイスのすべての抽象メソッドをオーバーライドする必要があります。(カバーする必要があります)次のような
抽象メソッド形式:public abstract return value type method name(parameter list); - Java 8以降、デフォルトのメソッドをインターフェースで定義できます。(上書き可能かどうか)
デフォルトのメソッド形式は次のとおりです。publicdefault戻り値のタイプメソッド名(パラメーターリスト){メソッド本体} - Java 8以降、静的メソッドはインターフェースで定義できます。
静的メソッドの形式は次のとおりです。publicstaticreturnvalue type method name(parameter list){method body} - Java9以降、プライベートメソッドをインターフェイスで定義できます。(私のJavaバージョンは1.8.0、つまりJava8であるため、サポートされていません。)
通常のプライベートメソッドの形式は次のとおりです。プライベート戻り値タイプメソッド名(パラメーターリスト){メソッド本体}
静的プライベートメソッドの形式は次のとおりです。次のように:private static return value type method name(Parameter list){method body}
[注9] 185-194P継承はポリモーフィズムに関連しています
- C ++はコロンで継承し、Javaはキーワードextendsで継承します。
- @Overrideは、オーバーライドするかどうかを検出します。一般的に、Javaのクラス継承は、C ++のクラス継承と非常によく似ています。
- Javaは多重継承をサポートしていないため、親クラスを見つけるためのsuperキーワードがあります。
- abstractはabstractキーワードです。抽象クラス/抽象メソッド。
- メンバー変数にアクセスするためのルール:オブジェクト名
によるアクセス:オブジェクトを宣言するときにオブジェクトのタイプ(等号の左側)を調べ、存在しない場合は調べます。メンバーメソッドを介したアクセス:メソッドが誰に属しているかを確認し、メンバー変数が使用されているユーザーを優先し、使用されていない場合は検索します。 - ポリモーフィズムの実現:親クラスの参照は、子クラスのオブジェクトを指します。
多態的な形式:
親クラス名オブジェクト名=新しいサブクラス名();
インターフェイス名オブジェクト名=新しい実装クラス名(); - 第6条と第7条によると、ポリモーフィズムでは、サブクラスのメンバーメソッドが優先され、オブジェクト名のメンバー変数がアクセスされ、親クラスのメンバー変数が優先されます。
- 「コンパイルするときは左を見て、実行するときは右を見てください」、つまり、コンパイルする前は、オブジェクトは親タイプ(左)と見なされ、実行時のメンバー変数は左側にあり、メンバーメソッドはオンになっています権利。
- 個人的には、ポリモーフィズムの存在により、コードがより論理的になります。
- 上向きの変換:右側の新しいサブクラスオブジェクト。親クラスとして扱います。(サブクラス固有のメソッドを呼び出すことはできません)
- ダウンキャスト:親クラスオブジェクトを元のサブクラスオブジェクトに復元します。
形式:サブクラス名オブジェクト名=(サブクラス名)親クラスオブジェクト;(強制型変換に少し似ています) - クラス名のオブジェクトインスタンス:オブジェクトがこのクラスに属している場合、trueを返します。これを使用して、オブジェクトタイプに従ってダウンキャストを実行し、サブクラス固有のメソッドを使用します。
【注10】215-218Pオブジェクト/オブジェクトルートクラス
- パッケージをガイドする必要はありません。
- Object.toString():文字列に変換されます。変換されたオブジェクトのアドレス値はデフォルトで変換されるため、書き換える必要があります。
- Object.equals(object):オブジェクトが等しいかどうかを比較します。デフォルトでは、比較オブジェクトのアドレス値を書き換える必要があります。
- Objects.equals(オブジェクト1、オブジェクト2):2番目の記事のequalsメソッドにはnullポインター例外がある可能性があり、Objectsのequalsメソッドはより完全です。
【注11】219-225P日時
- 日付クラス
- パッケージをガイドする必要があります:import java.util.Date;
- Dateクラスのnullパラメーターコンストラクターは、現在の日付を取得することです。
- Dateクラスのパラメーター化されたコンストラクターは、長いミリ秒値を渡し、ミリ秒値に基づいて日付を計算します。0Lは1970年1月1日の0:00です。(中国は東8地区プラス8時間です)
- Date.getTime():日付をミリ秒の値に変換します。戻り値はlong型です。
- DateFormatクラス
- パッケージをガイドする必要があります:import java.text.DateFormat;
- DateFomatクラスは抽象クラスであり、オブジェクトを直接作成することはできません。そのサブクラスSimpleDateFormat(String pattern)を使用できます。
- SimpleDateFormatクラスにはガイドパッケージが必要です。importjava.text.SimpleDateFormat;
- SimpleDateFormat s1 = new SimpleDateFormat( "yyyy年MM月dd日HH時間mm分ss秒");コンストラクターはこの形式に従ってパラメーターを渡すことができ、文字は変更できず、残りは変更できます。
- String str1 = s1.format(Date object); Dateオブジェクトを、SimpleDateFormatオブジェクトで指定された形式の文字列に変換します。
- Date date = s1.parse( "20:00:00:00 on January 04、2020"); SimpleDateFormatオブジェクトの形式に従って、Date形式のオブジェクトに変換されます。
- カレンダークラス
- パッケージをガイドする必要があります:import java.util.Calendar;
- Calendarクラスは抽象クラスであり、オブジェクトを直接作成することはできません。
- Calendar c1 = Calendar.getInstance();ポリモーフィックメソッドを使用してCalendarのサブクラスを取得します。等号の右側のメソッドは、Calendarのサブクラスを取得することです。
- Calendar.get(field):カレンダーの指定されたフィールドの数値を返します。例:c1.get(Calendar.YEAR);
- Calendar.set(field、value):カレンダーの指定されたフィールドの数値を設定します。例:c1.set(Calendar.YEAR、2020);
- Calendar.add(field、value):指定されたフィールドに指定された値を追加します。これは負の数にすることができます。例:c1.add(Calendar.YEAR、-2);
- Calendar.getTime():CalendarクラスをDateクラスに変換します。例:日付date = c1.getTime();
【注12】226-226Pシステムシステムクラス
- パッケージをガイドする必要はありません。
- System.currentTimeMillis():現在の時刻をミリ秒単位で返します。これを使用して、プログラムの実行時間を計算できます。
- System.arraycopy(パラメーター1、パラメーター2、パラメーター3、パラメーター4、パラメーター5):配列で指定されたデータを別の配列にコピーします。
パラメータ1 /パラメータ3:ソース配列/ターゲット配列。
パラメータ2 /パラメータ4:ソース配列の開始位置/ターゲット配列の開始位置。
パラメータ5:コピーする配列要素の数。
【注13】227-229PStringBuilder文字列バッファクラス
- パッケージをガイドする必要はありません。
- 文字列バッファは、文字列操作の効率を向上させることができます。
- Stringの最下層は最終的に変更された配列ですが、StringBuilderの最下層は最終的に変更されていない配列であり、長さを変更できます。
- StringBuilder():パラメーターコンストラクターはありません。デフォルトでは空の文字列が提案されます。
- StringBuilder(String str):strを使用して文字列を作成するためのパラメーターを持つコンストラクター。
- append(parameter):指定されたパラメーターの内容をオブジェクトに追加します。戻り値は「this」なので、戻り値を受け取る必要はありません。
- toString(): StringBuilderオブジェクトをStringオブジェクトに変換し、受信する必要のあるStringオブジェクトを返します。