blog

ONE------Java の基本

ポリモーフィズムとは、同じ操作を異なるオブジェクトに適用すると異なる結果が得られることを意味します。 オーバーロードとオーバーライドは、Java ポリモーフィズムの異なる表現方法です。 - の場合、基...

Mar 15, 2020 · 8 min. read
シェア

1、Java言語の利点は何ですか?

- Javaは純粋なオブジェクト指向言語

- プラットフォーム非依存

- Javaには、開発者の作業を簡素化する組み込みライブラリが多数用意されています。たとえば、ごみ収集機能があり、開発者はメモリの管理から解放されます。

2、オブジェクト指向の特徴は?

- 抽象化: 抽象化とは、オブジェクトのクラスに共通する特徴を要約してクラスを構築するプロセスです。

- 継承: 継承とは、既存のクラスから継承情報を取得して新しいクラスを作成することです。継承情報を提供するクラスを親クラス、継承情報を受け取るクラスを子クラスと呼びます。

- カプセル化(Encapsulation): データを操作するメソッドとデータを結びつけることで、定義されたインターフェイスを通してのみデータにアクセスできるようにすること。

- ポリモーフィズム。

3、ポリモーフィック実装メカニズム

ポリモーフィズムとは、異なるオブジェクトに対して同じ操作を行うと、異なる結果が得られることを意味します。

ポリモーフィズムは主にメソッドのオーバーロードと書き換えの2つの方法で表現されます。

4、オーバーロードと書き換えの違い

オーバーロードと書き換えは、Javaのポリモーフィズムの表現方法の違いです。

- オーバーロード:クラスが同じ名前で複数のメソッドを定義し、メソッド名は同じでなければならず、パラメータは異なる型、異なる数、異なる順序でなければなりません。

- オーバーライド:サブクラスと親クラスの間で発生し、メソッド名とパラメータ・リストが同じである必要があり、オーバーライドするには、サブクラスのオーバーライドされたメソッドが親クラスのオーバーライドされたメソッドと同じ戻り値型を持つ必要があります。親クラスのメソッド・アクセス修飾子が private の場合、サブクラスは親クラスのメソッドをオーバーライドできません。

5、JAVAの基本データ型は何ですか? Stringは基本データ型ですか?

文字列は基本データ型ではなく、参照型であるオブジェクトとして定義されています。

6、intとIntegerの違いは何ですか?

基本データ型をオブジェクトとして操作するために、Javaでは各基本データ型に対応するラッパー型を導入しています。 intのラッパークラスはIntegerで、Java 5からオートボックス/アンボックスのメカニズムが導入され、2つの型を相互に変換できるようになりました。

7、自動梱包と開梱

パッキング:基本型を対応する参照型でラップすること

アンボクシング:ラップされた型を基本データ型に変換

8、JavaのMath.round(-1.5)はどのくらいに等しいですか?

1に等しい、ラウンドは四捨五入を意味し、実装の原理は、0.5の最初の増加の数に基づいており、そのようなMath.round(-1.6)= -2、Math.round(-1.4)= -1のように、切り捨てます。

9.&と&&の違い

はビット演算子で、ビット演算と演算を意味し、&& は論理演算子で、論理と演算を意味します。

10.==メソッドとequalsメソッドの違いは何ですか?

- の場合、変数の基本データ型の役割は、その格納された "値 "の直接比較は等しいです。例えばint n=3;int m=3;n==mである。

参照型変数の場合は、その変数が指すオブジェクトのアドレスを比較します。例えばString str1 = new String("hello"); String str2 = new String("hello"); str1==str2は偽である。

- equals メソッドについては、equals メソッドは基本データ型の変数では動作しないことに注意してください。

equals メソッドがオーバーライドされていない場合、参照変数が指すオブジェクトのアドレスを比較します;

String、Dateなどのクラスはequalsメソッドをオーバーライドして、指されたオブジェクトの内容を比較します。

11, String str = "i" と String str = new String ("i") は同じですか?

String str="i "の場合、Java Virtual Machineは定数プールに割り当てられ、String str=new String("i")の場合はヒープメモリに割り当てられます。

12、StringとStringBuilder、StringBufferの違い

- どちらも最終クラスで、継承はできません。

