牛客網java特別練習誤題本
2893 ワード
前言
これは更新を続けるつもりの文章です.最近、牛の授業のネット上での特別練習--JAVA部分.基礎知識を復習したり、ぼやけていた部分を復習したりするのに役立つような気がします.印象を深めるために、後日復習を便利にします.ここにいくつかの間違った問題と正しいが記録する必要があると思う問題を記録します.
1.次のコードの説明が正しいのは、答えA、選択Dはコンパイルに合格し、 を正しく実行することができる.初期化されていない変数を使用するため、 を介してコンパイルできません.は、誤った方法で静的方法 にアクセスする.はコンパイルできますが、変数がnullのため、 は正常に動作しません.
解析:ここでhello()が一般的なインスタンスメソッドであればDを選択しますが、hello()は静的メソッドで、オブジェクトを必要とせずに呼び出すことができます.覚えておけばいい.
2.次のコードの出力結果は?
答え:construct block construct block static block construct block分析:この問題はふと見ると3つのオブジェクトがnewされるかもしれないが、それはまず静的ブロックを出力してから3つの構造ブロックについているに違いない.しかし、必ずしもそうではない.ここでt 1,t 2の2つのオブジェクトも静的であり、静的ブロックの前に実行される.したがって,まず2つの構造ブロックがあり,もう1つの静的ブロックが現れた.最後のブロックはmain内のオブジェクトtが初期化されたときに出力される.
3.定義文がある場合:int a=10;double b=3.14 ;式'A'+a+bの値のタイプは()
答え:double.これは実は上への転換を考察する問題である.データ型ではdouble>int>charです.だから最後にdoubleに変換します.「A」+a+bの場合はStringタイプである必要があります.
4.次のプログラムの出力は、コンパイルエラーです.
解析:DerivedはBaseクラスを継承しているため、Derivedオブジェクトを生成する際にもBaseの構築方法を呼び出す必要があります.Derivedは唯一のコンストラクションメソッドのみであり、このコンストラクションメソッドでは親コンストラクションメソッドが表示されずに呼び出されるため、デフォルトコンストラクションメソッドが呼び出され、baseにはデフォルトコンストラクションメソッドがないためエラーが発生します.
5.マルチスレッドに関する問題
スレッドクラスについて(自分で書いたものはThreadから継承する).run()を直接呼び出す場合は、通常のメソッドを呼び出すのと同じであり、スレッドを実行することはありません.start()を呼び出す必要があります.この罠に注意して、このように私を穴に入れた問題があります.
6.変数の記憶領域
次のjavaコードの変数a,b,cはメモリのその領域に分布しますか?
答え:スタック領域、スタック領域、スタック領域分析:まず、「仮想マシンスタック」は、メソッド呼び出し時に「局所変数テーブル」などを格納するためであることを知っています.したがって、b,cはスタック領域にあるに違いありません.スタック領域はオブジェクトを格納し,もちろん対像の属性aもスタック領域に位置する.
7.2 D配列の作成方法
正確には、float f[]=new float[6];float []f[] = new float[6][6]; float f[][] = new float[][6]; float [][]f = new float[6][6]; float [][]f = new float[6][]; 答え:ABDE.解析:宣言時f,[],[]は任意に組み合わせることができる.newでは行数を書かなければならず、列数は勝手にしなければならない.
8.forwardとredirectの違い.
forwardはサービス側動作であり、redirectはクライアント動作である.
これは更新を続けるつもりの文章です.最近、牛の授業のネット上での特別練習--JAVA部分.基礎知識を復習したり、ぼやけていた部分を復習したりするのに役立つような気がします.印象を深めるために、後日復習を便利にします.ここにいくつかの間違った問題と正しいが記録する必要があると思う問題を記録します.
1.次のコードの説明が正しいのは、答えA、選択D
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
Test test = null;
test.hello();
}
}
解析:ここでhello()が一般的なインスタンスメソッドであればDを選択しますが、hello()は静的メソッドで、オブジェクトを必要とせずに呼び出すことができます.覚えておけばいい.
2.次のコードの出力結果は?
public class B {
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("construct block");
}
static
{
System.out.println("static block");
}
public static void main(String[] args) {
B t = new B();
}
}
答え:construct block construct block static block construct block分析:この問題はふと見ると3つのオブジェクトがnewされるかもしれないが、それはまず静的ブロックを出力してから3つの構造ブロックについているに違いない.しかし、必ずしもそうではない.ここでt 1,t 2の2つのオブジェクトも静的であり、静的ブロックの前に実行される.したがって,まず2つの構造ブロックがあり,もう1つの静的ブロックが現れた.最後のブロックはmain内のオブジェクトtが初期化されたときに出力される.
3.定義文がある場合:int a=10;double b=3.14 ;式'A'+a+bの値のタイプは()
答え:double.これは実は上への転換を考察する問題である.データ型ではdouble>int>charです.だから最後にdoubleに変換します.「A」+a+bの場合はStringタイプである必要があります.
4.次のプログラムの出力は、コンパイルエラーです.
class Base{
public Base(String s){
System.out.print("B");
}
}
public class Derived extends Base{
public Derived (String s) {
System.out.print("D");
}
public static void main(String[] args){
new Derived("C");
}
}
解析:DerivedはBaseクラスを継承しているため、Derivedオブジェクトを生成する際にもBaseの構築方法を呼び出す必要があります.Derivedは唯一のコンストラクションメソッドのみであり、このコンストラクションメソッドでは親コンストラクションメソッドが表示されずに呼び出されるため、デフォルトコンストラクションメソッドが呼び出され、baseにはデフォルトコンストラクションメソッドがないためエラーが発生します.
5.マルチスレッドに関する問題
スレッドクラスについて(自分で書いたものはThreadから継承する).run()を直接呼び出す場合は、通常のメソッドを呼び出すのと同じであり、スレッドを実行することはありません.start()を呼び出す必要があります.この罠に注意して、このように私を穴に入れた問題があります.
6.変数の記憶領域
次のjavaコードの変数a,b,cはメモリのその領域に分布しますか?
class A {
private String a = "aa";
public boolean methodB() {
String b = "bb";
final String c = "cc";
}
}
答え:スタック領域、スタック領域、スタック領域分析:まず、「仮想マシンスタック」は、メソッド呼び出し時に「局所変数テーブル」などを格納するためであることを知っています.したがって、b,cはスタック領域にあるに違いありません.スタック領域はオブジェクトを格納し,もちろん対像の属性aもスタック領域に位置する.
7.2 D配列の作成方法
正確には、float f[]=new float[6];float []f[] = new float[6][6]; float f[][] = new float[][6]; float [][]f = new float[6][6]; float [][]f = new float[6][]; 答え:ABDE.解析:宣言時f,[],[]は任意に組み合わせることができる.newでは行数を書かなければならず、列数は勝手にしなければならない.
8.forwardとredirectの違い.
forwardはサービス側動作であり、redirectはクライアント動作である.