Javaの基礎
1. JDKおよびJREの違いは何ですか?
-
JDK:Java開発環境と実行環境を提供し、短い、Java開発キット用のJava開発キット。
-
JRE:Javaランタイム環境の略語、Javaランタイム環境は、Javaランタイムのために必要な環境を提供します。
具体的にJDKが実際にJREが含まれ、また、Javaコンパイラのjavacをコンパイルするソースコードが含まれている、またそれはJavaのデバッグおよび分析ツールの多くが含まれています。要するに:あなたはJavaプログラムを実行する必要がある場合は、単にあなたがJavaプログラムを記述する必要がある場合、あなたはJDKをインストールする必要があり、それにJREをインストールします。
2.それはどのような違いがある==とequals?
==読書
参照型と異なる効果の==のための基本的なタイプ、次のように:
-
基本タイプ:比較値が同一です。
-
参照タイプ:比較は同一の参照であるかどうか;
コード例:
1列X = "文字列"; 2文字列Y = "string"は、 3文字列Z =新しい文字列(「列」)。 4のSystem.out.println(x == y)は、//真 5のSystem.out.println(X == Z)。//偽 6のSystem.out.println(x.equals(Y))。//真 7のSystem.out.println(x.equals(Z))。//真
コードの解釈:xおよびyは同じ符号を参照して、そう==が真であり、新たな文字列()メソッドはメモリ空間を開放書き換えるので、== falseに評価し、比較値となっているに等しいので、結果は真です。
対等の解釈
本質的に==に等しいが、等文字列と整数は、比較値にそれを回す、equalsメソッドを書き換えます。理解するために以下のコードを見てください。
第一次のように比較は、同一のオブジェクトケースのデフォルト値に等しく見えます。
1クラス猫{ 2公共キャット(文字列名){ 3 this.name =名。 4} 5 6プライベート文字列名。 7 8パブリック文字列のgetName(){ 9リターン名。 10} 11 12公共のボイドのsetName(文字列名){ 13 this.name =名。 14} 15} 16 17猫C1 =新しい猫( "王磊")。 18猫C2 =新しい猫( "王磊"); 19のSystem.out.println(c1.equals(C2))。//偽
私たちの驚きへの出力は、虚偽であることが判明しましたか?これは、次のようにソースコードを知っているソースコードを等しく見えた方法です。
1つの公共ブール等しい(オブジェクトobj){ 2リターン(この==のOBJ)。 3}
==基本的に元に等しいです。
質問は、リターンが真である理由と同じ値、の2つのオブジェクトが、文字列であること?コードは以下の通りであります:
1ストリングS1 =新しい文字列( "老王")。 2ストリングS2 =新しい文字列( "老王")。 3のSystem.out.println(s1.equals(S2))。//真
私たちは答えを見つけるためにequalsメソッドの文字列を入力すると、以下のように同様に、コードは次のとおりです。
1つの公共ブール等しい(anObjectオブジェクト){ 2(この== anObject)であれば{ 3リターン真。 4} 5(anObject instanceofの文字列){もし 6列anotherString =(文字列)anObject。 7 INT N = value.length。 8 IF(N == anotherString.value.length){ 9チャーV1 [] =値。 10チャーV2 [] = anotherString.value。 11のint i = 0; 12一方(N--!= 0){ 13 IF(V1 [I] = V2 [i]が!) 14リターン偽。 15私は++します; 16} 17リターン真。 18} 19} 20 falseを返します。 21}
元の文字列オブジェクトのequalsメソッドを書き換える、比較値とを比較するための基準を変更しました。
概要 :==は、基本タイプの値の比較である参照型のために、それは参照のより多くのであり、デフォルトに等しい比較するための基準ですが、equalsメソッドのような多く再び、そのような文字列、整数としてなどにそれを回します比較値は、一般的に、比較の値は平等であると等しいです。
hashCode 3. 2つのオブジェクトが()は同じで、等しい()確かに右、本当ですか?
右、のhashCode二つのオブジェクト()と同じ、(等しい)は、必ずしも真実ではありません。
コード例:
1文字列STR1 = "通话"。 2文字列STR2 = "重地"。 3のSystem.out.println(String.Formatの( "STR1た:%d | STR2た:%d"、str1.hashCode()、str2.hashCode())); 4のSystem.out.println(str1.equals(STR2))。
結果の実行:
1
2
3
|
str1:
1179395
| str2:
1179395
false
|
コードの解釈:ハッシュテーブルでは、2つのキーと値のペアに等しいのhashCode()ハッシュ値が同じであるが、カザフスタンので、「トーク」とhashCodeの「大国」()と同じで、しかし、)(等しい、虚偽だったことは明らかですXI等しい値は、必ずしもキーと値のペアが等しい生成しません。
役割は、javaの最後の4は何?
-
継承することはできません、最終的なクラスと呼ばれ、最終的な変更クラス、。
-
最終修正メソッドをオーバーライドすることはできません。
-
初期設定値は変更することはできませんした後に呼び出され、最終的な修正変数は、constが、初期化する必要があります。
どのくらいに等しい恐らくMath.round 5.ジャワ(-1.5)?
軸の数、中間値(0.5)の値が右に丸めるために、-1に等しく、そう0.5は負0.5を切り上げが直接廃棄される正です。
6.文字列は、基本的なデータ型に属していますか?
文字列型は、財団に属していない、8つの基本的な種類があります:バイト、ブール、文字、ショート、int型、float型、ロング、ダブル、およびStringオブジェクトが属しています。
7. Java文字列は、どのようなクラスで動作していますか?それらの違いは何ですか?
Stringクラスの操作は以下のとおりです。文字列、StringBufferを、StringBuilderの。
そしてStringBufferの文字列は、文字列の違いは、各操作は、新しい文字列オブジェクトに新しい文字列オブジェクトは、ポインタを生成し、StringBuilderのステートメントは不変オブジェクトである、とのStringBuffer、StringBuilderのは、元のオブジェクトに基づいて動作することができますそれは、文字列の内容が頻繁に変化した場合に文字列を使用しないことをお勧めです。
StringBufferをとStringBuilderの最大の違いは、StringBufferのは、スレッドセーフである、ということですが、StringBuilderのは、スレッドセーフではありませんが、シングルスレッド環境でのStringBuilderを使用することが推奨されるようにパフォーマンスが、StringBufferのStringBuilderのより高い、StringBufferのは、マルチスレッド環境を使用することをお勧めします。
8.文字列STR = "I" と文字列str =新しい文字列( "I")と同じ?
同じではない、メモリが異なって割り当てられるため。文字列str =「i」の道、定数プールに割り当てられるために、Java仮想マシン、および(「I」)は、ヒープに割り当てられる文字列STR =新しいString。
9.どのように文字列を逆にするには?
StringBuilderのか、StringBufferのリバース()メソッドを使用します。
サンプルコード:
1 // StringBufferの逆 2のStringBufferのStringBuffer =新規のStringBuffer(); 3 stringBuffer.append( "ABCDEFG")。 4のSystem.out.println(stringBuffer.reverse())。// gfedcba 5 // StringBuilderの逆 6のStringBuilderのStringBuilder =新規のStringBuilder(); 7 stringBuilder.append( "ABCDEFG")。 8のSystem.out.println(stringBuilder.reverse())。// gfedcba
10. Stringクラスの一般的な方法は、それらを持っていますか?
-
indexOf()は:指定された文字のインデックスを返します。
-
charAt():指定されたインデックスにある文字を返します。
-
置き換え():置換文字列を。
-
トリム():空白文字列の両端を取り除きます。
-
スプリット():スプリット文字列は、分割後の文字列の配列を返します。
-
GetBytesメソッド():文字列型のバイト配列を返します。
-
長さは、():文字列の長さを返します。
-
toLowerCaseメソッド():小文字の文字列に変換されます。
-
toUpperCase():大文字に文字列を入れてください。
-
部分文字列():文字列を取ら。
-
等号():比較文字列。
11.抽象クラスは、抽象的でなければなりませんか?
いいえ、抽象クラスの抽象メソッドは必ずしもありません。
サンプルコード:
1抽象クラスキャット{ 2つの公共の静的な無効sayHi(){ 3のSystem.out.println( "こんにちは〜"); 4} 5}
上記のコード、抽象クラスの抽象メソッドが、完全に機能しません。
12.通常のクラスと抽象クラスの違いは何ですか?
-
一般的なクラスは抽象クラスは、抽象メソッドを含むことができ、抽象メソッドを含めることはできません。
-
抽象クラスは、直接一般的なクラスを直接インスタンス化することができインスタンス化することはできません。
13.抽象クラスは、最終的にそれを使用して変更することができますか?
いいえ、エディタはエラー・メッセージを要求し、最終的なクラスを継承することができないように、これは、互いに衝突につながる定義されたので、以下に示すように、最終的な抽象クラスは、変更することができない場合、抽象クラスは、他のクラスの継承を行うことで定義します。
14.インタフェースと抽象クラスの違いは何ですか?
-
実装:使用する抽象クラスのサブクラスは、継承を拡張し、インタフェースはインタフェースを実装するために使用する必要があります実装されています。
-
コンストラクタ:抽象クラスのコンストラクタができ、インタフェースを持つことはできません。
-
主な方法:抽象クラスのmainメソッドを持つことができ、我々はそれを実行することができます。インターフェイスは、mainメソッドを持つことはできません。
-
数量を達成:クラスは、多くのインターフェイスを実装することができ、それが唯一の抽象クラスを継承することができます。
-
アクセス修飾子:デフォルトの修正を使用してパブリックインターフェイスメソッド、抽象クラスのメソッドは、任意のアクセス修飾子かもしれません。
IOストリーム15. Javaがいくつかに分かれていますか?
入力ストリーム(入力)、出力ストリーム(出力):関数で割りました。
バイトストリームと文字ストリーム:タイプで割りました。
バイトストリームと文字ストリームとの間の差は、次のとおり文字入力および出力データの単位でのデータ入出力バイト、16ビット伝送文字ストリームで送信さ8ビットのバイトストリーム。
16. BIO、NIO、AIOの違いは何ですか?
-
BIO:IOをブロックするブロックIOの同期は、我々は通常、簡単で使いやすいモード、低同時処理能力によって特徴付けられる伝統的なIOを、使用しているものです。
-
NIO:新しいIO同期非ブロックIO、IOは、多重化を達成するために、伝統的なアップグレード、クライアントとサーバーのチャネルを介して(チャネル)通信です。
-
AIO:またNIO2としても知られている非同期IOがアップグレードさNIOは、非同期の非ブロッキングIO、イベントベースの非同期IO操作及びコールバック機構を実装します。
17.ファイルが何の一般的な方法でありますか?
-
Files.exists():存在するファイルのパスを検出します。
-
Files.createFile():ファイルを作成します。
-
Files.createDirectory():フォルダを作成します。
-
Files.delete():ファイルまたはディレクトリを削除します。
-
Files.copy():ファイルをコピーします。
-
Files.move():ファイルを移動します。
-
ファイルを表示するには数:Files.size()。
-
Files.read():ファイルを読み込みます。
-
Files.write():ファイルに書き込みます。