java 每日一练(6)

java 每日一练(6)

单选


1.关于抽象类与最终类,下列说法错误的是?

A 抽象类能被继承,最终类只能被实例化。

B 抽象类和最终类都可以被声明使用

C 抽象类中可以没有抽象方法,最终类中可以没有最终方法

D 抽象类和最终类被继承时,方法可以被子类覆盖

补充 : 最终类 也称为 密封类 (被 final 修饰的类 )


A : 正确 , 抽象类 本来就是用来继承的, 最终类 是 被 final 修饰的类,是不能继承的所以, 只能被实例化.


B : 正确

在这里插入图片描述


这里 A 和 B 就被声明 使用了


C : 看 B 的图 ,最终类 就没有 被 final 修饰的方法, 抽象类也没有 抽象方法, 所以是C 是正确的。


D : 错误, 最终类被final 修饰所以不能被继承.


2.已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?


A m. length()

B m. length-1

C m. length()+1

D m. length+1


答案 : 明显 选 B , 注意: 数组的 length是没有() 它不是一个方法。


3.下列哪个对访问修饰符作用范围由大到小排列是正确的?


A private>default>protected>public

B public>default>protected>private

C private>protected>default>public

D public>protected>default>private


答案 : public > protected > default > private 所以 答案 选 D


通过 下面这张图 加深 访问修饰限定符的印象

在这里插入图片描述


4. 有六个元素6,5,4,3,2,1顺序入栈,问下列哪一个不是合法的出栈序列?()


A 5 4 3 6 2 1

B 4 5 3 1 2 6

C 3 4 6 5 2 1

D 2 3 4 1 5 6


栈的特点 :先进后出

我们根据 栈的特点 就能很快的出答案

在这里插入图片描述


按照上面的方法, 我们去尝试 C 的时候 会出现 5 在 6 的上面, 当我们要出6的时候, 需要先出5 才能出 6 所以 C 就是错误的

所以本题的 答案 C


5.阅读下列程序,选择哪一个是正确的输出结果

在这里插入图片描述


A static A I’m A class static B I’m B class

B I’m A class I’m B class static A static B

C static A static B I’m A class I’m B class

D I’m A class static A I’m B class static B


答案 : 本题主要考察 代码块 , 复习文章 :(56条消息) 继承 Inheritance_


关于 代码块的总结 :

1、父类静态代码块优先于子类静态代码块执行,且是最早执行

2、父类实例代码块和父类构造方法紧接着执行

3、子类的实例代码块和子类构造方法紧接着再执行

4、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行


解析 : 先打印 父类的 静态代码块, 然后 打印 子类的 静态代码块 , 因为 题目中只有构造方法,所以 回显执行构造方法,子类 构造时会先帮助父类进行构造所以先执行父类的构造方法, 在执行子类的构造构造方法, 所以 答案 : C


执行 :

在这里插入图片描述


6.执行下列代码的输出结果是( )


在这里插入图片描述


A 10

B 20

C 30

D 40


答案 : 本题 主要考察的 是 异常中 finally 有没有捕获到异常都会执行 , 我们传入一个 10 给 test 方法, 然后 b+=10 让 b等于了 20 , 并且返回了 20 , 但是因为 finally 里面的代码 不管是否出现异常都会执行, 那么 b 再次 += 10 变成了 30,最后 通过 return b , 就返回了 30 ,将原来的替换掉了。


7.下列代码的输出结果是 ?

在这里插入图片描述

A true

B false

C null

D 空字符串


解析 :

在这里插入图片描述


所以 答案很明显 选 B

不定项选择题

1.在Java中下面Class的声明哪些是错误的?

A public abstract final class Test {
    
     abstract void method(); }

B public abstract class Test {
    
     abstract final void method(); }

C public abstract class Test {
    
     abstract void method() {
    
     } }

D public class Test {
    
     final void method() {
    
     } }


