この記事では、java に関する関連知識を提供します。主に、オブジェクト指向の基本的な特性、オブジェクト間の関係など、Java オブジェクト指向に関連する問題を紹介します。ヘルプ。
推奨学習: 「java チュートリアル 」
人々は、難解な専門トレーニングなしでプログラムでき、今日の標準的な慣行に準拠したシステムを構築したいと考えています。したがって、C は適さないと思われがちですが、Java はシステムを理解しやすくするために可能な限り C に近づけるように設計されており、C のほとんど使用されない、理解しにくい、混乱を招く機能の多くを排除しています。現時点では、これらの機能は良いことよりもはるかに多くの問題を引き起こします。
確かに、Java 構文は C 構文の「純粋な」バージョンです。ヘッダー ファイル、ポインター算術 (またはポインター構文)、構造体、共用体、演算子のオーバーロード、仮想基本クラスなどはありません。ただし、設計者は C の不適切な機能をすべて削除しようとしたわけではありません。たとえば、switch ステートメントの構文は Java では変更されていません。 C の知識がある場合は、Java 構文に簡単に変換できることがわかります。
Java がリリースされたとき、C は実際には最も一般的に使用されるプログラミング言語ではありませんでした。多くの開発者は、Visual Basic とそのドラッグ アンド ドロップ プログラミング環境を使用しています。これらの開発者は Java を簡単だとは思っていません。 Java 開発環境が追いつくまでには何年もかかりました。現在、Java 開発環境は、他のほとんどのプログラミング言語をはるかに超えて進化しています。
シンプルさのもう 1 つの側面は、小ささです。 Java の目標の 1 つは、小型マシン上で独立して実行できるソフトウェアの開発をサポートすることです。基本的なインタプリタとクラス サポートはわずか約 40 KB ですが、基本的な標準クラス ライブラリとスレッド サポート (基本的に自己完結型マイクロカーネル) を追加すると、約 175 KB が追加されます。
当時としては、これは驚くべき成果でした。もちろん、継続的な拡張により、クラス ライブラリはすでにかなり大きくなっています。現在、組み込みデバイスに適した、より小規模なクラス ライブラリを備えた別の Java Micro Edition (JavaMicroEdition) が存在します。
オブジェクト指向は、新しいプログラミング手法、または新しいプログラミング仕様であり、その基本的な考え方はオブジェクトを使用することです。プログラミングには、クラス、継承、カプセル化、ポリモーフィズムが使用されます。現実世界に客観的に存在するもの(オブジェクト)を基にしてソフトウェアシステムを構築し、人間の自然な思考を可能な限り活用してシステム構築を行います。
ユーザーにとって、分散システムは、ユーザーが必要とするサービスを提供するサーバーに過ぎませんが、実際には、これらのサービスを構成する分散システムです。その背後には多数のサーバーが配置されているため、分散システムはスーパーコンピューターのように見えます。
プログラムはさまざまなシステムで確実に実行される必要があるため、Web のマルチプラットフォーム環境ではプログラムに特別な要件があります。したがって、Java を設計する際には、堅牢なプログラムを作成する能力が高い優先順位を与えられました。信頼性を実現するために、Java はいくつかの重要な領域に制限を課しているため、プログラマはプログラム開発の早い段階でエラーを検出する必要があります。同時に、プログラマーは、プログラミング エラーを引き起こす最も一般的な問題の多くについて心配する必要がなくなります。 Java は厳密に型指定された言語であるため、コンパイル時にコードをチェックします。もちろん、何にせよ、コードは実行時にもチェックされます。追跡が難しいバグの多くは、実行時に再現することが困難であることが多く、Java ではこれが発生することはほとんど不可能です。なぜなら、書かれたプログラムをさまざまな動作条件下で予測可能な方法で実行できるようにすることは、Java の重要な機能の 1 つだからです。 Java がどれほど堅牢であるかをより深く理解するために、プログラム障害の 2 つの主な原因、つまりメモリ管理エラーとハンドルされない例外 (つまり、実行時エラー) を分析してみましょう。従来のプログラミング環境では、メモリ管理は困難で退屈な作業です。たとえば、C/C では、プログラマはすべての動的メモリを手動で割り当てて解放する必要があります。プログラマが以前に割り当てられたメモリを解放し忘れたり、さらに悪いことに、プログラムの他の部分でまだ使用されているメモリを解放しようとしたりするため、これにより問題が発生することがあります。 Java は、メモリの割り当てと割り当て解除を管理することで、基本的にこれらの問題を解決できます (実際、Java は使用されなくなったオブジェクトのガベージ コレクションを提供するため、メモリの解放は完全に自動的に行われます)。従来の環境における例外は、多くの場合、「ゼロ除算」または「ファイルが見つかりません」エラーによって発生し、不器用で理解しにくい構造を使用して管理する必要があります。 Java は、オブジェクト指向の例外処理機能を提供することで、この分野に役立ちます。適切に作成された Java プログラムでは、すべてのランタイム エラーはプログラムによって管理できますし、管理する必要があります。
Java は強力だが危険なポインタをキャンセルし、参照に置き換えました。ポインタは移動操作を実行できるため、この領域が利用可能であるかどうかに関係なく、ポインタは任意のメモリ領域を指すことができますが、このメモリ アドレスには重要なデータが格納されているか、他のプログラムによって占有されている可能性があり、ポインタを使用することは危険です。配列が範囲外になりやすい。
ガベージ コレクション メカニズム: プログラマはメモリのリサイクルを直接制御する必要はなく、ガベージ コレクタはバックグラウンドで未使用のメモリを自動的に再利用します。プログラムが時間内のリサイクルを忘れてメモリ リークを引き起こすことを防ぎます。プログラムのコア クラス ライブラリのメモリをリサイクルする際のプログラム エラーによってシステム クラッシュが発生することを回避します。
例外処理メカニズム: Java 例外メカニズムは主に、try、catch、finally、throw、throws の 5 つのキーワードに依存します。
強制型変換: 強制変換は、強制変換ルールが満たされている場合にのみ成功します。
Java は、バイトコードの送信中に公開キー暗号化 (PKC) を使用します。
実行環境に 4 つのレベルのセキュリティ メカニズムを提供します: バイトコード ベリファイア - クラス ローダー - ランタイム メモリ レイアウト - ファイル アクセス制限。
コンパイラは、アーキテクチャに中立なオブジェクト ファイル形式を生成します。これは、Java ランタイムがある限り使用できるコンパイル済みコードです。システム。多くのプロセッサ上で実行できます。 Java コンパイラは、特定のコンピュータ アーキテクチャに依存しないバイトコード命令を生成することでこの機能を実現します。適切に設計されたバイトコードは、どのマシンでも簡単に解釈して実行できるだけでなく、ローカル マシン コードにすばやく変換することもできます。
バイトコードは構造に中立であり、コンピューターの構造とは何の関係もありません。
Java 言語の最大の特徴は移植性のサポートです。いわゆる移植性とは、同じプログラムを異なるオペレーティング システムで使用できることを意味します。任意にデプロイできます。 Java で移植性の制御を実現したい場合は、主に JVM (Java Virtual Machine) に依存します。 Java 仮想マシンは、ソフトウェアとハードウェアによってシミュレートされたコンピュータであり、Java 仮想マシンでサポートされている限りすべてのプログラムを実行でき、オペレーティング システムごとに異なるバージョンの JVM が存在するため、移植性が可能です。
著作権は作者に帰属します。商業転載の場合は作者に許可を、非商業転載の場合は出典を明記してください。
Java はコンパイルされていると言う人もいます。すべての Java コードはコンパイルする必要があるため、コンパイルしないと .java を実行できません。 Java はインタープリターであると言う人もいます。 Java コードはコンパイル直後に実行できないため、JVM 上で解釈されて実行されます。
ジャストインタイム コンパイラは、頻繁に実行されるコードを監視し、速度を上げるために最適化することができます。より複雑な最適化は、関数呼び出し (つまり、インライン化) を排除することです。ジャストインタイム コンパイラは、どのクラスがロードされたかを認識します。インライン化は、現在ロードされているクラスのセットに基づいて特定の関数がオーバーライドされない場合に使用できます。必要に応じて、最適化を元に戻すこともできます。
とは、このプログラム (プロセス) の実行中に複数のスレッドが生成されることを指します。
Java は本質的に静的言語であり、動的言語ではありません。動的言語の大きな特徴は、プログラムの実行中にプログラムの構造や変数の型を変更できることであり、代表的な動的言語としては、Python、ruby、javascriptなどが挙げられます。 Java は動的言語ではありませんが、Java にはある程度のダイナミクスがあり、それが次の側面に反映されています:
オブジェクトは、システム内の客観的なものを記述するために使用されるエンティティであり、システムAの基本単位を構成します。オブジェクトは、プロパティのセットと、プロパティのセットに対して動作するサービスのセットで構成されます。
クラスのインスタンス化によりオブジェクトが生成されます。オブジェクトのライフサイクルには、生成、使用、削除の 3 つの段階が含まれます。
オブジェクトへの参照がない場合、そのオブジェクトは役に立たないオブジェクトになります。 Javaのガベージコレクタは、オブジェクトの動的メモリ領域を自動的にスキャンし、参照されていないオブジェクトをガベージとして収集し、解放します。システムでメモリが不足するか、System.gc() を呼び出してガベージ コレクションが必要になると、ガベージ コレクション スレッドがシステムと同期して実行されます。
クラスは、同じプロパティとメソッドを持つオブジェクトのコレクションであり、内部のプロパティとメソッドを含む、クラスに属するすべてのオブジェクトの統一された抽象的な説明を提供します。主要な部分。オブジェクト指向プログラミング言語では、クラスは独立したプログラム単位であり、クラス名があり、属性とメソッドという 2 つの主要部分が含まれている必要があります。
Java でのクラス実装は、クラス宣言とクラス本体の 2 つの部分で構成されます。
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]{……}
このうち、修飾子 public、abstract、final はクラスの属性を記述し、className はクラス名、superclassName はクラスの属性を記述します。クラスの親クラス Name、interfaceNameList は、クラスによって実装されるインターフェイスのリストです。
class className{ [public | protected | private ] [static] [final] [transient] [volatile] type variableName;//成员变量 [public | protected | private ] [static] [final | abstract] [native] [synchronized] returnType methodName([paramList]) [throws exceptionList]{ statements }//成员方法 }
メンバ変数修飾子の意味:
の実装このメソッドには、メソッド宣言とメソッド本体という 2 つの部分も含まれています。
メソッド宣言には、メソッド名、戻り値の型、および外部パラメーターが含まれます。パラメーターの型は、単純データ型または複合データ型 (参照データ型とも呼ばれます) にすることができます。
単純なデータ型の場合、Java は値転送を実装します。メソッドはパラメータの値を受け取りますが、これらのパラメータの値を変更することはできません。パラメーターの値を変更する場合は、参照データ型を使用します。これは、参照データ型はメモリ内のデータのアドレスをメソッドに渡し、メソッド内のデータに対する操作によってデータの値が変更される可能性があるためです。 。
メソッド本体はメソッドの実装であり、ローカル変数の宣言とすべての正当な Java 命令が含まれます。メソッド本体で宣言されたローカル変数のスコープはメソッド内です。ローカル変数がクラス メンバー変数と同じ名前を持つ場合、クラス メンバー変数は非表示になります。
パラメータをクラスのメンバー変数と区別するには、これを使用する必要があります。これは、現在のオブジェクトを参照するためにメソッドで使用され、その値はメソッドを呼び出したオブジェクトです。戻り値は、戻り値の型と一致しているか、まったく同じであるか、そのサブクラスである必要があります。戻り値の型がインターフェイスの場合、戻り値はインターフェイスを実装する必要があります。
Java のコメントは、コードを説明するために使用されます。 , Javaのアノテーションは実行されないので、自由にアノテーションを追加してください。
package com.nezha.javase; public class Test1107 { private int score; /** * x为显式参数 * score为隐式参数 * @param x */ public void addScore(int x){ int temp = this.score + x; score += temp; } }#xx は明示的なパラメータです
この演算子は、このクラスを表すため、暗黙的なパラメーターの前に追加することをお勧めします。
7. 可変パラメータを持つメソッドSystem.out.println("获奖编号:"+i);
public PrintStream printf(String format, Object ... args) { return format(format, args); }
Object を呼び出します...パラメータの型は Object[] とまったく同じです。つまり...この宣言メソッドを使用して、同じ型ですが固定されていません 可変パラメータである配列のサイズ。
ここの省略記号は、このメソッドが任意の数のオブジェクトを受け取ることができることを示す Java コードの一部です。 実際には、printf メソッドは 2 つのパラメータを受け取ります。1 つはフォーマット文字列で、もう 1 つはすべてのパラメータを格納する Object[] 配列です (パラメータが基本型の場合、自動ボックス化によりオブジェクトに変換されます)。
コンパイラーは、パラメーターを配列にバインドし、必要に応じてオートボクシングを実行するために、各呼び出しを printf に変換する必要があります。
4. オブジェクト指向の基本的な特徴
(1)可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。
(2)封装的优点
(3)代码实例
package com.nezha.javase; public class Student { //将 id、name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。 private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
子类的对象拥有父类的全部属性与方法,称作子类对父类的继承。
Java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。super 的使用有三种情况:
对象的多态性是指在父类中定义的属性或方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或方法在父类及其各个子类中具有不同的语义。
Java的多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。
依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。
关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言中,关联关系一般使用成员变量来实现。
アグリゲーション (集約) 関係は、関連関係の一種であり、強い関連関係です。集合体とは、全体と個人との関係です。例えば、自動車というカテゴリーと、エンジンやタイヤなどの部品カテゴリーとの関係は、全体と個の関係です。関連関係と同様に、集約関係もインスタンス変数を通じて実装されます。ただし、関連付け関係に含まれる 2 つのクラスは同じレベルにありますが、集約関係では 2 つのクラスは等しくないレベルにあり、1 つは全体を表し、もう 1 つは部分を表します。
Composition (合成) 関係は、関連付け関係の一種であり、集約関係よりも強力な関係です。通常の集約関係では全体を表すオブジェクトが、そのオブジェクトの一部のライフサイクルを表す責任を負う必要があり、組み合わせ関係を共有することができない。全体を表すオブジェクトは、部分オブジェクトを存続させ、場合によっては部分を担当するオブジェクトを消滅させる責任を負う必要があります。全体を表すオブジェクトは、部分を表すオブジェクトを、このオブジェクトのライフサイクルを担当する別のオブジェクトに渡すことができます。言い換えれば、パーツを表すオブジェクトは、各瞬間に 1 つのオブジェクトとのみ組み合わせることができ、後者がライフサイクルに対して排他的に責任を負います。部品には全体と同じライフサイクルがあります。
推奨学習: 「java 学習チュートリアル 」
以上がJava オブジェクト指向について簡単に説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。