目录
一、选择题
二、编程题
2.1两种排序方法
2.2最小公倍数
一、选择题
1.下列选项中关于Java中super关键字的说法正确的是()
A super关键字是在子类对象内部指代其父类对象的引用
B super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类
C 子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D 子类通过super关键字只能调用父类的属性,而不能调用父类的方法
super关键字是在子类对象内部指代其父类对象的引用,子类通过super关键字可以调用父类的方法和属性,super关键字只能指代直接父类,不能指代父类的父类。
所以正确答案是 A
2.A派生出子类B,B派生出子类C,并且在java源代码中有如下声明: 以下哪个说法是正确的?
A a0=new A();
A a1=new B();
A a2=new C();
A 第1行,第2行和第3行的声明都是正确的
B 第1,2,3行都能通过编译,但第2,3行运行时出错
C 第1,2行能通过编译,但第3行编译出错
D 只有第1行能通过编译
在派生关系中,A派生B,B派生C,B和C都可以利用A类对象创造实例。
所以正确答案是 A
3.以下说法错误的是()
A 数组是一个对象
B 数组不是一种原生类
C 数组的大小可以任意改变
D 在Java中,数组存储在堆中连续内存空间里
数组就是一个对象,不是一种原生类,数组的大小长度是固定的不能改变。数组存储是在堆中的连续内存空间里。
所以正确答案是 C
4.Test.main() 函数执行后的输出是()
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}
static class A{
protected int value;
public A(int v) {
setValue(v);
}
public void setValue(int value){
this.value = value;
}
public int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}
return value;
}
}
static class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}
public void setValue(int value){
super.setValue(2 * value);
}
}
}
A 11 17 34
B 22 74 74
C 6 7 7
D 22 34 17
首先new B()执行B的构造函数,第一行是super(5);super()函数指的是调用父类的构造方法
此时执行的是A的构造函数,A的构造函数调用的是setValue()方法,由于B重写了A的这个方法,所以执行的是B的 setValue()方法。即传入的参数是2*5=10。
此时,因为super,所以调用的是父类的 setValue()方法,即value=10,第一行执行完毕。
第二行是 setValue(getValue()-3),B没有getValue()方法,故执行父类的此方法,try返回的是value=10+1=11,保存在临时栈中。finally中调用this的方法,这个this指的是B的对象,又重写,故就是B的 setValue()方法,value=2*11=22,第一个打印到屏幕上的数字。
接下来参数 getValue()-3=11-3=8,传入B的 setValue()方法,此时value=2*8=16,至此,new B()执行结束。
然后new B(). getValue(),B没有 getValue(),故执行A的 getValue()
try返回16+1=17,保存到临时栈中,finally调用B的 setValue()方法,value=17*2=34,第二个打印到屏幕上面的数字,最后主函数打印返回值,也就是打印try保存到临时栈中的17
所以正确答案是 D
5.关于Java的异常处理机制的叙述哪些正确?
A 如果程序发生错误及捕捉到异常情况了,才会执行finally部分
B 其他选项都不正确
C 当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序
D catch部分捕捉到异常情况时,才会执行finally部分
只要有finally代码块,一定会被执行不论是否捕捉到异常情况。但是catch代码块是当try区段的程序发生异常且被catch捕捉到时,才会执行。
所以正确答案是 C
6.如何跳出Array的forEach循环?()
A break
B return true
C return false
D 以上都不是
跳出循环使用的关键字是break
所以正确答案是 A
7.一个以”.java”为后缀的源文件
A 只能包含一个类,类名必须与文件名相同
B 只能包含与文件名相同的类以及其中的内部类
C 只能有一个与文件名相同的类,可以包含其他类
D 可以包含任意类
一个以”.java”为后缀的源文件只能有一个与文件名相同的类,可以包含其他类
所以正确答案是 C
8.如下Java语句 执行后, x的值是()
double x= 3.0;
int y=5;
x/=--y;
A 3
B 0.6
C 0.4
D 0.75
按照运算符优先级会先执行--y,所以y的值变成4,然后x/4,x为double类型所以结果也是double类型的,结果是0.75。
所以正确答案是 D
9.下列代码运行后输出结果为()
public class Test1 {
static int cnt = 6;
static {
cnt += 9;
}
public static void main(String[] args) {
System.out.println("cnt =" + cnt);
}
static {
cnt /= 3;
}
}
A cnt=5
B cnt=2
C cnt=3
D cnt=6
进入程序中首先定义了int,然后先执行静态构造块,先+=9,然后/=3,得到的结果是5,然后执行main方法输出结果。
所以正确答案是 A
10.以下程序的运行结果是()
public class Increment
{
public static void main(String args[])
{
int a;
a = 6;
System.out.print(a);
System.out.print(a++);
System.out.print(a);
}
}
A 666
B 667
C 677
D 676
本题中考察的++运算符,在输出时实现输出a,然后结束这层使用后a才会变成a+1。所以前两个输出都是6,最后一个是7。
所以正确答案是 B
二、编程题
2.1两种排序方法
考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法: 1.根据字符串的字典序排序。例如: "car" < "carriage" < "cats" < "doggies < "koala" 2.根据字符串的长度排序。例如: "car" < "cats" < "koala" < "doggies" < "carriage" 考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。
本题创建两个方法来判断满足哪一种排序方法,iscd用于判断该字符串是不是按照字符串长度排序,遍历n个字符串,是否从前向后每个字符串都比前面的长。
isze用来判断该字符串是否按照字典序列排序,利用String类的compareTo方法来进行两个字符串的比较,str[i].compareTo(str[i+1])<0即满足条件。
然后结合两个返回值判断到底满足哪种排序方法。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] str = new String[n];
for (int i = 0; i <n; i++) {
str[i] = sc.next();
}
boolean zd = isze(str);
boolean cd = iscd(str);
if(zd&&cd){
System.out.println("both");
}else if(cd){
System.out.println("lengths");
}else if(zd){
System.out.println("lexicographically");
}else{
System.out.println("none");
}
}
private static boolean iscd(String[] str) {
for (int i = 0; i < str.length-1; i++) {
if(str[i].length()>=str[i+1].length()){
return false;
}
}
return true;
}
private static boolean isze(String[] str) {
for (int i = 0; i < str.length-1; i++) {
if(str[i].compareTo(str[i+1])>=0){
return false;
}
}
return true;
}
}
2.2最小公倍数
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
首先找到两个数中更大的那个数,公倍数的意义就是最小的能整除这两个数的一个数,找到更大的那个然后一直++,直到找到能将两个数都整除的数为止。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int max = Math.max(a,b);
int min = Math.min(a,b);
for(int i = max;i>0;i++){
if(i % max == 0 && i % min == 0){
System.out.println(i);
break;
}
}
}
}