一. 单选
1. 关于抽象类与最终类,下列说法错误的是?
A 抽象类能被继承,最终类只能被实例化。
B 抽象类和最终类都可以被声明使用
C 抽象类中可以没有抽象方法,最终类中可以没有最终方法
D 抽象类和最终类被继承时,方法可以被子类覆盖
答案
D
解析:最终类是指使用关键字final声明的类,它们不能被继承,即不能有子类。最终类中可以不包含最终方法,包含最终方法的类可以是最终类也可以是非最终类。被final修饰的类不能被继承,所以不能作为其他类的父类,典型代表就是String类
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
3. 下列哪个对访问修饰符作用范围由大到小排列是正确的?
A private>default>protected>public
B public>default>protected>private
C private>protected>default>public
D public>protected>default>private
答案
D
解析:
- public:公共访问级别,表示该成员可以被任何类访问。在同一个包中的其他类可以访问它,不同包中的类也可以访问它。
- protected:受保护的访问级别,表示该成员可以被同一个包中的类和子类访问。对于不同包中的类,只有继承了当前类的子类才能访问它。
- default(无修饰符):默认访问级别,表示该成员可以被同一个包中的类访问。对于不同包中的类,需要显式地指定为public或protected才能访问。
- private:私有访问级别,表示该成员只能被其所在类访问。对于不同包中的类,即使它们继承了当前类,也无法访问该成员。
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
解析:该题指的出栈不是一次性出栈,如果是指一次性的出栈 则只有唯一的顺序: 123456
该题的出栈是指可随时进出栈,栈是先进后出
A:第一个 5 出栈,则 6 必在栈中
C:第一个 3 出栈,则 6、5、4 在栈中,出栈顺序为 4、5、6
5. 阅读下列程序,选择哪一个是正确的输出结果⭐
class HelloA{
public HelloA()
{
System.out.println("I’m A class ");
}
static
{
System.out.println("static A");
}
}
public class HelloB extends HelloA{
public HelloB()
{
System.out.println("I’m B class");
}
static{
System.out.println("static B");
}
public static void main (String[] args){
new HelloB();
}
}
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
答案
C
解析:加载顺序:静态代码块>实例代码块>构造器
java中子类的构造函数必须首先调用父类的构造函数,如果子类的构造函数没有显示的调用父类的构造函数,编译器回自动的在子类的构造函数的第一排调用父类的无参构造函数,如果父类没有无参构造函数,子类必须显示调用父类的其他构造函数,否则将报错
6. 执行下列代码的输出结果是( )
public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try
{
b += 10;
return b;
}
catch(RuntimeException e)
{
}
catch(Exception e2)
{
}
finally
{
b += 10;
return b;
}
}
}
A 10
B 20
C 30
D 40
答案
C
public class Test {
public static void main(String args[]) {
int num = 10;
System.out.println(test(num));
}
public static int test(int b) {
try {
b += 10;
System.out.println("try");
return b;
} catch (RuntimeException e) {
} catch (Exception e2) {
} finally {
b += 10;
System.out.println("finally");
return b;
}
}
}
输出:
try
finally
30
7. 下列代码的输出结果是_____
boolean b=true?false:true==true?false:true;
System.out.println(b);
A true
B false
C null
D 空字符串
答案
B
解析:
==
优先级大于?:
`?:
计算方向:从右到左
boolean b=true?false:true==true?false:true;
=boolean b=true?false:(true==true)?false:true;
=boolean b=true?false:true?false:true;
=boolean b=true?false:(true?false:true);
=boolean b=true?false:false;
=boolean b=false;
二. 不定项选择
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 B C
解析:final
和 abstract
不能同时修饰方法和类
abstract
修饰的方法不需要加{}
2.下列关于构造方法的叙述中,错误的是()
A java语言规定构造方法名与类名必须相同
B java语言规定构造方法没有返回值,但不同void声明
C java语言规定构造方法不可以重载
D java语言规定构造方法只能通过new自动调用
答案
C D
3. 下面哪些赋值语句是正确的()
A long test=012
B float f=-412
C int other =(int)true
D double d=0x12345678
E byte b=128
答案
A B D
解析:byte属于Java中的整型,长度为1字节8bit,取值10000000(-128)到 01111111(127)
Byte max = 127;
Byte min = -128;
Short max = 32767;
Short min = -32768;
int max = 2,147,483,647;(2^31-1)
int min = -2,147,483,648;
Long max = 9,223,372,036,854,775,8087;(2^63-1)
Long min = -9,223,372,036,854,775,808;
Float i = 1.11L
doubled1=3.141592653589793;
三. 编程
1. ACM编程题 标题:不要二 | 时间限制:1秒 | 内存限制:32768K
二货小易有一个W*H的网格盒子,网格的行编号为0~H-1,网格的列编号为0~W-1。每个格子至多可以放一 块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述:
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
输出描述:
输出一个最多可以放的蛋糕数
示例1:
输入
3 2
输出
4
答案
与放蛋糕处距离为 2 的地方不能放蛋糕
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int a = in.nextInt(); // 行
int b = in.nextInt(); // 列
int[][] arr = new int[a][b]; // 默认所有数字都是0
int count = 0;
for(int i = 0;i < a;i++){ // 外层行循环
for(int j = 0; j < b;j++){ // 内层列循环
if(arr[i][j] == 0){
count++;
if(i+2<a){ // 判断同列行+2的数是否越界 没有越界则置为1 跳过改数
arr[i+2][j] = 1;
}
if(j+2 < b){
arr[i][j+2] = 1;
}
}
}
}
System.out.print(count);
}
}
}
2. 完善核心代码 标题:把字符串转换成整数 | 时间限制:1秒 | 内存限制:65536K | 语言限制:[Kotlin,
Typescript, Python, C++, Groovy, Rust, C#, Java, Go, Scala, Javascript, Ruby, Swift, Php, Python 3]
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围:字符串长度满足 0≤n≤100
进阶:空间复杂度 O(1) ,时间复杂度 O(n)
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1:
输入
"+2147483647"
输出
2147483647
示例2:
输入
"1a33"
输出
0
答案
import java.util.*;
public class Solution {
public int StrToInt(String str) {
int flag = 1;
int i = 0;
if(str.length() == 0){
return 0;
}
char[] chars = str.toCharArray();
if(str.charAt(0) == '-'){
flag = -1;
chars[0] = '0';
i++;
}
if(str.charAt(0) == '+'){
flag = 1;
chars[0] = '0';
i++;
}
int result = 0;
for(int j = i;j<chars.length;j++){
if(chars[j] >= '0'&&chars[j]<='9'){
result = result*10+(chars[j]-'0');
}else{
return 0;
}
}
return flag*result;
}
}
注:
public static void main(String[] args) {
char[] chars ={'0','1','2'};
int result = 0;
for(int i = 0;i<chars.length;i++) {
result =result*10 + chars[i] -'0';
}
System.out.println(result);
}
输出:
12