クラスとオブジェクトの概要
1 クラスとオブジェクトの簡単な説明
(1) クラスは抽象的なものであり、人間や犬などの一般的な用語です。
(2) オブジェクトは特定であり、ディアンディアンという名前のぬいぐるみの犬などの特定のインスタンスです
(3) クラスはオブジェクトの種類の総称であり、オブジェクトはクラスの特定のインスタンスです。
(4) オブジェクト属性: ディアン ディアンの髪の色など、オブジェクトの特定の特性を記述するために使用されます。
(5) オブジェクトメソッド: オブジェクトの特定の機能を記述するために使用されます。
2 関係図は以下の通り
2 つのメンバー メソッドとメンバー変数 (プロパティ)
1 つのメンバー変数
(1) コンセプト
メンバー変数 = 属性 = フィールド (つまり、メンバー変数は属性を表すために使用されます)
プロパティはクラスの不可欠な部分であり、通常は基本データ型または参照データ型 (配列、オブジェクト) です。
(2) 属性定義の構文
public class Explain {
public static void main(String[] args) {
Dog dog = new Dog();//创建Dog对象
System.out.println(dog.name);//对象引用
}
}
class Dog{
访问修饰符 属性类型 属性名;
String name = "点点";
int age = 3;
}
(3) 注意事項
属性が割り当てられていない場合、属性にはデフォルト値が設定され、データ型ごとに異なるデフォルト値 ( int 0、short 0、byte 0、long 0、float 0.0、double 0.0、char \u0000、boolean false、String) が設定されます。ヌル
2メンバーメソッド
(1) メンバメソッドの構文
Dogという名前のクラスを作成します
class Dog{
成员方法的形式:
修饰符 返回值类型 方法名(参数列表....){
return 返回值;
}
public String bark(){
return "bark";
}
}
(2) 戻り値の問題
戻り値の要件がない場合、つまり戻り値の型が void の場合、メソッド本体に return 文が存在しないか、return 文のみが記述される可能性があります。
戻り値がある場合、メソッド本体で実行される最後のステートメントが戻り値である必要があります。
メソッドの戻り値は最大 1 つですが、複数の値を返したい場合は、配列を作成してその配列に値を格納できます
戻り値の型は、基本型または参照型 (配列、オブジェクト) を含む任意の型にすることができます。
(3) パラメータリスト問題
メソッドにはパラメータを 0 個指定することも、カンマで区切って複数のパラメータを指定することもできます。
パラメータの型は、基本データ型または参照データ型にすることができます。
パラメーターを使用してメソッドを呼び出す場合は、同じ型のパラメーター、またはパラメーター リストに対応する互換性のある型のパラメーターを渡す必要があります。
メソッド定義のパラメータは仮パラメータと呼ばれ、仮パラメータと呼ばれます。メソッド呼び出しのパラメータは実パラメータと呼ばれ、実パラメータと呼ばれます。
(4) メソッド呼び出し詳細
//1 一个类中的不同方法,可以直接调用
class A{
public void print(int n){
System.out.println("print方法被调用" + n);
}
public void printAgain(){
print(10);
}
}
//2 跨类方法的调用,A类调用B类的方法,需要通过对象名调用
class A{
public void a(){
B b = new B();
b.b();
}
}
class B{
public void b(){
System.out.println("B类中的方法被调用");
}
}
注: クラス間のメソッド呼び出しは、メソッドのアクセス修飾子と非常に関連しています。
(5) メンバメソッドのパラメータ受け渡し機構
メソッドのパラメータ リストが基本データ型の場合、実パラメータの入力は基本データ型に対応します。基本データ型は値のコピーを転送し、仮パラメータ (パラメータの値) の変更は転送されることに注意してください。 list) は実際のパラメータには影響しません。
逆に参照型転送の場合、その転送も値ですが、その値はアドレスであり、実パラメータは仮パラメータの影響を受ける可能性があります。
(6) 会員方式のメリット
実装の詳細をカプセル化して、他のユーザーが呼び出すことができます。
コードの再利用性の向上
3 オブジェクトの作成方法
以声明dog对象为例,类名为Dog//
//1 先声明再创建
Dog dog;
dog = new Dog();
//2 直接创建
Dog dog = new Dog();
メモリ上の3つのオブジェクトの存在形式
Java仮想マシン動作時のデータ領域は、単純にスタック領域、ヒープ領域、メソッド領域に分けることができます。
1スタックエリア
スレッドはプライベートであり、ライフサイクルはスレッドと一致します。Java メソッド実行のメモリ モデルについて説明します。各メソッドは、実行時にローカル変数テーブル、オペランド スタック、ダイナミック リンク、メソッド出口などの情報を格納するスタック フレーム (スタック フレーム) を作成します。呼び出しから実行の終了まで、各メソッドは、スタック フレームが仮想マシン スタックからプッシュされ、スタックからポップされるまでのプロセスに対応します。
リファレンスを見るとJavaメソッドを実行するとスタック領域に新しい空間が作成されることが分かります。
ローカル変数テーブル: コンパイル中に存在するさまざまな基本データ型を保存します。
2ヒープ領域
ほとんどのアプリケーションでは、この領域は JVM によって管理される最大のメモリ部分です。スレッド共有では主にオブジェクトのインスタンスと配列が保存されます。内部的には、複数のスレッドプライベート割り当てバッファ (Thread Local Allocation Buffer、TLAB) が分割されています。物理的に不連続な空間に配置することもできますが、論理的には連続している必要があります。
3メソッドエリア
共有メモリ領域に属し、仮想マシンに読み込まれたクラス情報、定数、静的変数、ジャストインタイムコンパイラでコンパイルされたコードなどのデータが格納されます。
4 つの変数スコープ
1。概要
Java プログラミングでは、メイン変数は属性 (メンバー変数) とローカル変数を指します。
2 スコープ分類
グローバル変数: 属性を参照します。スコープはクラス本体全体です。たとえば、Dog クラスのメソッドを使用できます。
ローカル変数: 属性以外の変数。スコープが定義されているコード ブロックに限定されます。つまり、ローカル変数は通常、メンバー メソッドで定義された変数を指します。
3注意点
グローバル変数にはデフォルト値があるため、代入せずに使用できます。
ローカル変数にはデフォルト値がないため、使用する前に値を割り当てる必要があります。
属性とローカル変数は同じ名前を持つことができ、アクセスするときは近接性の原則に従う必要があります。
同じメンバーメソッドなど、同じスコープ内では、2 つのローカル変数に同じ名前を付けることはできません
スコープが異なります。グローバル変数は、このクラスによって呼び出すことも、他のクラスによって使用することもできます。ローカル変数は、このクラスの対応するメソッドでのみ使用できます。
修飾子は異なります: グローバル変数は変更できますが、ローカル変数は変更できません
5 つのメソッド再帰
1 はじめに
メソッドの再帰: 再帰とは、メソッドがそれ自体を呼び出し、呼び出されるたびに異なる変数を渡し、最終的に目的を達成することを意味します。
2つのコード
public class Method {
public static void main(String[] args) {
T t = new T();
t.test(4);
}
}
class T{
public void test(int n){
if (n > 2){
test(n - 1);
}
System.out.println("n=" + n);
}
}
3 再帰に関する重要なルール
(1) メソッドが実行されると、新たに保護された独立空間(スタック空間)が作成されます詳細はメモリ上のオブジェクトの存在形態を参照
(2) メソッドのローカル変数は独立しており、互いに影響を与えません。
(3) 再帰は再帰を終了する条件に近づく必要があります。そうでない場合は無限再帰になります。
(4) メソッドが実行されるかリターンされるとメソッドはリターンし、メソッドを呼び出した人は呼び出された人に結果を返します。同時に、メソッドが実行されるかリターンされるとメソッドが実行されます。 。
6 つのメソッドのオーバーロード
1 はじめに
Java では、同じクラス内で同じ名前を持つ複数のメソッドが許可されますが、仮パラメータ リストは一貫性を持たないようにする必要があります。
2 注意事項
メソッド名: 同じである必要があります
仮パラメータ リスト: 異なっている必要があります (仮パラメータのタイプ、番号、または順序、少なくとも 1 つは異なります。パラメータ名は必要ありません)
戻り値の型: 不要
7 つの可変パラメータ
1 はじめに
Java では、名前と機能が同じでパラメータの数が異なる複数のメソッドを同じクラス内で1 つのメソッドにカプセル化できます。パラメータの数を変更することで期待どおりの効果を得ることができます
2 基本文法
アクセス修飾子の戻り値の型 メソッド名(データ型...パラメータ名){
}
3 注意事項
可変パラメータの実パラメータは 0 または任意の数値にすることができます。
可変引数パラメーターの実パラメーターは配列にすることができます
可変パラメータの本質は配列です
可変パラメータは、通常の型パラメータと一緒に仮パラメータ リストに配置できますが、可変パラメータが仮パラメータ リストの最後に配置されていることを確認する必要があります。
パラメータ リストには 1 つの変数パラメータのみが表示されます
4件
//求多个数的和
public class VarParameter {
public static void main(String[] args) {
VarMethod varMethod = new VarMethod();
int i = varMethod.sum(1,2,3);
System.out.println("总和为" + i);
}
}
class VarMethod {
int sum = 0;
public int sum (int... num){
//可变参数的本质为数组,所以要访问形参num中的值,就要遍历它
for (int i = 0; i < num.length; i++) {
sum += num[i];
}
return sum;
}
}
8つのコンストラクター(構築メソッド)
1 基本的な紹介
構築メソッドはコンストラクター (constructor) とも呼ばれ、クラスの特別なメソッドであり、その主な機能は新しいオブジェクトの初期化を完了することです。
2 基本文法
[修飾子] メソッド名 (仮パラメータリスト) {
}
3 注意事項
コンストラクター修飾子はデフォルトで次のように設定できます
コンストラクターが値を返さない
コンストラクターのメソッド名はクラス名と同じである必要があります
パラメータ リストは、メンバー メソッドのパラメータ リストと同様に規則的です
オブジェクトを作成するとき、システムは自動的にクラスのコンストラクターを呼び出してオブジェクトの初期化を完了します。
4 メソッドを構築するための演習
public class Constructor {
public static void main(String[] args) {
//通过构造器指定人的姓名和年龄
Person person = new Person("Tom",18);
System.out.println("person对象的名字" + person.name);
System.out.println("person对象的年龄" + person.age);
}
}
class Person{
String name;
int age;
public Person(String pName,int pAge){
System.out.println("构造器已被调用");
name = pName;
age = pAge;
}
}
5 注意事項
クラスは複数の異なるコンストラクター、つまりコンストラクターのオーバーロードを定義できます。
コンストラクターはオブジェクトの初期化を完了するためのものであり、オブジェクトを作成するためのものではありません。
オブジェクトを作成するとき、システムは自動的にクラスのコンストラクターを呼び出します。
コンストラクターが定義されていない場合、システムはクラスのデフォルトの引数なしコンストラクター (デフォルト コンストラクターとも呼ばれます) を自動的に生成します。
独自のコンストラクターを定義すると、デフォルトのコンストラクターが上書きされ、デフォルトの引数なしのコンストラクターは使用できなくなります。
コンストラクターはオブジェクトの初期化を完了するものであり、オブジェクトにはプロパティとメソッドが必要です。したがって、コンストラクターを使用する前に、オブジェクトの対応するプロパティも設定する必要があります。
9つのこのキーワード
1 これは何ですか
Java 仮想マシンはこれを各オブジェクトに割り当て、現在のオブジェクトを表します。
2 これで使用されるキー
どのオブジェクトが呼び出すか、これはどのオブジェクトを表すか
3 注意事項と使用方法
this キーワードを使用して、このクラスのプロパティ、メソッド、コンストラクターにアクセスできます。
これは、現在のクラスのプロパティをローカル変数から区別するために使用できます。
上図の this.name を name に変更すると、プロパティとローカル変数が同じ名前になり、近接原理のアプローチを採用してそれに応じて処理します。オブジェクトのプロパティの初期化を行わない
メンバー メソッドにアクセスするための構文: this.メソッド名 (パラメーター リスト);
アクセス コンストラクター構文: this (パラメーター リスト); コンストラクター内でのみ使用できることに注意してください (つまり、コンストラクター内でアクセスできるのは別のコンストラクターのみです)。
この呼び出しでは、コンストラクターの最初のステートメントで呼び出しを行う必要があります。
public class thisDetail {
public static void main(String[] args) {
Person person = new Person();
}
}
class Person{
String name;
int age;
public Person(){
this("jack",18);
System.out.println("Person() 构造器被调用");
}
public Person(String name,int age){
this.name = name;
this.age = age;
System.out.println(name);
System.out.println(age);
}
}
これはクラス定義の外では使用できません。クラスによって定義されたメソッド内でのみ使用できます (つまり、走り書きはできません)。