#1.「.java」ソース ファイルには複数のクラス (内部クラスではない) を含めることはできますか?制限事項は何ですか?
クラスは複数存在できますが、パブリック クラスは 1 つだけ存在でき、パブリック クラス名はファイル名と一致している必要があります。 (推奨される学習: Java インタビューの質問 )
2. Java には goto がありますか?
は Java の予約語ですが、そうではありません。 Javaでは現在使用されています。
3. & と && の違いについて話します。
& と && は、論理 AND (and) を示す論理 AND 演算子として使用できます。演算子の両側の式の結果が true の場合、演算結果全体が true になります。それ以外の場合は、演算結果全体が true になります。 、当事者の 1 つが false である限り、結果は false になります。
&& には短絡機能もあります。つまり、最初の式が false の場合、2 番目の式は評価されなくなります。たとえば、if(str!= null&& !str など) .equals( s)) 式で、str が null の場合、次の式は実行されないため、NullPointerException は発生しません。
&& を & に変更すると、NullPointerException がスローされます。 If(x==33 & y>0) y は成長しますが、If(x==33 && y>0) は成長しません
& は、& 演算子がオンの場合、ビット演算子としても使用できます。両側 式がブール型ではない場合、& はビット単位の AND 演算を表します。通常、0x0f を使用して整数で & 演算を実行し、整数の下位 4 ビットを取得します。たとえば、0x31 & 0x0f の結果は次のようになります。 0x01。
4. JAVA の現在の複数のネストされたループから抜け出すにはどうすればよいでしょうか?
Java では、複数のループから抜け出す場合は、外側のループ ステートメントの前にラベルを定義し、内側のループ本体のコードでそのラベルを含む Break ステートメントを使用します。外側のループ。
例:
for(int i=0;i<10;i++){ for(intj=0;j<10;j++){ System.out.println(“i=” + i + “,j=” + j); if(j == 5) break ok; } }
また、私は個人的にはラベルをあまり使用しませんが、外側のループの条件式の結果が内側の層の影響を受けるようにします。たとえば、2 次元配列内の数値を検索するためのループ本体コードの制御。
int arr[][] ={{1,2,3},{4,5,6,7},{9}}; boolean found = false; for(int i=0;i<arr.length&&!found;i++) { for(intj=0;j<arr[i].length;j++){ System.out.println(“i=” + i + “,j=” + j); if(arr[i][j] ==5) { found =true; break; } } }
5. switch ステートメントは byte、long、または String に作用できますか?
switch ( In e) では、e は整数のみにすることができます。式または列挙定数 (大きいフォント)。整数式は、int 基本型または Integer パッケージ化型にすることができます。byte、short、および char は暗黙的に int に変換できるため、これらの型とこれらの型のパッケージ化型も同様です。可能。
明らかに、long 型も String 型も switch の構文に準拠しておらず、暗黙的に int 型に変換できないため、switch ステートメントでは使用できません。 (java1.7 以降では、既に String 型、char byte short int およびそのパッケージング クラスで使用できます。)
#6, short s1= 1; s1 = (s1 1は int 型で、等号の左側が short 型なので強制する必要があります) 1 1; What's nothing? short s1 = 1; s1 = 1; What's nothing? (何も問題ありません)
短い場合 s1= 1; s1 = s1 1; s1 1 を演算すると式の型が自動的に昇格するため、結果は int 型になります。短い型 s1 に代入するとコンパイラはエラーを報告します。それにはキャスト型が必要です。
略して s1= 1; s1 = 1; = は Java 言語で指定される演算子であるため、Java コンパイラはこれに対して特別な処理を実行し、正しくコンパイルできます。
7. 中国語の文字を char 変数に格納できますか?なぜですか?
char 変数は、Unicode でエンコードされた文字を格納するために使用されます。エンコード文字セットには中国語の文字が含まれているため、もちろん中国語の文字を char 変数に格納できます。ただし、特殊な中国語文字が Unicode エンコード文字セットに含まれていない場合、特殊な中国語文字をこの char 変数に格納することはできません。
追加説明: Unicode エンコーディングは 2 バイトを占有するため、char 型変数も 2 バイトを占有します。
8. 8 の 2 倍を計算する最も効率的な方法を使用します?
2<< 3, (左に 3 桁シフト)なぜなら、数値を n ビット左にシフトすることは、2 の n 乗に等しいからです。その後、数値を 8 で乗算するには、左に 3 ビットだけシフトする必要があります。ビット演算は CPU によって直接サポートされています。したがって、2 × 8 を求める最も効率的な方法は、2<<3 です。
9.final キーワードを使用して変数を変更する場合、参照は変更できませんか、または参照先のオブジェクトは変更できませんか?
final キーワードを使用して変数を変更する場合、参照変数は変更できませんが、参照変数が指すオブジェクトの内容は変更できることを意味します。たとえば、次のステートメントの場合:
finalStringBuffer a=new StringBuffer("immutable");
次のステートメントを実行するとコンパイル時エラーが報告されます:
a=new StringBuffer("");
ただし、次のステートメントを実行するとコンパイルされます:
a.append(" broken!");
誰かがメソッドを定義している パラメータを渡すとき、次の形式を使用して、メソッドが渡されたパラメータ オブジェクトを変更しないようにすることもできます:
public void method(final StringBuffer param){ }
実際には、これは不可能です。内部に次のコードを追加することもできます。パラメータオブジェクトを変更するメソッド:
param.append("a");
10. 静的変数とインスタンス変数の違いは何ですか?
在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。
静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。
总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。
例如,对于下面的程序,无论创建多少个实例对象,永远都只分配了一个staticVar变量,并且每创建一个实例对象,这个staticVar就会加1;但是,每创建一个实例对象,就会分配一个instanceVar,即可能分配多个instanceVar,并且每个instanceVar的值都只自加了1次。
public class VariantTest{ publicstatic int staticVar = 0; publicint instanceVar = 0; publicVariantTest(){ staticVar++; instanceVar++; System.out.println(staticVar +instanceVar); } }
以上がJava の基本的な面接の質問 (1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。