每日一练Day8

一. 单选

1. 以下选项中,对Java关于内存回收的说法正确的是()

A 程序员必须创建一个线程来释放内存

B 内存回收程序负责释放无用内存

C 内存回收程序允许程序员直接释放内存

D 内存回收程序可以在指定的时间释放内存对象

答案

B

解析:

JVM的垃圾回收由JVM自己执行


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


3. 以下说法错误的是()

A 数组是一个对象

B 数组不是一种原生类

C 数组的大小可以任意改变

D 在Java中,数组存储在堆中连续内存空间里

答案

C

解析:数组的大小是固定的


4. Test.main() 函数执行后的输出是()

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

答案

D

注意:这里父类的 getValue 中的 finally 中没有 return

首先,super()函数指的是调用父类的构造方法
①
new B()
执行B的构造函数,第一行是super(5);
此时执行的是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
1
答案就是:22,34,17

5. 关于Java的异常处理机制的叙述哪些正确?

A 如果程序发生错误及捕捉到异常情况了,才会执行finally部分

B 其他选项都不正确

C 当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序

D catch部分捕捉到异常情况时,才会执行finally部分

答案

C

解析:finally 部分无论是否 catch 部分捕捉到异常都会执行


6. 如何跳出Array的forEach循环?()

A break

B return true

C return false

D 以上都不是

答案

A


7. 一个以”.java”为后缀的源文件

A 只能包含一个类,类名必须与文件名相同

B 只能包含与文件名相同的类以及其中的内部类

C 只能有一个与文件名相同的类,可以包含其他类

D 可以包含任意类

答案

C


8. 如下Java语句

double x= 3.0;
int y=5;
x/=--y;

执行后, x的值是()

A 3

B 0.6

C 0.4

D 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

答案

A

解析:静态成员在内存中只存在一个,该类的所有对象共用这一个静态成员


10. JUnit主要用来完成什么

A 发送HTTP请求

B 建立TCP连接

C 集成测试

D 单元测试

答案

D

二. 编程

1. ACM编程题 标题:两种排序方法 | 时间限制:1秒 | 内存限制:32768K

考拉有n个字符串字符串,任意两个字符串长度都是不同的。考拉最近学习到有两种字符串的排序方法:

1.根据字符串的字典序排序。例如:

"car" < "carriage" < "cats" < "doggies < "koala"

2.根据字符串的长度排序。例如:

"car" < "cats" < "koala" < "doggies" < "carriage"

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

输入描述:

输入第一行为字符串个数n(n ≤ 100)

接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成

输出描述:

如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically"

如果根据长度排列而不是字典序排列输出"lengths",

如果两种方式都符合输出"both",否则输出"none"

示例1:

输入

3

a

aa

bbb

输出

both

答案

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) { 
           int n = in.nextInt();
           String[] str = new String[n];
           for(int i = 0; i< n;i++){
                str[i] = in.next();
           }
          boolean dic = isDicSort(str);
          boolean len = isLenSort(str);
          if(dic && len){
              System.out.print("both");
          }else if(dic){
            System.out.print("lexicographically");
          }else if(len){
            System.out.print("lengths");
          }else{
            System.out.print("none");
          }

        }
    }
     public static boolean isDicSort(String[] str){
        for(int i = 0;i< str.length -1;i++){
        // int result = a.compareTo(b); // result的值为-1,因为"apple"在字典序中排在"banana"之前
               if(str[i].compareTo(str[i+1]) > 0){  
                    return false;
               }
        }
        return true;
     }
     public static boolean isLenSort(String[] str){
        for(int i = 0;i< str.length -1;i++){
               if(str[i].length()>str[i+1].length()){
                    return false;
               }
        }
        return true;
     }
}

字典排序还可以这样

将字符串数组转换为集合,调用 Collections.sort(list);(默认是按元素的第一个字母从小到大排序) 再与原来的没有排序的集合进行 equals 比较

2. ACM编程题 标题:求最小公倍数 | 时间限制:1秒 | 内存限制:32768K

正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。

数据范围: 1≤a,b≤100000

输入描述:

输入两个正整数A和B。

输出描述:

输出A和B的最小公倍数。

示例1:

输入

5 7

输出

35

示例2:

输入

2 4

输出

4

答案

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
         int a = in.nextInt();
         int b = in.nextInt();
         int c = a ; // 记录下a的值方便a做自加运算
         System.out.print(common(a,b,c));
    }
    public static int common(int a,int b,int c){
         if(a % b == 0){  // a累加自身 可以整除a ,直到能整除b
            return a;
         }
         return common(a+c,b,c); // a累加自身
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PJP__00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值