Java筆記試験-2020-9-16の5つの質問
/ ... /ネスト可能//コメントもネスト可能/ ... /コメント。
正解:B正解:B(正解)
正确
错误
内部クラス(メンバー内部クラスとも呼ばれます)は、4種類のアクセス権を持つことができます。()
正しい答え:Aあなたの答え:B(間違っている)
正确
错误
分析:
クラスのメンバーとして内部クラスを理解できます。メンバーには4つのアクセス権があり、内部クラスも同様です。それらは、プライベート、保護、パブリック、およびデフォルトのアクセス許可です。
静的メンバーは内部クラスで定義できません
内部クラスは外部クラスのメンバー変数に直接アクセスできます。
内部クラスは外部クラスのメソッドの外側で定義でき、外部クラスのメソッド本体でも定義できます
- メソッド本体の外部で定義された内部クラスのアクセスタイプは、public、protecte、default、privateなどの4つのタイプにすることができます。内部クラスのインスタンスオブジェクトを作成するためのインスタンスオブジェクト
- メソッドで定義されたローカル変数と同様に、メソッドで定義された内部クラスの前にアクセスタイプ修飾子を置くことはできませんが、finalまたはabstract修飾子を内部クラスの前で使用できます。この種類の内部クラスは他のクラスからは見えず、他のクラスはこの種類の内部クラスを参照できませんが、この種類の内部クラスによって作成されたインスタンスオブジェクトを他のクラスに渡してアクセスできます。
staticキーワードは、メソッドの外部で定義された内部クラスの前に追加して、静的なネストクラスにすることができます。これは、内部クラスの特性がなくなったため、狭義には内部クラスではありません。
次のコード実行()の結果は何ですか?
public class Demo {
class Super {
int flag = 1;
Super() {
test();
}
void test() {
System.out.println("Super.test() flag=" + flag);
}
}
class Sub extends Super {
Sub(int i) {
flag = i;
System.out.println("Sub.Sub()flag=" + flag);
}
void test() {
System.out.println("Sub.test()flag=" + flag);
}
}
public static void main(String[] args) {
new Demo().new Sub(5);
}
}
正しい答え:Aあなたの答え:C(間違っている)
Sub.test() flag=1
Sub.Sub() flag=5
Sub.Sub() flag=5
Sub.test() flag=5
Sub.test() flag=0
Sub.Sub() flag=5
Super.test() flag=1
Sub.Sub() flag=5
分析:
継承におけるコード実行の順序は次のとおりです。
1.親クラスの静的オブジェクト、親クラスの静的コードブロック
2.サブクラス静的オブジェクト、サブクラス静的コードブロック
3.親クラスは非静的オブジェクトであり、親クラスは非静的コードブロックです
4.親クラスのコンストラクター
5.サブクラスの非静的オブジェクト、サブクラスの非静的コードブロック
6.サブクラスコンストラクター
この質問の場合:新しい Sub(5)についてのみ考える場合、親クラスはintフラグ= 1を初期化してから、スーパークラスコンストラクターSuper()を実行します。テスト()メソッドは、スーパークラスコンストラクターで実行されます。クラスはtest()メソッドを書き換えるので、親クラスコンストラクターのtest()メソッドは実際にサブクラスのtest()メソッドを実行するので、出力はSub.test()フラグ= 1であり、その後サブクラスが実行されますコンストラクターSub(5)はフラグを5に割り当てるため、出力結果はSub.Sub()フラグ= 5です。最後に、Aが選択されました。
前の質問から始めて、前回書いた同様の質問について考えました。
package com.lbl.bstTest;
public class Base {
private String baseName = "base";
public Base() {
callName();
}
public void callName() {
System.out.println(baseName);
}
static class Sub extends Base {
private String baseName = "sub";
public void callName() {
System.out.println(baseName);
}
}
public static void main(String[] args) {
Base b = new Sub();
}
}
演算結果:
なぜ呼ばれるのですか?
それは上の質問に似ているようです。私の調査の後、私は問題が私的なことにあることに気付きました
//下面一题定义baseName是private私有的,所以子类无法继承,所以得到结果是null
private String baseName = "base";
//上面定义是的default类型,所以子类可以使用,所以结果是1
int flag = 1;
42度(角度)のコサインの正しい計算は次のオプションのどれですか?
正しい答え:Cあなたの答え:D(間違っている)
double d=Math.cos(42)
double d=Math.cosine(42)
double d=Math.cos(Math.toRadians(42))
double d=Math.cos(Math.toDegrees(42))
分析:
Mathクラスのcos()メソッドを使用してコサイン値を計算する
Math.cosのパラメーターの単位はラジアンなので
- toRadians()は角度をラジアンに変換します
- toDegrees()はラジアンを角度に変換します
CMSガベージコレクターは、これらの段階でユーザースレッドを含みません。
正しい答え:ACあなたの答え:A(間違っている)
初始标记
并发标记
重新标记
并发清理
分析:
**ユーザーレベルのスレッド**は、カーネルサポートなしでユーザープログラムに実装されるスレッドを指します。これらは、オペレーティングシステムのコアに依存しません。アプリケーションプロセスは、スレッドライブラリを使用して、スレッドの作成、同期、スケジューリング、および管理のための関数を提供しますユーザースレッドを制御します。
CMSのGCプロセスには6つの段階があります(4つが並行、2つが他のアプリケーションを中断)
1. STW初期マーク
2.同時マーキング
3.コンカレントプレクリーニング(コンカレントプレクリーニング)
4.最後の発言(STW発言)
5.同時スイープ
6.同時リセット
初めてマーキングして再マーキングする場合、他のアプリケーションを一時停止する必要があります。その後、ユーザースレッドはこれらの2つの段階に参加しません