一、问答题
1. 内部类的外嵌类的成员变量在内部类中仍然有效吗?
2. 内部类中的方法也可以调用外嵌类中的方法吗?
3. 内部类的类体中可以声明类变量和类方法吗?
4. 匿名类一定是内部类吗?
二、选择题
1.下列代码标注的(A,B,C,D)中哪一个是错误的?
class OutClass {
int m = 1;
static float x; //A
class InnerClass {
int m =12; //B
static float n =20.89f; //C
InnerClass(){
}
void f() {
m = 100;
}
}
void cry() {
InnerClass tom = new InnerClass(); //D
}
}
2.下列哪一个叙述是正确的?
A.和接口有关的匿名类可以是抽象类。
B.和类有关的匿名类还可以额外地实现某个指定的接口。
C.和类有关的匿名类一定是该类的一个非抽象子类。
D.和接口有关的匿名类的类体中可以有static成员变量。
三、阅读程序
1.请说出下列程序的输出结果。
class Cry {
public void cry() {
System.out.println("大家好");
}
}
public class E {
public static void main(String args[]) {
Cry hello=new Cry() {
public void cry() {
System.out.println("大家好,祝工作顺利!");
}
};
hello.cry();
}
}
2.请说出下列程序的输出结果。
interface Com{
public void speak();
}
public class E {
public static void main(String args[]) {
Com p=new Com() {
public void speak() {
System.out.println("p是接口变量");
}
};
p.speak();
}
}
3.请说出下列程序的输出结果。
import java.io.IOException;
public class E {
public static void main(String args[]){
try { methodA();
}
catch(IOException e){
System.out.print("你好");
return;
}
finally {
System.out.println(" fine thanks");
}
}
public static void methodA() throws IOException{
throw new IOException();
}
}
4.实习下列程序,了解静态内部类。
class RedCowForm {
static class RedCow { //静态内部类是外嵌类中的一种静态数据类型
void speak() {
System.out.println("我是红牛");
}
}
}
class BlackCowForm {
public static void main(String args[]) {
RedCowForm.RedCow red =
new RedCowForm.RedCow(); //如果RedCom不是静态内部类,此代码非法
red.speak();
}
}
四、编写程序
第3章例子9的程序允许用户在键盘依次输入若干个数字(每输入一个数字都需要按回车键确认),程序将计算出这些数的和以及平均值。请在第3章的例子9中增加断言语句,当用户输入的数字大于100或小于0时,程序立刻终止执行,并提示这是一个非法的成绩数据。
一、问答题
1.有效。
2.可以。
3.不可以。
4.一定是。
二、选择题
1.C。2.C。
三、阅读程序
1.大家好,祝工作顺利!
2.p是接口变量。
3.你好 fine thanks。
4.属于上机实习程序,解答略。
四、编程题
import java.util.*;
public class E {
public static void main (String args[ ]){
Scanner reader = new Scanner(System.in);
double sum = 0;
int m = 0;
while(reader.hasNextDouble()){
double x = reader.nextDouble();
assert x<=100 &&x>=0:"数据不合理";
m = m+1;
sum = sum+x;
}//-ea
System.out.printf("%d个数的和为%f\n",m,sum);
System.out.printf("%d个数的平均值是%f\n",m,sum/m);
}
}