学习测试题(二)

学习测试题
一、 选择题
1、判断两个字符串的内容是否相同,下面哪个选项正确( )
A)==
B)=
C)equlas()
D)以上的都不对
正确答案为:C
解析:equals()方法用来判断字符串的内容是否相同,==用来比较字符串对象的地址是否相同,=用来赋值
2、阅读下列代码;

public class Test{
	String s="One World One Dream";
	public static void main(String args[]){
		System.out.println(s);
	}
}

其运行结果是()
A.args
B.One World One Dream
C.s
D.编译错误
正确答案:D
解析:main方法是程序执行的入口,在本程序中main方法中的语句"System.out.println(s);"无法调用在main方法外声明的变量,所以编译时出错。
3、int[] arr=new int[1];
new int[]存在于( )中
A、堆 B、栈 C、方法区 D、以上都不对
答案:A
解析:new出来的对象都存在于堆中
4、A派生出子类B ,B派生出子类C,并且在Java源代码中有如下声明:
A a0=new A();
A a1 =new B();
A a2=new C();
问以下哪个说法是正确的? ( )
A.只有第1行能通过编译
B.第1、2行能通过编译,但第3行编译出错
C.第1、2、3行能通过编译,但第2、3行运行时出错
D.第1行、第2行和第3行的声明都是正确的
正确答案:D
解析:都属于父类引用指向子类对象
5、在Java中,关于super关键字说法正确的是()。
A.super关键字是在子类对象内部指代其父类对象的引用
B.super关键字不仅可以指代子类的直接父类,还可以指代父类的父类
C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法
正确答案:A
解析:此题目考查的是Java中的super关键字。在Java语言中的super关键字只能指代子类的直接父类,不能指代它父类的父类,所以选项B是错误的,super关键字既可以调用父类的属性也可以调用父类的方法,所以选项C和D是错误的。本题正确选项为A。
6、下列语句的输出结果是:()。
System.out.println(5+7+“tarena”+5+7);
A.12tarena57
B.57tarena12
C.57tarena57
D.12tarena12

正确答案:A
解析:本题考查字符串的连接。“+”有两种运算规则,一种是“+”两端为数字则为数学加法运算,另外一种是实现字符串的连接,也可以实现字符串与其他数据类型的“相连”。本题中,字符串之前的运算按照加法运算,字符串之后的运算按照字符串相连。语句System.out.println(5+7+“tarena”+5+7);的输出结果为12tarena57
7、int n = 120;
byte b = (byte)(n+12);
System.out.println(b);
如上代码输出结果 (D)
A、123
B、-123
C、124
D、-124
8、关于Java抽象类的说法,错误的是()。
A.包含抽象方法的类必须是抽象类
B.抽象类不能被实例化
C.继承抽象类时,具体子类必须实现所有的抽象方法
D.如果一个类不包含任何抽象方法,那么该类不能声明为抽象类
正确答案:D
解析:此题目考查的是Java中抽象类。
在Java语言中,一个类若不包含任何抽象方法,它也可以声明为抽象类,同样该类不能被实例化,所以本题正确选项为D。
9、在Java中,下面代码段的输出结果是()。

public class Test {
	public static void main(String[] args) {
		Super s = new Sub();
		s.show();
	}
}
class Super{
	public void show(){
		System.out.println("Super");
	}
}
class Sub extends Super{
	public void show(){
		System.out.println("Sub");
	}
}

A.Sub
B.Super
C.编译错误
D.运行异常
正确答案:A
解析:此题目考查的是Java中方法的重写、向上造型。
在本题目中,父类型引用指向子类对象为向上造型,而当子类对象的重写方法被调用时,不管是子类的引用调用还是父类的引用来调用,最终运行的都是子类重写后的版本,所以本题正确选项为A。
10、下列程序的输出结果是( )。

class Person{
	public Person(){
		System.out.println("I am a Person!");
	}
	public void study(){
		System.out.println("Person is Studing");
	}
}
class Worker extends Person{
	public Worker(){
		System.out.println("I am a Worker!");
	}
	public void study(){
		System.out.println("Worker is Studing");
	}
	public static void main(String[] args){
		Person p = new Worker();
		p.study();
	}
}

A.I am a Person!
I am a Worker!
Worker is Studing
B.I am a Worker!
Worker is Studing
C.I am a Person!
I am a Worker!
Person is Studing
D.I am a Worker!
Person is Studing
正确答案:A
解析:本题考查继承中的构造函数和父类的引用指向子类的对象。继承中,子类的构造函数,默认一定会调用父类的无参构造函数,本题中使用子类的构造函数创建了对象,那么子类的构造函数首先调用父类的构造函数,所以会输出I am a Person!,I am a Worker!,Person p = new Worker();父类的引用指向了子类的对象,子类重写了父类的study()方法,在运行期,实际调用的一定是子类中的study()方法,会输出Worker is Studing。所以选项A正确。
11、下列选项中能够正确获取到一个元素在数组中首次出现的位置的函数是( )。

A.
public int getIndex(int[] arr,int key){ 
	for (int x=0; x<arr.length ; x++ ){
		if(arr[x]==key)
		return x;
	}
	return -1;
}
B.
public int getIndex(int[] arr,int key){
	for (int x=0; x<arr.length ; x++ ){
		if(arr[x]==key)
		return x;
	}
}
C.
public int getIndex(int[] arr,int key){ 
	for (int x=0; x<=arr.length ; x++ ){
		if(arr[x]==key)
		return x;
	}
	return -1;
}
D.
public int getIndex(int[] arr,int key){ 
	for (int x=0; x<arr.length ; x++ ){
		if(arr[x]==key)
		return key;
	}
	return -1;
}

正确答案:A
解析:该题目考查自定义方法操作数组,选项A正确,选项B 如果查找的key在数组中不存在return语句不会执行,缺失return语句,选项C 会出现数组下标越界异常,选项D 语法没错误,返回可能是查找的元素,而不是位置
12、在Java中,下面代码段的运行结果是()。

public class Test {
	public static void main(String[] args) {
		Aoo aoo = new Aoo(5);
	}
}
class Aoo{
	public Aoo() {
		System.out.println("无参");
	}
	public Aoo(int num){
		this();
		System.out.println("有参");
	}
}

A.无参
B.有参
C.无参、有参
D.有参、无参
正确答案:C
解析:此题目考查的是Java中的构造方法以及this关键字。在本题中,创建Aoo对象时调用的是有参构造方法,在Aoo有参构造方法中首先通过this()先调用了Aoo类的无参构造方法输出无参,而后又输出的有参,所以本题正确选项为C。
13、分析如下Java代码,如果想在控制台上输出"B类的test()方法",
则在1处应填入( )。

class A { 
	public void test() { 
		System.out.println("A类的test()方法"); 
	} 
} 
class B extends A { 
	public void test() { 
		System.out.println("B类的test()方法"); 
	} 
	public static void main(String args[]) {
		// 1
	} 
}

A.A a = new B();a.test();
B.A a = new A();a.test();
C.B b = new A(); b.test();
D.B.test();
正确答案:A
解析:本题中类B继承了类A,子类中重写了父类的方法test()。选项A,在继承和重写的前提下,父类A类型的引用变量a指向了子类,B创建的对象。a.test(),会调用子类中的test()方法,会满足题目要求,选项A正确。
14、在Java中,下面代码段的运行结果是(A)。

public class OverrideOverloadDemo {
	public static void main(String[] args) {
		Goo goo = new Goo();
		Eoo o = new Foo();
		goo.test(o);
	}
}
class Goo{
	void test(Eoo o){
		System.out.println("超类型参数");
		o.show();
	}
	void test(Foo o){
		System.out.println("派生类型参数");
		o.show();
	}
}
class Eoo{
	void show(){
		System.out.println("超类show");
	}
}
class Foo extends Eoo{
	void show(){
		System.out.println("派生类show");
	}
}