- どちらも文字列を格納し、操作することができます。このうちStringは読み取り専用の文字列で、Stringが参照する文字列の内容を変更することはできません。StringBuffer/StringBuilderクラスは、直接変更できる文字列オブジェクトを表します。

- StringBufferはスレッドセーフですが、StringBuilderはそうではありません。ただし、両者のメソッドはすべて同じで、StringBuffer は StringBuilder のメソッドの上に synchronized 修飾子を追加してスレッドセーフを保証します。

- StringBuilder は StringBuffer よりもパフォーマンスが優れています。

この3つの使い方のまとめはこちら:

  1. 少量のデータを操作= String
  1. 文字列バッファの下で大量のデータをシングルスレッドで操作 = StringBuilder
  2. 文字列バッファ = StringBuffer の下で大量のデータをマルチスレッドで操作

13.抽象クラスは抽象メソッドを持たなければなりませんか?

抽象クラスは抽象メソッドを持つ必要はありません。



14、通常のクラスと抽象クラスの違いは何ですか?

通常のクラスは抽象メソッドを含むことができず、抽象クラスは抽象メソッドを含むことができます。

抽象クラスは直接インスタンス化できず、通常のクラスは直接インスタンス化できます。

15.抽象クラスとインターフェースの違いと共通点は何ですか?

- 実装: 抽象クラスのサブクラスは extends を使って継承します。

- コンストラクタ: 抽象クラスはコンストラクタを持つことができますが、インターフェースは持つことができません。

- main メソッド: 抽象クラスは main メソッドを持つことができ、それを実行することができます。

- 実装数: クラスは多くのインターフェースを実装することができますが、抽象クラスから継承できるのは1つだけです。

- アクセス修飾子: インターフェイスのメソッドは、デフォルトでは public で修飾されます。

16、final、finally、finalize の違いを説明してください。

- finalは、変数、メソッド、クラスの宣言の3通りの使い方ができる修飾子です。

finalと宣言された変数は、宣言時に初期値が与えられなければなりません。

また、final と宣言されたメソッドはサブクラスでのみ使用でき、オーバーライドすることはできません。

final と宣言されたクラスは、新しいサブクラスを派生できない、つまり継承できないことを意味します。

- 例外処理の一部としてのfinally。通常はtry...catch文の後に置かれ、コードのブロックを伴います。プログラムの正常な実行や例外の発生にかかわらず、この文は最終的に実行されなければならないことを示します。

- finalize は、Object クラスで定義されているメソッドで、回収したオブジェクトの finalize( ) メソッドをごみコレクターが実行するときに呼び出されます。 このメソッドをオーバーライドして、ファイルを閉じるなど、他のリソースを回収することもできます。

17. hashCode( ) と equals( )

hashCode()はObjectクラスから継承され、また、2つのオブジェクトが等しいかどうかを識別するために使用されます。hashCode()は、コレクションでのみ使用され、hashCode()は、メモリ内のオブジェクトのアドレスをint型値に変換して返します。

Mapのキーのオブジェクトが繰り返されることはできませんので、コレクションにオブジェクトが、最初のオブジェクトは、オブジェクトの場所を決定するためにハッシュコード値を計算するために参加するだけでなく、比較のためのオブジェクトのハッシュコード値に追加されている他のオブジェクトと、コレクションにオブジェクトと等しくない場合;

同じハッシュコード値を持つオブジェクトを見つけたら、equals() メソッドを呼び出して、同じハッシュコード値を持つオブジェクトが本当に同じかどうかをチェックします。もし同じであれば、HashSet は結合操作を成功させません。異なる場合は、ハッシュは別の場所に再ハッシュされます。

hashCode( ) および equals( ) に関する規定

- 2つのオブジェクトが等しい場合、ハッシュコードも同じでなければなりません。

- 2つのオブジェクトが等しい場合、それぞれのオブジェクトに対してequalsを呼び出すと、trueが返されます。

- 2つのオブジェクトが同じハッシュコード値を持つ場合、それらは必ずしも等しいとは限りません。

- したがって、equals メソッドをオーバーライドする場合は、hashCode メソッドもオーバーライドする必要があります。

18.staticキーワードの効果は?

- static は変数を変更します:

Javaには、staticで変更される静的変数と、staticでは変更されないインスタンス変数の2種類があります。

