week2周测题

一,单选题(每题2分)

1.(单选题)下列程序运行后,输出结果是( )。
public class Point{
private int x,y;
Point(int x,int y){
this.x = x;
this.y = y;
}
public static void main(String[] args) {
Point p1 = new Point(13,14);
Point p2 = new Point(17,16);
System.out.println(p1.x+p2.y);
}
}

A.27 B.31 C.33 D.29

【正确答案】D
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查构造函数初始化对象的成员变量。
this关键字表示调用该方法的当前对象。当使用构造函数创建对象的时候,该构造函数
会被自动调用。
运行Point p1 = new Point(13,14);代码,此时构造函数中this表示对象p1,
运行构造函数的时候,设置p1对象的成员变量x,y值分别为传入的参数13,14
此时p1.x=13;同理p2.y=16,p1.x+p2.y=13+16,结果为29.
选项D正确。

2.(单选题)下列程序输出结果是( )。
public class Test {
static int i = 0;
public int aMethod() {
i++;
return i;
}
public static void main(String args[]) {
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
Test test1 = new Test();
System.out.println(test1.i);
}
}

A.2 2
B.2 0
C.0 2
D.1 2

【正确答案】A
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查static修饰成员变量。
用static修饰的成员变量不属于对象的数据结构
static变量是属于类的变量,通常可以通过类名来引用static成员。
static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static
成员变量只有“一份”,无论该类创建了多少个对象。
本题目中,调用了2次aMethod()方法,成员变量i自增了2次,
所以j的值为2,输出2,而因为i是static成员变量,所有对象都共享
i=2的值,所以也输出2
选项A正确

3.(单选题)阅读下列程序:
public interface Action{
public void execute();
}
public class Main{
public static void main(String args[]){
Action action = //1;
action.execute();
}
}
注释1处可以添加的正确的代码是( )。

A.new Action{
public void execute(){}
}
B.new Action(){
public void execute();
}
C.new Action(){
public void execute(){}
}
D.Action(){
public void execute(){}
}
【正确答案】C
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查如何定义一个匿名内部类。
如果在一段程序中需要创建一个类的对象(通常这个类需要实现某个接口或继承某个类),而且对象创建后,这个类的价值就不存在了,这个类可以不必命名,称之为匿名内部类。
格式如下:
SuperType obj = new SuperType(){};
本题选项C正确,其他都是错误的。
4.(单选题)下面的程序输出结果是( )。
public class A implements B {
int k = 20;
public static void main(String args[]) {
int i;
B c1 = new A();
i = c1.k;
System.out.println(“i=” + i);
}
}
interface B {
int k = 10;
}

A.i=20
B.程序有编译错误
C.i=10
D.i=true
【正确答案】C
【答题时间】2020-12-29 08:50:21
【答案解析】本题考查多态中的成员变量。
Java中,成员变量是没有重写的,成员变量不可以被继承或覆盖,即不能实现多态。
只有方法才能构成多态。也就是说方法可以实现动态绑定,而变量用于是静态绑定。
所以本题中B c1 = new A(); i=c1.k;此时c1类型为B,与变量 int k = 10绑定
i值为10
选项C正确。
5.(单选题)关于以下应用程序的说明,正确的是( )。
1. public class StaticClass
2. {
3. static int x=10;
4. static { x+=5;}
5. public static void main(String[] args)
6. {
7. System.out.println(“x=” + x);
8. }
9. static { x/=3;}
10. }
A.4行与9行不能通过编译,因为缺少方法名和返回类型
B.9行不能通过编译,因为只能有一个静态初始化器
C.编译通过,执行结果为:x=5
D.编译通过,执行结果为:x=3

【正确答案】C
【答题时间】2020-12-29 08:50:21
【答案解析】本题考查静态代码块 类中可以有多个static语句块,当类加载的时候依次执行 运行该应用程序的时候,先执行static{x+=5;},此时x值是15. 然后执行static{x/=3;},计算结果为x=15/3,结果为5 所以本题选项C正确。

6.(单选题)关于Java抽象类的说法,错误的是()。
A.包含抽象方法的类必须是抽象类
B.抽象类不能被实例化
C.继承抽象类时,具体子类必须实现所有的抽象方法
D.如果一个类不包含任何抽象方法,那么该类不能声明为抽象类
【正确答案】D
【答题时间】2019-11-28 10:19:17
【答案解析】此题目考查的是Java中抽象类。
在Java语言中,一个类若不包含任何抽象方法,它也可以声明为抽象类,同样该类不能被实例化,所以本题正确选项为D。

7.(单选题)给出以下代码,请问如何声明totalPage使其为一个只读属性( )。
public class Page{
public int totalPage;
}
A.声明totalPage变量为private。
B.声明Page类为private。
C.声明totalPage变量为private,并且建立一个用于获取totalPage变量值
的getTotalPage() 方法。
D.声明totalPage变量为static。

【正确答案】C
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查java类中只读属性的定义
只读属性需要使用private修饰,只能由类中提供的方法访问该属性,
类中需要提供形如public int getTotalPage(){return …}的方法,方法中负责提供算法,返回属性对应的类型的值。
选项C正确

8.(单选题)下列程序输出结果是( )。
class Super {
public static void m1() {
System.out.println(“m1 in Super”); }
public void m2() {
System.out.println(“m2 in Super”); }}
class Sub extends Super {
public static void m1() {
System.out.println(“m1 in Sub”); }
public void m2() {
System.out.println(“m2 in Sub”); }}
public class TestMain {
public static void main(String args[]) {
Super sup = new Sub();
sup.m1();
sup.m2();
Sub sub = (Sub) sup;
sub.m1();
sub.m2(); }}

A.m1 in Sub
m2 in Sub
m1 in Sub
m2 in Sub

B.m1 in Super
m2 in Super
m1 in Sub
m2 in Sub

C.m1 in Sub
m2 in Sub
m1 in Super
m2 in Super

D.m1 in Super
m2 in Sub
m1 in Sub
m2 in Sub
【正确答案】D
【答题时间】2020-12-29 08:50:21
【答案解析】静态方法可以被继承和隐藏 而不能够被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象进行多态调用。
选项D正确

9.(单选题)以下关于继承的描述正确的是()。
A.在java中,一个类只能实现一个接口
B.在java中, 类只允许单一继承
C.在java中,一个类不能同时继承一个类和实现一个接口
D.在java中,类通过extends关键字来实现接口

【正确答案】B
【答题时间】2020-12-29 08:50:21
【答案解析】此题目考查的是Java中的继承。
在java中,一个类可以实现多个接口,由逗号分隔,所以选项A是错误的。
Java中的一个类只能继承一个类,即只允许单一继承,所以选项B是正确的。
Java中一个类可以同时继承一个类和实现一个或多个接口,但是需要注意,应先继承后实现,所以选项C是错误的。
Java中extends是用于类与类之间的继承,接口与接口之间的继承。类实现接口需要通过implements关键字,所以选项D是错误的。

10.(单选题)下列程序中,出现编译错误的行数是( )。
1 class Fu{
2 Fu(int x){
3 System.out.println(“fu …”+x);
4 }
5 }
6 class Zi extends Fu{
7 Zi(){
8 System.out.println(“zi run”);
9 }
10 Zi(int x){
11 this();
12 System.out.println(“zi…”+x);
13 }
14 }

A.11
B.2
C.7
D.10

【正确答案】C
【答题时间】2019-11-28 10:19:17
【答案解析】创建子类时,子类的所有构造函数默认都会调用父类中空参数的构造函数。
因为子类的构造函数第一行有一个句隐式的super();语句
程序中的第7行,空的构造函数中,会自动调用父类没有参数的构造器,
而父类中,定义了有参数的构造器,系统将不会提供无参数的构造器
选项C正确。

二. 多选题(每题3分)

1.(多选题)变量定义如下:
int i = 128;
下列赋值语句正确的是:()。
A.int j = i;
B.short s = i;
C.short s = 128;
D.long l = i;

【正确答案】A,C,D
【答题时间】2019-11-28 10:19:17
【答案解析】整数常量在java中默认是int类型。
选项A 将int 类型赋值给int 类型是合法的。
选项B i是int类型变量,赋值给short类型的变量s,需要强制转换
语法为:short s = (short)i
选项C Java的编译器,可以对常量值进行隐式转换,128属于short
类型范围,所以语法正确
选项D Java中,向上转型是自动完成的,即隐式转换或自动转换

2.(多选题)给定java代码如下所示,在1处新增下列( )方法,是对show方法的重载
public class Test{
public void show(int x, int y, int z) { }
//1
}
A.public int show(int x,int y,float z){return 0;}
B.public int show(int x,int y,int z){return 0;}
C.public void show(int x,int z){}
D.public viod show(int z,int y,int x){}

