(ジャワ議政石)Chapter 05-07紛らわしい内容を整理
Chapter05
1.int[]宣言
int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90};
int[] score;
score = new int[]{50, 60, 70, 80, 90};
int[] score;
score = {50, 60, 70, 80, 90};
このような状況は不可能だ.前述のようにnewint[]{50,60,70,80,90}宣言を使うべきだ.
2. Arrays.toString()
int[] arr = {100, 96, 80, 70, 60};
System.out.println(Arrays.toString(arr));
[100, 95, 80, 70, 60]
Arrays.TOString()メソッドを使用してきれいなアレイを出力
3. Arrays.deepToString()
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11,12}, {21,22}};
System.out.prinln(Arrays.toString(arr));
System.out.prinln(Arrays.deepToString(arr2D));
2 Dアレイの場合、Arrays.deepToString()メソッドを使用します.
4. Arrays.deepEquals()
String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); //false
System.out.prinln(Arrays.deepEquals(str2D, str2D2)); //true
2 D配列の交差はArraysです.equals()ではなく、Arraysです.deepEquals()を使用します.
5. Arrays.copyOf()
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyof(arr, arr.length); // arr2=[0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0]
配列範囲のあるindexがスーパーで表示された場合、0の配列が作成されます.
6. Arrays.copyOfRange()
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyOfRange(arr, 2, 4); // arr2 = [2, 3];
int[] arr3 = Arrays.copyOfRange(arr, 0, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0];
7. Arrays.sort()
int[] arr = {3, 2, 0, 1, 4 };
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
Chapter06
1.初期化領域変数
class InitClass {
int x;
int y = x;
void method1() {
int i;
int j=i; // 지역변수를 초기화하지 않고 사용했기떄문에 ERROR!
}
}
ゾーン変数は手動で初期化する必要があります.(領域変数の生成と消失のサイクルが速いため、任意の値に初期化するたびにメモリの無駄が大きくなるため、手動で初期化する必要があります.)
2.静的{}初期化ブロック
class StaticBlockTest {
static int[] arr = new int[10];
static {
for( int i = 0 ; i < 10 ; i++ } {
arr[i] = (int)(Math.random() * 10) + 1;
}
}
}
明示的な初期化のみではarr配列に値は生成されないため、静的初期化ブロックを使用して配列初期化値を使用することができます.
3.メンバー変数の初期化点
上の図を見て考えると、オブジェクト生成時にメンバー変数がどのような順序で初期化されているかがわかりやすい!
Chapter07
1.クラス間の関係の決定
int[] score = new int[]{50, 60, 70, 80, 90};
int[] score = {50, 60, 70, 80, 90};
int[] score;
score = new int[]{50, 60, 70, 80, 90};
int[] arr = {100, 96, 80, 70, 60};
System.out.println(Arrays.toString(arr));
[100, 95, 80, 70, 60]
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11,12}, {21,22}};
System.out.prinln(Arrays.toString(arr));
System.out.prinln(Arrays.deepToString(arr2D));
String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); //false
System.out.prinln(Arrays.deepEquals(str2D, str2D2)); //true
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyof(arr, arr.length); // arr2=[0, 1, 2, 3, 4]
int[] arr3 = Arrays.copyOf(arr, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0]
int[] arr = {0, 1, 2, 3, 4};
int[] arr2 = Arrays.copyOfRange(arr, 2, 4); // arr2 = [2, 3];
int[] arr3 = Arrays.copyOfRange(arr, 0, 7); // arr3 = [0, 1, 2, 3, 4, 0, 0];
int[] arr = {3, 2, 0, 1, 4 };
Arrays.sort(arr);
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
1.初期化領域変数
class InitClass {
int x;
int y = x;
void method1() {
int i;
int j=i; // 지역변수를 초기화하지 않고 사용했기떄문에 ERROR!
}
}
ゾーン変数は手動で初期化する必要があります.(領域変数の生成と消失のサイクルが速いため、任意の値に初期化するたびにメモリの無駄が大きくなるため、手動で初期化する必要があります.)2.静的{}初期化ブロック
class StaticBlockTest {
static int[] arr = new int[10];
static {
for( int i = 0 ; i < 10 ; i++ } {
arr[i] = (int)(Math.random() * 10) + 1;
}
}
}
明示的な初期化のみではarr配列に値は生成されないため、静的初期化ブロックを使用して配列初期化値を使用することができます.3.メンバー変数の初期化点
上の図を見て考えると、オブジェクト生成時にメンバー変数がどのような順序で初期化されているかがわかりやすい!
Chapter07
1.クラス間の関係の決定
2.super()祖先の作成者
各ジェネレータは、最初の行で別のジェネレータを呼び出します.
ない場合、コンパイラはsuper()を自動的に呼び出し、最終的にobjectクラスのジェネレータにアクセスします.
他のジェネレータの最初の行を覚えておいてください.
3.多形性
どうしたんですか.参照変数で参照する変数がインスタンスにない場合(欠落した呼び出し)、エラーが発生します.これは動作しないためです.
4.参照変数の形式を変換
重要なのは、実際のオブジェクト(参照変数ではなく)のメンバーを決定し、その範囲内の参照変数タイプを指定することです.(呼び出しコンパイルに問題がなく、実際の操作にない値の場合、エラーが発生します)
5.instanceof演算子
if( a instanceof FireEngine ) {
FireEngine fe = (FireEngine)a;
}
参照変数のシェイプを変換する前に、instanceof演算子を使用してシェイプ(親子関係)を変換できるかどうかを決定する必要があります.6.マルチフォームのメリット
7.抽象化のメリット
Calendarクラスの例)
public static Calendar getInstance9Locale aLocale) {
return createCalendar(TimeZone.getDefault(), aLocale);
}
private static Calendar getInstance(Locale aLocale) {
//···
if (caltype != null) {
switch (caltype) {
case "buddhist" :
cal = new BuddhistCalendar(zone, aLocale);
break;
case "japanse" :
cal = new JapaneseImperialCalendar(zone, aLocale);
break;
case "gregory":
cal = new GregorialCalendar(zone, aLocale);
break;
//···
}
}
//···
}
Calendarクラスの場合、GregorianCalendar cal = new GregorianCalendar(); //구체적
Calendar cal = Calendar.getInstance(); //추상적
具体的な実装new演算子を使用してインスタンスを作成するよりも、CalendarクラスのgetInstance()メソッドを使用してインスタンスを実装します.前述したCalendarクラスの一部に示すように、特定のコードよりも柔軟で、変更に便利です.
変更が発生した場合、メソッド呼び出しの部分を変更する必要はなく、getInstance()メソッドまたは部分を変更するだけです.
8.抽象クラスとインタフェースの違い
抽象クラスは,ジェネレータ,メンバ変数などの基本クラス要素を備えた後,抽象メソッドの形式を備え,インタフェースは抽象メソッドの集合である.(インタフェースには定数、静的メソッド、defaultメソッドがありますが、コアではありません)
結果はインスタンス変数であり、インスタンスメソッドの違いがあるかどうかです.
9.インタフェースの省略
定数はpublic static finalを省略することができて、方法はpublic abstractを省略することができて、インタフェースの上でいつもついているためです!(コンパイラは自動的に一部を追加します)
10.インタフェースの祖先
インタフェースの祖先はインタフェースのみです(オブジェクトは最初の祖先ではありません)
11.インタフェースのメリット
接続、対話、コミュニケーション対象の中間的な役割を果たす.
外殻と卵殻を区別して卵殻を交換しても、外殻から卵殻に近づくことはでき、修正する必要はありません.(柔軟な変更-分散結合)
開発時間を短縮できます.
柔軟な設計が変更に役立ちます
標準化可能
相互に関係のない等級関係を確立することができる.
12.インタフェースのdefaultメソッドと静的メソッド
interface Myinterface {
void method();
void newMethod();
}
interface MyInterface {
void method();
default void newMetrhod(){}
}
interfaceのすべてのメソッドは抽象メソッドであり,体幹を持つdefaultメソッドが追加されている.これにより、エラーメソッドが既存のメソッドと競合します.
必要に応じて、過圧で使用する必要があります.
Reference
この問題について((ジャワ議政石)Chapter 05-07紛らわしい内容を整理), 我々は、より多くの情報をここで見つけました https://velog.io/@boseung/자바의정석Chapter0507-헷갈릴만한-내용-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol