目录

一、选择题

二、编程题 

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" 考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。

下列关于java最终类的描述 下列选项中关于java中super_java

 本题创建两个方法来判断满足哪一种排序方法,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的最小公倍数。

下列关于java最终类的描述 下列选项中关于java中super_开发语言_02

 首先找到两个数中更大的那个数,公倍数的意义就是最小的能整除这两个数的一个数,找到更大的那个然后一直++,直到找到能将两个数都整除的数为止。

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;
            }
        }
    }
}