【正确答案】A,C
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查方法的重载规则
方法的重载必须满足方法名相同和参数不同(类型或个数)
选项AC满足重载的条件正确
选项BD参数都与定义的方法参数相同,不是重载。

3.(多选题)关于类、对象、引用以下描述正确的是( )。
A.Person person = new Person(“张三”);
person是一个对象,是内存中的一块区域,是Person类的一个实例
B.Person person = new Person(“张三”);
person并不是真正的对象,而是指向所创建的对象的引用
C.Person person;
person = new Person(“张三”);
person = new Person(“李四”);
person是引用类型的变量,指向了“张三”和“李四”两个对象
D.Person person;
person = new Person(“张三”);
person = new Person(“李四”);
person是引用类型的变量,最后指向了“李四”这个对象

【正确答案】B,D
【答题时间】2020-12-29 08:50:21
【答案解析】本题考查引用类型变量的含义
引用类型的变量可以存放该类对象的地址信息,通常称为“指向该类对象”;
选项A和B中,person并不是所创建的对象,是一个引用,是一个可以指向Person类的对象的引用。真正创建对象的语句是右边的new Person(“张三”);
A错误,B正确
选项C和D,这里让person先指向了“张三”这个对象,然后又指向了“李四”这个对象。也就是说,Person person,这句话只是声明了一个Person类的引用,它可以指向任何Person类的实例
A错误,D正确

4.(多选题)Java中,下列说法正确的是( )。
A.私有方法不能被重载
B.静态方法能被重载
C.公有方法被重写之后,可以使用private修饰。
D.一个重写的方法不能抛出在父类中不被检查的异常。

【正确答案】B,D
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查Java中方法的重载和重写。
类中的方法,任意方法都可以被重载。只要满足方法名相同,参数不同,即可
实现重载。
选项A错误。
选项B正确。
选项C错误,子类重写父类的方法,子类的方法访问修饰符的访问权限必须大于或等于父类的访问修饰符的权限。
选项D正确,子类重写父类的方法,子类的方法抛出的异常类型必须是父类方法抛出异常类型或其子类型。如果父类方法没有定义异常,子类重写的方法也不可以抛出异常。

5.(多选题)下列程序中不会出现编译错误的是( )
A.short s1 = 3;
short s2 = 5;
s1 += s2;

B.short s1 = 3;
short s2 = 5;
s1 = s1+s2;

C.short s1 = 3;
short s2 = 5;
s1 = s1 * s2;

D.short s1 = 3;
short s2 = 5;
s1 *= s2 ;

【正确答案】A,D
【答题时间】2019-11-28 10:19:17
【答案解析】本题考查扩展赋值运算符。
Java的扩展赋值运算符,+=,-=,*=,/=, %=
x+=y等价于x=x+y,其他同理。
除了以上语法现象外,使用扩展赋值运算符运算的时候,内部隐含强制转换。
如果出现需要类型转换,扩展赋值运算符直接进行转换。
选项B C都出现相同错误,计算结果都是int类型,都需要从int类型强制转换到short类型 选项AD都使用扩展赋值运算符运算,自动强制转换
AD正确

三. 简答题

  1. 接口与抽象类的区别?越详细越好(5分)
    2.静态方法可不可以重写?为什么?(5分)
    3.static关键字的用法有哪些?(5分)
    4.重写和重载的区别?越详细越好(5分)
    5.this和super关键字的用法及区别(5分)

四.编程题

  1. 封装两个方法:第一个是随机生成长度为n数组元素是0–100以内的方法,数组的长度由参数来决定,
    randomArr(int n){
    }
    第二个方法是把冒泡排序封装成方法。参数是数组。
    sortBubble(int[] arr)
    然后在main()方法里 启用控制台,调用上面两个方法,对数组进行排序。最后输出排序后的数组(20分)

2.写一个Person类,有编号id,姓名name,职位job。
构造方法带三个参数。
方法:
登陆login
注册register
自我介绍talk

写一个学生Student类继承Person类,方法有:考试test
属性有:学费money

写一个老师Teacher类继承Person类,
属性有 工资salary
方法有:工作work
写一个测试类TestPerson,测试学生和老师
学生:姓名-张三 职位-学生 学费-18000
老师:姓名-李四 职位-老师 工资-8000(20分)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值