静的変数はクラスに属し、クラスがロードされたときに初期化され、すべてのクラスで共有されます。静的変数の参照方法には、「クラス名.Static Variables" と "Object.静的変数" です。

インスタンス変数はオブジェクトに属し、オブジェクトが作成された後、インスタンスオブジェクトに使用する領域が割り当てられます。インスタンス変数"

- staticはメソッドを変更します:

静的メソッドは一般にスタティックメソッドと呼ばれます。なぜなら、スタティックメソッドはオブジェクトに依存せずにアクセスできるからです。したがって、静的メソッドには this はありません。オブジェクトに依存しないので、オブジェクトが存在しないのですから、this も存在しません!

静的メソッドは静的メンバにしかアクセスできません。

静的メソッドでは this や super キーワードを使用することはできません。

- staticはコードブロックを変更します:

静的ブロックとは、クラスの中でメンバ変数やメンバ関数から独立したコードのブロックのことで、どのメソッドの中にもありません。

- 静的な内部クラスです:

静的内部クラスは、外部クラスと同じ名前を持つことはできず、外部クラスの通常のメンバ変数にアクセスすることはできません。

内部クラスだけを static として定義し、その前にパーミッション修飾子 static を付けることができることに注意してください。

19、Javaの直列化とは何ですか、どのようにJavaの直列化を実装するには?

シリアライゼーションは、オブジェクトのストリームを処理するために使用されるメカニズムです。2つのプロセスが通信している場合、データの種類に関係なく、バイナリ・シーケンスとしてネットワーク経由で送信されます。送信側は、このJavaオブジェクトをネットワーク経由で送信する前にバイト列に変換する必要があり、受信側は、バイト列をJavaオブジェクトに戻す必要があります!

- シリアライゼーション: Javaオブジェクトをバイト列に変換するプロセス。

- デシリアライズ:バイト列をJavaオブジェクトに戻す処理

シリアライズの実装:Javaでは、Serializableインターフェイスを実装したクラスはすべてシリアライズされたクラスとみなされ、このクラスのオブジェクトはすべてシリアライズされたオブジェクトになります。シリアライズされたデータだけをファイルやデータベースに保存したり、ネットワーク・プロトコルで送信したりすることができます。

20、Javaには何種類のIOストリームがありますか?

機能別:入力ストリーム、出力ストリーム

タイプ別:バイトストリーム、キャラクタストリーム

バイト・ストリームとキャラクタ・ストリームの違いは、バイト・ストリームが8ビットのバイト単位で入出力データを転送するのに対し、キャラクタ・ストリームは16ビットのキャラクタ単位で入出力データを転送する点です。

21.BIO、NIO、AIOの違いは何ですか?

BIOブロッキングIO同期ブロッキングIOは、伝統的なIOの通常の使用方法であり、シンプルなモードと使いやすさが特徴である。,
	 並行処理が少ない。
NIOノンブロッキングIOは、従来のIOをアップグレードした同期ノンブロッキングIOである。,
 クライアントとサーバーはチャネルを介して通信し、多重化を実現する。
AIO非同期IOはNIOのアップグレードで、NIO2とも呼ばれ、非同期のノンブロッキングIOを実装している。,
	 非同期IOの動作は、イベントとコールバックのメカニズムに基づいている。

22.thisとsuperの違い

Java言語では、thisはオブジェクトの現在のインスタンスを指すのに使われる。
オブジェクトのメンバ変数とメソッドの形式パラメータ,
例題は以下の通りである:

super は、親クラスのメソッドやメンバ変数にアクセスするために使用できる。サブクラスのメンバ変数が親クラスと同じ名前を持っている場合、その変数も親クラスと同じ名前になる。
親クラスのメソッドやメンバ変数をオーバーライドして、親クラスのメソッドやメンバ変数にアクセスするには、superキーワードを通してのみアクセスできる。,
例題は以下の通りである:

Read next

デザインパターン - ファクトリーパターン

上記のコードから、ファクトリーメソッドパターンの導入後、ファクトリークラスのオブジェクトがload()関数に結合され、設計が複雑になっていることがわかります。 単純なファクトリーとファクトリーメソッドでは、クラスを分類する方法は1つしかありません。たとえば、ルール設定のパースの例では、パーサークラスは設定ファイルの形式に基づいて分類するだけです。しかし、もしクラス...

Mar 15, 2020 · 4 min read