283 线程中, wait 的作用:释放已持有的锁,进入等待队列。
284 线程中, notify 的作用:唤醒wait 队列中的第一个线程并把它移入锁申请队列。 285 线程中, notifyAll 的作用:唤醒wait 队列中的所有的线程并把它们移入锁申请队列。
五、程序分析题:
1. 编译并运行下面的程序,分析程序运行的结果,如果程序有错,请说明错误的原因。
访问权限知识点 class A { private int x; private void print() { System.out.println(x) } }
class B { void test() { A a = new A(); a.x = 100; a.print(); }
public void static main(String args[]){ B b = new B(); b.test(); } }
2. 编译并运行下面的程序,分析程序运行的结果,如果程序有错,请说明错误的原因。
访问权限知识点 package abc; class A { protected int x; protected void print() { System.out.println(x); } }
package xyz; import abc.A;
class B extends A { void test(A a, B b) { a.x = 100; a.print(); b.x = 100; b.print(); }
public void static main(String args[]){
B b = new B(); b.test(); }
}
3. 分析下面程序错误的原因,并改错(静态成员知识点) class Test {
public void print(int x) { System.out.println(x); }
public static void main(String args[]) { int x = 3; print(x); } }
4. 编译并运行下面的程序,分析结果(隐藏、重载、覆盖知识点) class Base{
public void print(){
System.out.println(\ System.out.println(\ }
int x =2; }
public class Abs extends Base{ int x =6;
public void print(){
System.out.println(\ System.out.println(\ }
public static void main(String argv[]){ Abs a = new Abs(); a.print(); } }
5. 编译并运行下面程序,分析结果(抽象方法、抽象类、多态等知识点) abstract class Base{
abstract public void myfunc(); public void amethod(){
System.out.println(\ method\ } }
public class Abs extends Base{
public static void main(String argv[]){ Abs a = new Abs(); a.amethod(); }
public void myfunc(){
System.out.println(\ }
public void amethod(){ myfunc(); } }
6. 编译并运行下面程序,分析结果(继承,多态知识点) class Base{
int x =10;
public void amethod(){
System.out.println(\ method\ } }
public class Abs extends Base{ int x = 100;
public void amethod(){
System.out.println(\ method\ System.out.println(\ x); }
public static void main(String argv[]){ Base a = new Abs(); a.amethod(); } }
7. 编译并运行下面程序,分析结果(继承,多态知识点) class Base{
int x =10;
public void amethod(){
System.out.println(\ method\ } }
public class Abs extends Base{ public void amethod(){
System.out.println(\ method\ System.out.println(\ x); }
public void fun(){
System.out.println(\ }
public static void main(String argv[]){ Base a = new Abs(); a.amethod(); a.fun(); } }
8. 编译并运行下面程序,分析结果(无错,注意构造方法调用次序,先基类再派生类) class Base{ int x;
public Base(){ x =10;
System.out.println(\ } }
public class Abs extends Base{ int y;
public Abs (){ y = 100;
System.out.println(\ }
public static void main(String argv[]){ Abs a = new Abs(); System.out.println(\ +a. x ); System.out.println(\ + a.y ); } }
9. 编译并运行下面程序,分析结果(构造方法,基类无参构建方法没定义) class Base{ int x;
public Base(int i){ x =i;
System.out.println(\ } }
public class Abs extends Base{ int y;
public Abs (){ y = 1;