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