Java面接問題と答え(3)


21、Static Nested ClassとInner Classの違い.
Static Nested Classは、外部クラスインスタンスに依存せずにインスタンス化できる静的(static)として宣言された内部クラスです.通常の内部クラスは、外部クラスがインスタンス化されてからインスタンス化する必要があります.
22、JSPにおける動的INCLUDEと静的INCLUDEの違い
ダイナミックINCLUDEは、jsp:includeアクションで実装されますダイナミックページを含むのに適しており、パラメータを持つことができます.静的INCLUDEはinclude疑似コードで実現され、含まれているファイルの変化は必ずチェックされず、静的ページ<%@include file="included.html"%>を含む
23、いつassertを使いますか.
assertion(断言)はソフトウェア開発でよく使われるデバッグ方式であり、多くの開発言語でこのメカニズムをサポートしている.実装では、assertionはプログラム内の文であり、boolean式をチェックし、正しいプログラムはこのboolean式の値がtrueであることを保証しなければならない.この値がfalseの場合、プログラムが正しくない状態にあることを示すと、警告または終了が表示されます.一般的にassertionは、プログラムの最も基本的で重要な正確性を保証するために使用されます.assertionチェックは通常、開発とテスト時にオンになります.パフォーマンスを向上させるために、ソフトウェアのリリース後、assertionチェックは通常オフになります.
24、GCって何?なぜGCがあるのですか?
  
GCはごみ収集の意味(Gabage Collection)で、メモリ処理はプログラマが問題になりやすい場所であり、忘れたり誤ったりしたメモリ回収はプログラムやシステムの不安定さや崩壊を招き、Javaが提供するGC機能はオブジェクトがドメインを超えてメモリを自動的に回収する目的を達成するかどうかを自動的に監視することができ、Java言語は割り当てられたメモリを解放する表示操作方法を提供していない.
25、short s1 = 1; s1 = s1 + 1;何が悪いの?short s1 = 1; s1 += 1;何が悪いの?
short s1 = 1; s1 = s1 + 1; (s 1+1演算結果はint型で強制変換タイプが必要)short s 1=1;s1 += 1;(正しくコンパイル可能)
26、Math.round(11.5)はいくらですか?Math.round(-11.5)はいくらですか?
Math.round(11.5)==12 Math.round(-11.5)=-11 roundメソッドはパラメータに最も近い長い整数を返し、パラメータに1/2を加えてfloorを求める.
27、String s = new String("xyz");String Objectはいくつ作成されましたか?
ふたつ
28、2つのスレッドがjに対して1ずつ増加し、他の2つのスレッドがjに対して1ずつ減少する4つのスレッドを設計する.プログラムを書き出します.
以下のプログラムは内部クラスを用いてスレッドを実現し,jの増減時に順序の問題を考慮していない.

public class ThreadTest1 {
	private int j;

	public static void main(String args[]) {
		ThreadTest1 tt = new ThreadTest1();
		Inc inc = tt.new Inc();
		Dec dec = tt.new Dec();
		for (int i = 0; i < 2; i++) {
			Thread t = new Thread(inc);
			t.start();
			t = new Thread(dec);
			t.start();
		}
	}

	private synchronized void inc() {
		j++;
		System.out.println(Thread.currentThread().getName() + "-inc:" + j);
	}

	private synchronized void dec() {
		j--;
		System.out.println(Thread.currentThread().getName() + "-dec:" + j);
	}

	class Inc implements Runnable {
		public void run() {
			for (int i = 0; i < 100; i++) {
				inc();
			}
		}
	}

	class Dec implements Runnable {
		public void run() {
			for (int i = 0; i < 100; i++) {
				dec();
			}
		}
	}
}

29、Javaはgotoがありますか?
JAvaのリザーブワードは、javaでは使用されていません.
30、スレッドを起動するにはrun()ですか、start()ですか.
スレッドを開始するにはstart()メソッドを呼び出し、スレッドが表す仮想プロセッサを実行可能にします.これは、JVMによってスケジュールされ、実行できることを意味します.これは、スレッドがすぐに実行されるという意味ではありません.run()メソッドは、スレッドを停止するために終了しなければならないフラグを生成することができる.