A : abstract 是定义抽象类 或抽象方法的 ,既然是抽象类 就是用来被继承的, 而 关键字 final 修饰的类是不能继承的, 而被 final修饰的方法是不能重写的。 所以 abstract 与 final 是不能出现在一起的 。 所以 A 错误

B : 同上

C : 抽象方法 本来就是被重写的所以 不需要具体实现,这里就不能带有 {} 所以 C 错误

在这里插入图片描述


D : 正确

2. 下列关于构造方法的叙述中,错误的是()


A java语言规定构造方法名与类名必须相同

B java语言规定构造方法没有返回值,但不同void声明

C java语言规定构造方法不可以重载

D java语言规定构造方法只能通过new自动调用


A : 正确

B : 正确

C : 错误 ,类是可以拥有多个 构造方法的, 构造方法可以是不带参数 , 带有一个参数等, 此时就满足了重载的规则,所以是可以构成重载的.

重载 : 方法名相同, 返回类型不做要求 ,参数类型 和参数个数不同 .


D : 错误 , 我们的 this 或 super , 都是可以调用 构造方法的, this 调用当前类的构造方法, super 调用父类的构造方法


3. 下面哪些赋值语句是正确的()


A long test=012

B float f=-412

C int other =(int)true

D double d=0x12345678

E byte b=128


A :test 被赋值了 一个 8进制 012 , 0 * 2 ^ 0 + 1 * 2 ^ 1 + 2 * 2 ^ 2 ,所以 test 其实是被赋值了一个 10。

B : f 被赋值了 一个 -412 也是可以的

C : 错误的 ,boolean 类型 , 不能进行强转 成一个数值类型的。

D : 此时 d 相当于被赋值了一个 16进制 ,是可以这样写的

E : byte 的取值范围 为 -128 到 127 , 此时 赋值超过了 最大范围的 127 .


所以 答案 A B D

编程题

题目一 : 不要二_牛客题霸_牛客网 (nowcoder.com)


图一 :

在这里插入图片描述


图二 :

在这里插入图片描述


分析完 ,代码就非常好写了 , 这里我们创建是数组默认是 0 ,然后不能放的地方设为1 ,定义一个 count 计数器 , 统计我们能够放蛋糕的地方,然后将不能放蛋糕的地方设为1 即可. 最后打印 我们的 count 。

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // 注意 题目是 可能是有点一点问题, 先给了 行
        // 所以 那 H 接收 ,然偶 那 W 接收列 
        // 
        int H = in.nextInt();
        int W = in.nextInt();
        
        int[][] arr = new int[H][W];
        int count = 0;
        for(int x = 0;x<H;x++){
    
    
            // 先遍历行
            for(int y = 0 ; y <W; y++){
    
    
                // 在遍历列
                if(arr[x][y] == 0){
    
    
                    // 此时 可以存放蛋糕
                    count++;
                    // 此时 将 不能放的置为 1
                    if(x+2 < H){
    
    
                        arr[x+2][y] = 1;
                    }
                    if(y + 2 < W){
    
    
                        arr[x][y+2] = 1;
                    }
                }
            }
        }
        System.out.print(count);
    }
}

题目二 :把字符串转换成整数__牛客网 (nowcoder.com)

在这里插入图片描述


因为比较简单直接给代码 :

import java.util.*;
public class Solution {
    
    
    public int StrToInt(String str) {
    
    
        int a = 0;
        boolean flag = false;
        // 遍历我们的字符串 
        for(int i = 0 ; i < str.length(); i++){
    
    
            char c = str.charAt(i);
            if(c == '+' && i == 0){
    
    
                continue;
            }
            if(c == '-' && i == 0){
    
    
                flag = true;
                continue;
            }
            // 此时 不是 + - ,普通的数字部分
            if(c <= '0' || c > '9'){
    
    
                // 此时 是字母所以直接返回 0,
                // 题目说 为0 同样需要返回 0
                return 0;
            }
            // 将字符串 转为 数字
            a  = a * 10 + (c - '0');           
        }
        return flag ? -a : a;
    }
}

猜你喜欢

转载自blog.csdn.net/mu_tong_/article/details/128121946