A、超类型参数,派生类show
B、超类型参数、超类show
C、派生类型参数、派生类show
D、派生类型参数、超类show
答案:A
解析:主要考重写和重载的区别,goo.test(o); //重载看参数类型Eoo;o.show(); //重写看对象类型Foo
15、下列对于内部类描述中错误的是:(C )
A.在一个类的声明里声明的类,也叫做内部类或嵌套类,内部类可以作为外部类的一个成员使用,可以访问外部类的所有成员,包括私有成员。
B.内部类的访问权限可以被定义为public、protected、private和default。但是普通类只可以定义public和default两种访问权限。
C.内部类的访问权限可以被定义为public、protected、private和default。普通类也可以定义上面四种访问权限,但是通常我们只应用public和default两种访问权限。
D.局部内部类中不可定义静态变量,可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
正确答案:C
解析:本题考查内部类的使用。选项C错误,普通类只能使用public和default两种访问权限
选项ABD正确。
二、多选题
1、(多选题)给定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){}
正确答案:AC
解析:本题考查方法的重载规则,方法的重载必须满足方法名相同和参数不同(类型或个数,选项AC满足重载的条件正确,选项BD参数都与定义的方法参数相同,不是重载。
2、(多选题)给出以下代码,请问该程序的运行结果是什么?

class A{
	private int x=0;
	static int y=1; 
	protected int z=2;
} 
class B extends A{ 
	void method(){
		System.out.println(x); 	
		System.out.println(y);	 
		System.out.println(z); 
	}
} 

下列说法正确的是( )。
A.程序编译错误,因为类B不能访问变量x。
B.程序编译成功,打印输出012。
C.程序编译错误,如果移走System.out.println(x)这条语句,
可使编译程序通过。
D.程序编译错误,因为变量x未在类B中定义。
正确答案:ACD
解析:本题考查java中几种访问修饰符,public:公共的,可以在任何类中访问,protected:受保护的,只能在同一个包中,或子类中访问,default:只能在同一个包中的类中访问,private:私有的,只能在本类中访问的,本题代码中,变量x是私有的,不能在类外部访问,ACD正确。
3、(多选题)Java中,下列说法正确的是( )。
A.私有方法不能被重载
B.静态方法能被重载
C.公有方法被重写之后,可以使用private修饰。
D.一个重写的方法不能抛出在父类中不被检查的异常。
正确答案:BD
解析:本题考查Java中方法的重载和重写。类中的方法,任意方法都可以被重载。只要满足方法名相同,参数不同,即可实现重载。选项A错误。选项B正确。选项C错误,子类重写父类的方法,子类的方法访问修饰符的访问权限必须大于或等于父类的访问修饰符的权限。选项D正确,子类重写父类的方法,子类的方法抛出的异常类型必须是父类方法抛出异常类型或其子类型。如果父类方法没有定义异常,子类重写的方法也不可以抛出异常。
4、(多选题)下列对java中关键字final的说法正确的是( )。
A.关键字final可以修饰类,方法,变量。
B.final修饰的类,称为final类,类中方法必须使用final修饰
C.类中被final修饰的方法,在其子类中不能被重写
D.类中的变量如果使用static和final修饰,必须声明同时初始化,不可被改变
正确答案:ACD
解析:本题考查final的用法,final可以修饰类,方法,和变量, final修饰方法,不可以被重写, final修饰类,该类不能被继承,final修饰的变量,为常量,不可改变,选项ACD正确。选项B错误,final的类中,没有对方法是否final的限定。
5、(多选题)下面关于数组的说法中,正确的是( )。
A.在类中声明一个整数数组作为成员变量,如果没有给它赋值,数值元素值为空
B.数组可以在内存空间连续存储任意一组数据
C.数组必须先声明,然后才能使用
D.数组本身是一个对象
正确答案:CD
解析:本题考查数组的基本使用
数组中元素如果是数值元素初值为0值,数组中元素类型必须一致,数组必须先声明再使用,数组在内存中以对象的形式存在。选项CD正确。
三、填空题
1、1000101转化为十进制数是69
2、将十六进制数AB转化为十进制数是171
3、抽象类封装派生类所共有的属性行为
4、final修饰成员变量,有两种初始化方式:声明的同时初始化在构造方法中初始化
四、简答题(3
5=15)
1、 简述重载与重写的区别
    重写(Override):
        1.1)发生在父子类中,方法名称相同,参数列表相同,方法体不同
        1.2)遵循"运行期"绑定,看对象的类型来调用方法
    重载(Overload):
        2.1)发生在一个类中,方法名称相同,参数列表不同,方法体不同
        2.2)遵循"编译期"绑定,看参数/引用的类型来绑定方法
2、简述访问控制修饰符public,private,protected,以及不写时的区别。
作用域  当前类  同一package子孙类  其他package
public     √       √        √          √
protected  √      √        √          ×
friendly   √      √         ×          ×
private   √       ×        ×          ×
3、 简述静态变量和实例变量的区别
    静态变量属于类,存储在方法区,只有一份,通过类名.访问。
    实例变量属于对象,访问通过对象.访问放在堆中,每个对象有一份。
五、编程题
1、.打印出“金字塔”,效果图如下:

public class  Pyramid  {
	public static void main(String[] args) {
		for(int i = 1; i < 8; i++){   //控制行数
			for(int j = 0; j < 8-i;j++){   //每行要打印的空格数
				System.out.print(" ");
			}
			for(int k = 1; k < 2*i; k++){   //每行要打印的符号的个数(相对于前一行多两个)
				System.out.print("*");
			} 
			System.out.print("\n");   //换行打印
		}
	}
}

结果:
在这里插入图片描述

2、一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

public class ![Programme25](https://img-blog.csdnimg.cn/20210208183458239.png)
 {
    public static void main(String[] args) {
       System.out.println("请输入一个五位数:");
       Scanner scanner=new Scanner(System.in);
       int input=scanner.nextInt();//获取输入的数字
       int arr[]=new int[5];//创建一个大小为5的数组
       int i=4;
       do {//逐次取位
           arr[i]=input%10;
           input/=10;
           i--;
       } while (i>=0);//这里的结束条件写input!=0也是可以的
       //System.out.println(Arrays.toString(arr));
       if (arr[0]==arr[4]&&arr[1]==arr[3]) {
           System.out.println("输入的数是回文数字!");
       }else {
           System.out.println("输入的数不是回文数字!");  
       }
       scanner.close();
    }
}

结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值