私の個人的なブログのホームページ: 「」が本当にエスケープできる場合は、1️⃣ と言う 1️⃣ Java の基本的な文法の学習に関するブログのホームページ
----> 私のブログを参照してください: Java 配列の学習、JVM ヒープとスタックに関する「VScode で Java を学ぶ」 —> VScode で Java を学ぶ (JVM での Java 1 次元配列、2 次元配列、ヒープとスタック) リメイク
記事を参照してください。
名詞:
「グループ1
- 実パラメータ (実パラメータ): メソッド呼び出しで実際にメソッドに渡される値。実パラメータとも呼ばれます。
- あいまいな呼び出し: 同じ名前とパラメーターの型を持つメソッドが複数あるが、戻り値の型が異なるか正確に一致できない場合、コンパイラーはどのメソッドを呼び出すかを判断できず、あいまいな呼び出しが発生します。
- 分割統治: 問題を小さなサブ問題に分割して段階的に解決し、その後、解決策を組み合わせて元の問題の解決策を得る問題解決方法。
- 仮パラメータ (仮パラメータ): メソッド定義で宣言されたパラメータ。仮パラメータとも呼ばれます。これらはメソッド シグネチャの一部であり、メソッド呼び出しで渡される実際のパラメータの値を受け取るために使用されます。
- 情報隠蔽: カプセル化によってオブジェクトの内部状態と実装の詳細を隠し、コードの保守性とセキュリティを向上させるために必要なパブリック インターフェイスのみを公開するオブジェクト指向プログラミング原則。
- メソッド: オブジェクト指向プログラミングでは、メソッドは、特定のタスクを実行するクラスまたはオブジェクト内のコードのブロックです。これは操作と機能をカプセル化するために使用され、他のコードで再利用できます。
- メソッド抽象化: メソッドをその具体的な実装から分離する概念。特定の実装の詳細ではなく、メソッドの目的、機能、および動作に焦点を当てることに重点を置いています。
- メソッドのオーバーロード: 同じクラス内に、名前は同じだがパラメーター リストが異なる複数のメソッドを定義します。メソッドのオーバーロードを使用すると、メソッドに渡されるパラメーターに従ってどのメソッドを呼び出すかを選択できるため、より柔軟なメソッド呼び出しが可能になります。
「2チーム
- メソッド シグネチャ (メソッド シグネチャ): メソッド名とパラメータ リストを含む、メソッドの一意の識別子。メソッド シグネチャは、さまざまなメソッドを区別するために使用されます。
- 修飾子: Java では、修飾子はクラス、メソッド、変数などの動作とプロパティを変更するために使用されます。たとえば、
public
、private
などstatic
は修飾子です。 - 値渡し: メソッドの呼び出し時に実パラメータの値が仮パラメータにコピーされるパラメータ受け渡しメソッドで、メソッドは元の実パラメータへの参照の代わりに仮パラメータのコピーを使用します。
- パラメーター (パラメーター): メソッドに渡される値を受け取るために使用されるメソッド定義内のプレースホルダー。パラメーターはメソッドに入力を提供するために使用され、メソッド内で処理されます。
- 戻り値の型 (戻り値の型): メソッド定義で指定されたデータ型で、メソッドによって返される結果の型を示します。たとえば、
int
、double
などString
はすべて戻り値の型として使用できます。 - 戻り値(return value):メソッドの実行完了後に返される値。メソッドで定義された戻り値の型に従って、メソッドは
return
ステートメントを使用して対応する値を返すことができます。 - 変数のスコープ: 変数の可視性とアクセス範囲。変数のスコープによって、変数にアクセスして使用できる場所が決まります。
- 完成すべきメソッド (スタブ): ソフトウェア開発でプレースホルダーとして使用される単純な、空の、または不完全に実装されたメソッド。その特定の実装は後で改善されます。通常、テストやフレームワーク構築などのシナリオで使用されます。
メソッド シグネチャ (メソッド シグネチャ) とは:
方法签名是指方法的唯一标识,它由方法的名称和参数列表组成。
方法签名用于区分不同的方法,并且在Java中是必须唯一的。
メソッド シグネチャには次の側面が含まれます。
- メソッド名: メソッドの名前は、メソッドの操作または動作を識別するために使用されます。
- パラメータ (パラメータ) リスト: パラメータ リストには、メソッドで受け入れられる入力パラメータのタイプ、順序、および数が含まれます。
メソッドのオーバーロードは、メソッド シグネチャを使用することで実現できます。つまり、同じ名前でパラメータ リストが異なる複数のメソッドを同じクラス内に定義できます。メソッド シグネチャを比較することにより、コンパイラはどのメソッドを呼び出すかを決定できます。
メソッド シグネチャの例の形式は次のとおりです。
返回类型 方法名(参数类型1 参数名1, 参数类型2 参数名2, ...)
**実際のパラメータは、メソッド シグネチャで定義されたパラメータと順序と量が一致し、型に互換性がある必要があります。
类型兼容是指不需要经过显式的类型转换,实参的值就可以传递给形参
例如,将int型的实参值传递给double型形参。**:
メソッドの呼び出し時に提供される実際のパラメータ (つまり、メソッドに渡される値) は、メソッド シグネチャで定義されたパラメータと順序および数が一致する必要があり、型にも互換性がある必要があります。
順序と数量が一致するとは、メソッドが呼び出されるときの実パラメータ (実パラメータ) の順序と数量が、メソッド定義内のパラメータ リストの順序と数量と一致している必要があることを意味します。パラメータの順序または数が一致しない場合、コンパイラはエラーを報告します。
型の互換性とは、メソッドに渡される実際のパラメーターの型が、メソッド シグネチャで定義されたパラメーターの型と互換性がある必要があることを意味します。実パラメータの型が仮パラメータの型と一致しない場合、コンパイラは通常、互換性を持たせるために暗黙的な型変換を試みます。たとえば、int 型の実パラメータ値を double 型の仮パラメータに [値渡し] で渡すことができます。これは、double 型はより広範囲の値に対応できるため、明示的な型変換が必要ないためです。
ただし、実パラメータの型が暗黙的な型変換を通じて仮パラメータの型と互換性がない場合、コンパイラはエラーを報告します。この場合、実パラメータの型を仮パラメータに必要な型に変換して互換性を持たせるために、明示的な型変換が必要です。
要約すると、この警告は、メソッドが呼び出されるとき、明示的な型変換が必要でない限り、実際のパラメータはメソッド シグネチャで定義されたパラメータと順序および番号で一致する必要があり、型の互換性もなければならないことを意味します。
Javaメソッドメソッド
- メソッド (メソッド) ---> 特定の関数をカプセル化する再利用可能なコード ブロック
-
- [1] main メソッド。アクセス制御権限はパブリック (public)、静的、戻り値がなく、void のみを使用でき、クラスは main() メソッドを 1 つだけ持つことができます。[main メソッドなしでは実行できません。]
- [2] メソッド呼び出し
- [3] メソッドの形式
- [4] メソッドの完全な定義形式
- 【5】使用方法の注意点
- メソッドのオーバーロード ---> 同じクラス内の同じメソッド名と異なるパラメーターを持つメソッド。戻り値に関係のないパラメータが異なる:数値が異なる、型が異なる、順序が異なる
- == パブリック (パブリック) または静的 (静的) ==
- メソッドの保存方法
- いくつかのコード例:
パラメータ リスト: パラメータ リストはメソッドへの入力です。各パラメータには型と名前が必要です。パラメータのリストは括弧で囲まれ、パラメータはカンマで区切られます。
戻り値の型: 戻り値の型はメソッドの出力です。メソッドが何も返さない場合、戻り値の型は void である必要があります。それ以外の場合、戻り値の型はメソッドによって返される値の型になります。
メソッド本体: メソッド本体は、メソッドの実際のコードです。中括弧で囲む必要があります。
メソッド —> 特定の機能をカプセル化する再利用可能なコード ブロック
Java では、メソッドは、複数のステートメントと式を 1 つのコード ブロックに結合し、入力パラメーターと戻り値を通じて他のコードと対話する高レベルのコード構成です。メソッドは、最小の実行単位ではなく、複数のステートメントと式で構成されるプログラム内の機能モジュールとみなすことができます。[メソッドは、最小の実行単位ではなく、複数のステートメントと式で構成されるプログラム内の機能モジュールとみなすことができます。】
Java方法可以带有参数列表,并且可以在方法体中使用这些参数。
方法可以有返回值,返回值类型(return type)必须在方法声明时指定。如果方法没有返回值,则返回类型应该用void表示。
通过访问修饰符(public、private、protected等)来限制方法的访问权限。默认情况下,在同一个包中的其他类可以访问该方法。
Java方法可以被重载,这意味着你可以定义具有相同名称但不同参数列表的多个方法。根据传递给方法的参数类型和数量,Java编译器将自动确定要调用哪个方法。
在Java中,方法可以是静态的或实例化的。静态方法属于类本身,而不是类的任何特定实例。因此,它们不能访问非静态成员变量或非静态方法。实例化方法属于类的实例,它们可以访问实例变量和其他实例化方法。
Java中的方法可以递归调用,即方法调用自身。递归通常用于解决可以分解为更小子问题的问题,例如计算斐波那契数列或树形数据结构的遍历等。
Java のメソッドは、再利用可能なコードをカプセル化する役割を果たし、コードの効率を大幅に向上させます。再利用性と保守性。Java では、他のクラスやメソッドからメソッドを呼び出すことができるため、プログラマはよく使用される関数をメソッドにカプセル化し、プログラム内で複数回使用することができます。
メソッドを使用すると、メソッドのコード ブロックを独立して記述、テスト、保守できるため、プログラムの可読性と保守性の向上にも役立ちます。
さらに、Java メソッドはパラメーターと戻り値を受け取ることもできるため、メソッドはさまざまな入力パラメーターに従ってさまざまな操作を実行し、さまざまな結果を返すことができるため、プログラムの柔軟性とスケーラビリティが向上します。
public int add(int x, int y) {
return x + y;
}
int result = add(3, 5);
Java では、通常、メソッドはクラス内で定義され、他のクラスやメソッドから呼び出すことができます。メソッドの定義には通常、メソッド名、入力パラメータのリスト、戻り値の型、およびメソッド本体が含まれます。メソッドの呼び出しは、メソッド名を使用してパラメータを渡すことによって実現できます。
[1] main メソッド。アクセス制御権限はパブリック (public)、静的、戻り値がなく、void のみを使用でき、クラスは main() メソッドを 1 つだけ持つことができます。[main メソッドなしでは実行できません。]
(1) Java では、main メソッドはプログラムのエントリ ポイントです。Java アプリケーションを実行すると、JVM は main メソッドを探し、そこからプログラムの実行を開始します。public static void main(String[] args)
public はどこからでもメソッドにアクセスできることを意味し、static はメソッドがオブジェクトではなくクラスに属していることを意味し、 void はメソッドがアクセスできることを意味します。値は返されません。main はメソッド名で、String[] args はコマンドライン引数を含む文字列の配列です。
(2) Java では、メインメソッドとは、クラスに定義された main メソッドを指します。すべての Java アプリケーションには main メソッドが必要です。そうしないと、JVM はアプリケーションを実行できません。Java アプリケーションでは複数のクラスが存在できますが、main メソッドを含めることができるクラスは 1 つだけです。
[2] メソッド呼び出し
Java では、メソッド呼び出しとは、特定のタスクを実行するためにプログラム内のメソッドを呼び出すプロセスを指します。プログラムがメソッド呼び出しステートメントまで実行されると、メソッドの定義にジャンプし、メソッド内のコードが実行されます。メソッドが完了すると、プログラムはメソッド呼び出しステートメントに戻り、次のステートメントを続行します。
methodName(argument1, argument2, ..., argumentN);
MethodName は呼び出すメソッドの名前、argument1、argument2、...、argumentN はメソッドに渡される引数です。メソッドにパラメータが必要ない場合は、何も括弧で囲む必要はありません。
Java では、メソッドは値を返すことも、何も返さないこともできます。メソッドが値を返す場合、メソッド定義で戻り値の型を指定する必要があります。戻り値の型には、int、double、String などの任意の Java データ型を指定できます。メソッドが値を返さない場合、戻り値の型は void である必要があります。
public class MyClass {
public static void main(String[] args) {
int result = add(5, 10);
System.out.println(result);
}
public static int add(int a, int b) {
int sum = a + b;
return sum;
}
}
2 つの整数パラメータを受け取り、それらの合計を返す addNumbers というメソッドを定義します。main メソッドでは、addNumbers メソッドを呼び出し、その戻り値を result 変数に格納し、コンソールに出力します。
[3] メソッドの形式
メソッド名: メソッドの名前は、そのメソッドが何を行うのかを明確に説明する必要があります。メソッド名は通常、小文字で始まり、キャメルケースが使用されます。
パラメータ リスト: パラメータは、メソッドによって受け入れられる入力です。パラメータ リストはかっこで囲まれ、0 個以上のパラメータが含まれます。各パラメータは、スペースで区切られたタイプと名前で構成されます。パラメータはカンマで区切られます。
戻り値の型: メソッドは値を返すことができます。戻り値の型は戻り値の型を指定します。メソッドが値を返さない場合、戻り値の型は void です。
メソッド本体: メソッド本体には、メソッドの実際のコードが含まれます。メソッド本体は一対の中括弧で囲まれています。
public int add(int a, int b) {
int sum = a + b;
return sum;
}
//在这个例子中,方法名称是 add,参数列表是 (int a, int b),返回类型是 int,方法体是包含了两个整数相加的代码块。
[ 0 ] Java の main() メソッドの形式が固定されているのはなぜですか?
Java中main()方法的格式被固定为`public static void main(String[] args)`是因为这是Java虚拟机(JVM)在执行Java程序时的入口方法约定。
具体的な理由は次のとおりです。
-
メソッド名は「main」である必要があります。JVM は Java プログラムを実行するときに、プログラムのエントリ ポイントとして指定されたクラスから「main」という名前のメソッドを探します。「main」という名前のメソッドがないと、JVM はプログラムを開始できません。
-
戻り値の型は void です。main() メソッドの戻り値の型は void である必要があります。つまり、結果は返されません。これは、JVM が main() メソッドの実行後の戻り結果に注意を払わず、プログラム内の他のコード ロジックに従ってプログラムの実行フローを決定するためです。
-
パラメータ リストは String 配列です。main() メソッドのパラメータ リストには String 配列のパラメータが 1 つだけあります。このパラメータは、コマンド ラインによってプログラムに渡されるパラメータを受け取るために使用されます。たとえば、実行時に、
java MyProgram arg1 arg2
arg1 と arg2 が String 配列の要素として main() メソッドのパラメータ args に渡されます。 -
メソッド修飾子は public かつ static です。main() メソッドはプログラムのエントリ メソッドであり、JVM によって直接呼び出される必要があるため、外部から見えるようにするために public 修飾子を使用する必要があります。さらに、JVM が main() メソッドを実行する場合、クラスのインスタンスを作成する必要がないため、main() メソッドは静的静的メソッドとして宣言する必要があります。
要約すると、Java の main() メソッドの形式は、public static void main(String[] args)
プログラムのエントリ ポイントで JVM の要件を満たし、プログラムが正しく実行できるように固定されています。この形式の統一された規制は、開発者が Java プログラムを作成および保守するのにも便利です。
[ 1 ] 通常のメソッドの定義と呼び出し形式 ----> 注: メソッドは最初に定義してから呼び出す必要があります。そうしないと、プログラムはエラーを報告します。
//方法定义
public static void 方法名(){
方法体(就是打包起来的代码);}
//方法调用
方法名();
[2] メソッド定義とパラメータ付き呼び出し
(1) パラメータを使用したメソッドの定義と呼び出しには、次の利点があります。
コードの再利用性: メソッド定義とパラメーターを使用した呼び出しにより、再利用可能なコードを作成できます。パラメーターを受け取り、何かを実行するメソッドを作成できます。その後、プログラム内の複数の場所でメソッドを呼び出し、さまざまなパラメーターを渡すことができます。
コードの可読性: パラメーターを使用したメソッド定義と呼び出しにより、コードが読みやすく、理解しやすくなります。メソッド定義にパラメータを含めることで、メソッドの目的と期待される入力を明確に表現できます。メソッドを呼び出すと、メソッドに渡される値を明確に確認できます。
コードの柔軟性: パラメーターを使用したメソッド定義と呼び出しにより、コードをより柔軟にすることができます。メソッド定義にパラメータを含めることにより、メソッドの実装を変更せずに、そのメソッドの動作を簡単に変更できます。メソッドを呼び出すときにさまざまなパラメーターを渡すことで、さまざまな状況に合わせてメソッドの動作を簡単に変更できます。
(2) Java の戻りパラメータには型は必要ありませんか?
Java の構文に従って、メソッドのパラメータには型を指定する必要があります。これは、コンパイラがコンパイル時に引数が正しい型であることを確認できるようにするためです。メソッドから値を返したい場合は、戻り値の型を指定する必要があります。
(3) 例
public static void method(int num1,int num2){
int result = num1 + num2;
System.out.printIn(result);}
(4) フォーマット
//方法定义(单个参数)
public static void 方法名( 参数) ... ...
public static void method(int number){
...}
//多个参数
public static void 方法名( 参数1,参数2,..。 ...){
....}
public static void getSum(int number1, intnumber2 ){
。。。}
//方法使用(单个参数)
方法名( 参数);
method(变量);
(多个参数)
getSum(变量1,变量2)
知らせ:
メソッドが呼び出されるとき、パラメーターの数と型はメソッド定義のかっこ内の変数に対応している必要があります。そうでない場合、プログラムはエラーを報告します。
(5) 仮パラメータと実パラメータ
仮パラメータ: 仮パラメータの完全名 (仮パラメータ)、メソッド定義内のパラメータを参照します。
実パラメータ: 実パラメータ (実際のパラメータ) の完全名、メソッド呼び出し内のパラメータを参照します。
注意:方法调用时,形参和实参必须一一对应,否则程序将报错。
(6) 戻り値付きメソッドの定義と呼び出し
public static 返回值类型 方法名 (参数){
方法体;
return 返回值;
}
public static int getSum(int a, int b) {
int c=a+b;
return c;}
(7) fを戻り値メソッドで呼び出す方法
直接呼び出し:方法名(实参);
代入呼び出し:整数类型 变量名 = 方法名 (实参);
出力呼び出し:System.out.println(方法名 (实参));
[4] メソッドの完全な定義形式
public static返回值类型方法名 (参数) [
方法体;
return 返回值:
}
【5】使用方法の注意点
-
メソッドを呼び出さない場合、メソッドは実行されません。したがって、メソッドを作成してもそれを呼び出さなかったとしても、プログラムには影響しません。
-
Java では、メソッドとメソッドの間には水平的な関係があり、それらを入れ子にして定義することはできません。別のメソッドからメソッドを呼び出す必要がある場合は、そのメソッド内からそのメソッドを呼び出すことができます。
-
メソッドが記述される順序は、メソッドが実行される順序とは関係ありません。プログラム内のどこにでもメソッドを記述でき、プログラム内のどこからでもメソッドを呼び出すことができます。
-
メソッドの戻り値の型 (戻り値の型) は void であり、メソッドに戻り値がないことを意味します。メソッドが値を返す必要がない場合は、戻り値の型を void に設定する必要があります。この場合、return 文は省略できます。return ステートメントを作成している場合、特定のデータを追跡することはできません。
-
return ステートメントの下にコードを記述することはできません。コードは決して実行されず、無効なコードであるためです。return ステートメントの下にコードを書いた場合、そのコードは実行されません。
高品質の Java メソッド
メソッド名は明確であり、そのメソッドが何を行うのかを正確に説明する必要があります。
メソッドは 1 つのことだけを実行し、できるだけ短く簡潔にする必要があります。メソッドが長すぎるか複雑すぎる場合は、より小さなメソッドに分割することを検討する必要があります。
メソッドは読みやすく、保守しやすいものである必要があります。これは、他の人がコードを簡単に理解できるように、意味のある変数名とコメントを使用する必要があることを意味します。
メソッドには適切なエラー処理が必要です。これは、考えられるエラー状態を考慮し、それらを処理するコードを作成する必要があることを意味します。
メソッドには優れたプロパティが必要です。これは、過剰なループや再帰の使用を避け、可能な限り効率的なアルゴリズムとデータ構造を使用する必要があることを意味します。
他の
変数、メソッド、クラスには常にキャメルケースを使用してください。
コード ブロックが 1 行のみの場合でも、コード ブロック内では常に中括弧を使用してください。
不変変数を宣言するには、常に Final キーワードを使用してください。
起こり得る例外を処理するには、常に try-catch ブロックを使用してください。
最高のパフォーマンスと読みやすさを実現するために、Java 標準ライブラリで提供されているデータ構造とアルゴリズムを常に使用してください。
キーワードを返す
1. Java では、return キーワードを使用してメソッドを終了し、結果を返します。メソッドが値を返さない場合は、return キーワードを省略できます。ただし、メソッドに戻り値がある場合は、メソッドの終了を示し、結果を返す return キーワードを記述する必要があります。
2. メソッドに戻り値があるが、結果を返すためにメソッド本体で return キーワードを使用しない場合、Java はデフォルトでデフォルト値を返すことに注意してください。
メソッドのオーバーロード —> 同じクラス内の同じメソッド名と異なるパラメーターを持つメソッド。戻り値に関係のないパラメータが異なる:数値が異なる、型が異なる、順序が異なる
メソッドのオーバーロードとは、同じクラス内で、同じメソッド名で異なるパラメーター リストを持つ複数のメソッドを定義できることを意味します。== これを行う利点は、コードの再利用性と可読性が向上することです。
1. 同一クラス内に同名のメソッドが複数定義されている 同名のメソッドは同じ機能を有する 2. 各メソッドの
パラメータの型やパラメータ数が異なる これらの同名のメソッドはオーバーロードとなる。関係
[1] Javaではメソッドのオーバーロードは以下の条件を満たす必要があります。
メソッド名は同じですが、
パラメータリスト1が異なります(パラメータの種類、パラメータ番号、パラメータの順序が異なります)
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public double add(double a, double b) {
return a + b;
}
}
Calculator クラスがあり、2 つの整数と 2 つの浮動小数点数をパラメータとして受け入れる 2 つのメソッド add を定義しているとします。
Calculator calculator = new Calculator();
int result1 = calculator.add(1, 2);
double result2 = calculator.add(1.0, 2.0);
メソッドのオーバーロードはパラメータ リストにのみ関連しており、メソッドの戻り値の型 (return type) やアクセス修飾子 (modifier) [(public、private、protected など)] とは何の関係もないことに注意してください。 。したがって、次のコードは不正です。
public class Calculator {
public int add(int a, int b) {
return a + b;
}
// 编译错误:与上一个方法的参数列表相同
public int add(int x, int y) {
return x + y;
}
}
【2】注意事項:
Java 仮想マシンは、同じ名前のメソッドを異なるパラメータによって区別します。
public class MethodDemo {
public static int sum (int a, int b) {
return a + b;
public static int sum (int a, int b, int c) {
return a + b + c;}
sum(1, 2a);
sum(1, 20,30);
}
メソッドの多重定義(メソッドの多重定義)では、次の点に注意する必要があります。
メソッド名は同じでパラメータリストが異なりますが、戻り値の型(戻り値の型)とアクセス修飾子は異なる場合があります。
異なるパラメータ リストには、異なるパラメータ タイプ、パラメータ番号、およびパラメータ シーケンスが含まれます。
メソッドを呼び出すとき、コンパイラは、渡されたパラメータの型と数に基づいて呼び出すメソッドを決定します。
2 つのメソッドのパラメータ リストが戻り値の型だけが異なる場合、2 つのメソッドはオーバーロードを構成できず、コンパイル エラーが発生します。
さらに、次の点に注意する必要があります。
メソッドのオーバーロードは、同じクラス内でのみ実行できます。
メソッドのオーバーロードは、パラメーター名またはパラメーター修飾子だけでは区別できません。
メソッドのオーバーロードはパラメータの種類だけでは区別できず、パラメータの数や順序も考慮する必要があります。
在实际编程中,方法的重载可以提高代码的复用性和可读性,但是需要注意不要滥用方法的重载,否则会导致代码难以维护和理解。
メソッドのオーバーロードの利点は次のとおりです。
可読性の向上: メソッド名は同じですが、パラメータのタイプと番号が異なるため、コードがより明確で理解しやすくなります; 柔軟性の向上: 同じメソッド名を複数回使用できますが、パラメータのタイプと番号は異なり
ますさまざまなニーズに対応できるため、
プログラミングが簡単で、同様のメソッドを多数作成する必要がなくなり、コードの再利用性が向上します。
public (パブリック) または static (静的)
クラスのオブジェクトを作成するとき、実際にはオブジェクトのプロパティとメソッドを格納するためにメモリ内に領域を割り当てます。パブリック メソッドはオブジェクト インスタンスに関連付けられているため、オブジェクトを通じてのみ呼び出すことができます。この利点は、異なるオブジェクト インスタンス間でメソッドのコードを共有できることですが、各オブジェクト インスタンスは独自のプロパティ値を持つことができることです。
対照的に、静的メソッドはオブジェクト インスタンスではなく、クラス自体に関連付けられます。静的メソッドは、クラスのオブジェクトを作成せずに直接呼び出すことができます。これは、クラスがロードされたときに静的メソッドがすでにメモリ内に存在しており、それらにアクセスするためにオブジェクト インスタンスを必要としないためです。
public class MyClass {
// 静态方法
public static void myStaticMethod() {
System.out.println("这是一个静态方法");
}
// // 公共方法
// public void myPublicMethod() {
// System.out.println("这是一个公共方法");
// }
public static void main(String[] args) {
myStaticMethod(); // 可以直接调用静态方法
// MyClass myObj = new MyClass(); // 创建一个对象
// myObj.myPublicMethod(); // 通过对象调用公共方法
}
}
比較すると次の結果が得られます。
// 静的メソッドはクラスのオブジェクトを作成せずに直接呼び出すことができます。これは、クラスがロードされたときに静的メソッドがすでにメモリ内に存在しており、それらにアクセスするためのオブジェクト インスタンスが必要ないためです。
// Java では、クラスがメモリにロードされると、静的メソッドもロードされてメモリに保存されます。これは、クラスのオブジェクトを作成せずに、クラス名によって静的メソッドを直接呼び出すことができることを意味します。これは、静的メソッドがオブジェクトのインスタンスに関連付けられておらず、クラス自体に関連付けられているためです。
静的メソッドの存在には、いくつかの利点があります。
// クラス名を介して直接呼び出す: 静的メソッドはオブジェクト インスタンスではなくクラス自体に関連付けられているため、クラスのオブジェクトを作成せずにクラス名を介して直接静的メソッドを呼び出すことができます。
// 共有コード: 静的メソッドは、異なるオブジェクト インスタンス間でコードを共有できます。これは、各オブジェクト インスタンスが独自のメソッドのコピーを持つことなく、複数のオブジェクト インスタンスが同じ静的メソッドを使用できることを意味します。
// オブジェクト プロパティにアクセスする必要はありません。静的メソッドはオブジェクト インスタンスに依存しないため、オブジェクト プロパティにアクセスできません。これにより、静的メソッドの独立性と信頼性が高まり、オブジェクトの状態に関係なく実行できるようになります。
// ただし、静的メソッドは静的メンバー変数と静的メソッドのみにアクセスできるため、非静的メンバー変数と非静的メソッドにはアクセスできないことに注意してください。
メソッドの保存方法
Java では、メソッドはクラス ファイルに格納されます。Java コードを作成してコンパイルすると、コンパイラは、クラスのすべてのメソッドのバイトコードを含むクラス ファイルを生成します。これらのバイトコードは、実行時にメソッドを実行する方法を JVM に指示します。
クラス ファイル内のメソッドのバイトコードを確認したい場合は、Java デコンパイラを使用できます。たとえば、javap コマンドを使用してクラス ファイルを逆コンパイルし、そのファイル内のメソッドを表示できます。
によって与えられたカーソルコード
以下は、クラス ファイルの例のメソッド バイトコードです。
public class Example {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
逆
コンパイルされたバイトコード:
public class Example {
public static void main(java.lang.String[]);
Code:
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String Hello, world!
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return}
プリミティブ データ型と参照データ型
基本的なデータ型:
##整数型、浮動小数点型、ブール型、文字型。
Java では、== プリミティブ データ型は値によって格納されます。== これは、基本データ型の変数を宣言すると、コンピューターが変数の値を保存するために一定量のメモリ領域を割り当てることを意味します。これらの基本データ型には、byte、short、int、long、float、double、char、boolean が含まれます。
すべてのプリミティブ データ型にはデフォルト値があり、変数に値を割り当てないと、変数はデフォルト値に初期化されます。たとえば、int 型のデフォルト値は 0、boolean 型のデフォルト値は false です。
記憶の観点から見ると
プリミティブ データ型の値は、ヒープではなくスタックに直接保存されます。これにより、値にアクセスするためにプリミティブ データ型を参照する必要がなくなるため、プリミティブ データ型へのアクセスが高速になります。
Java では、これらの基本データ型には、Byte、Short、Integer、Long、Float、Double、Boolean、Character などの対応するラッパー クラスがあります。これらのラッパー クラスは、プリミティブ データ型から文字列への変換、文字列からプリミティブ データ型への変換など、多くの便利なメソッドを提供します。
int myInt = 42;
double myDouble = 3.14159;
boolean myBoolean = true;
char myChar = 'a';
参照データ型: 新しいもの、アドレス値
参照データ型には、クラス、インターフェイス、配列などが含まれます。
参照データ型の変数には、オブジェクト自体ではなく、オブジェクトへの参照が格納されます。これは、オブジェクトを作成するときに、実際にヒープ メモリ内にスペースを割り当て、そのスペースへの参照を返すことを意味します。したがって、参照データ型の変数には、実際にはメモリ内のオブジェクトのアドレスが格納されます。
保管方法
参照型変数を宣言すると、Java はオブジェクトの参照を格納するために変数にメモリ空間を割り当てます。オブジェクトを作成すると、Java はヒープ メモリ内にオブジェクト用のスペースを割り当て、そのスペースへの参照を返します。その参照を変数に割り当てて、変数がオブジェクトを指すようにすることができます。変数を使用すると、Java は変数に格納された参照に基づいてメモリ内のオブジェクトの場所を見つけ、それを操作します。
参照データ型のデータ値は他の空間に格納され、アドレス値は独自の空間に格納されることをどのように理解するか。
Javaの規定により、基本データ型の変数は直接値を格納しますが、参照データ型の変数はオブジェクトのアドレス値を格納します。これは、オブジェクトを作成するときに、Java がヒープ メモリ内にオブジェクト用のスペースを割り当て、オブジェクトのアドレス値を返すことを意味します。その後、そのアドレス値を使用してオブジェクトにアクセスできます。したがって、参照データ型のデータ値はヒープメモリに格納され、変数自体はオブジェクトのアドレス値を格納するだけになります。
//以下是一个示例,说明如何创建一个对象并访问其属性:
public class Person {
String name;
int age;
}
public class Main {
public static void main(String[] args) {
// 创建一个Person对象
Person person = new Person();
person.name = "Alice";
person.age = 25;
// 访问该对象的属性
System.out.println("Name: " + person.name);
System.out.println("Age: " + person.age);
}
}
上の例では、「person」という名前の Person オブジェクトを作成し、その名前と年齢のプロパティを「Alice」と 25 に設定しました。次に、オブジェクトのアドレス値を使用して、そのプロパティにアクセスします。したがって、参照データ型のデータ値はヒープメモリに格納され、変数自体はオブジェクトのアドレス値を格納するだけになります。
メモリの観点から見ると、データ値は他の空間に格納され、アドレス値は独自の空間に格納されます。
参照データ型の値はスタックではなくヒープに保存されます。これは、参照データ型の値へのアクセスは、直接ではなく参照によって行う必要があることを意味します。したがって、参照データ型へのアクセスは、プリミティブ データ型へのアクセスよりも遅くなります。
String myString = "Hello World";
Object myObject = new Object();
int[] myArray = {
1, 2, 3, 4, 5};
この例では、myString は String 型の参照データ型、myObject は Object 型の参照データ型、myArray は int 型の配列であり、これも参照データ型です。
メソッドの値の転送 -> メモリの観点から見たメソッドの値の転送: Java のパラメータ転送は値の転送です。つまり、メソッド内のパラメータの変更は元の変数の値には影響しません。
(1) Java の規則に従って、すべてのパラメータは値によって渡されます。これは、プリミティブ型またはオブジェクト型が引数としてメソッドに渡されるとき、実際に渡されるのはその値のコピーであることを意味します。したがって、メソッド内でパラメータの値を変更しても、元の値は変更されません。渡された引数がオブジェクトの場合、コピーとオリジナルは同じオブジェクトを参照します。したがって、メソッド内でオブジェクトの状態を変更すると、その変更は元のオブジェクトに反映されます。
(2) Java でのパラメータの受け渡しは値の受け渡しです。メモリの観点から見ると、メソッドが呼び出されると、スタック メモリ内にそのメソッド用の新しいスタック フレームが作成されます。スタックフレームにはメソッドのパラメータ、ローカル変数、戻り値などの情報が含まれます。パラメータがメソッドに渡されるとき、パラメータ自体をメソッドに渡すのではなく、実際にはパラメータの値のコピーがメソッドに渡されます。したがって、メソッド内のパラメーターを変更しても、元の変数の値には影響しません。
いくつかのコード例:
GCD
public class PrimeNumbers {
public static int gcd(int a, int b) {
return b != 0 ? gcd(b, a % b) : a;
}
}
LCM
public class PrimeNumbers {
public static int gcd(int a, int b) {
return b != 0 ? gcd(b, a % b) : a;
}
public static int lcm(int a, int b) {
return a / gcd(a, b) * b;
}
public static void main(String[] args) {
System.out.println(gcd(12, 123));
}
}
エスペラント語のふるい:
import java.util.Scanner;
public class PrimeNumbers {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int max = 100000001;
int[] arr = new int[max];
int n = scanner.nextInt();
int cnt = 0;
for (int i = 1; i < max; i++) {
arr[i] = 1;
}
for (int i = 2; i <= n; i++) {
if (arr[i] == 1) {
System.out.println(i);
cnt++;
}
for (int j = i * i; j <= n; j += i) {
arr[j] = 0;
}
}
System.out.println(cnt);
}
}
パラメーター リストは、関数またはメソッド定義にリストされる変数のリストです。これらの変数は関数またはメソッドへの入力であり、その値は関数またはメソッド内で使用できます。通常、パラメータ リストはかっこで囲まれ、変数名と型はカンマで区切られます。↩︎