🔎选择题
(1)下面程序的输出是 ( )
String x=“fmn”;
x.toUpperCase();
String y=x.replace(‘f’,‘F’);
y=y+“wxy”;
System.out.println(y);
A.FmNwxy
B.fmnwxy
C.wxyfmn
D.Fmnwxy
D
toUpperCase() 方法会返回一个字符串作为转换成大写字母后的结果
x.toUpperCase() 只是调用该方法, 并没有去接受返回值, 所以 x 的值依然是 “fmn”
字符串 y 将 x 中的 f 替换为 F, 拼接 wxy, 输出 Fmnwxy
(2)在 java 中,一个类可同时定义为许多同名的方法,这些方法的形式参数个数,类型或顺序各不相同,传回的值可能各不相同,这种面向对象的特性称为()
A.隐藏
B.覆盖
C.重载
D.无此特性
C
重载的特性
方法名相同, 参数列表不同(参数的类型, 参数的个数, 参数的顺序), 返回值不做要求
(3)关于 JAVA 的堆,下面说法错误的是()
A.所有类的实例和数组都是在堆上分配内存的
B.对象所占的堆内存是由自动内存管理系统回收
C.堆内存由存活和死亡的对象,空闲碎片区组成
D.数组是分配在栈中的
D
A. 类的实例化和数组的开辟都是需要 new 的, 因此都是在堆上分配内存的
B. 对象所占的堆内存是由自动内存管理系统回收
C. 堆内存由存活和死亡的对象,空闲碎片区组成
D. 数组分配在堆中
(4)一个以“.java”为后缀的源文件 ( )
A.只能包含一个public类,类名必须与文件名相同
B.只能包含与文件名相同的public类以及其中的内部类
C.只能有一个与文件名相同的public类,可以包含其他非public类(不考虑内部类)
D.可以包含任意public类
C
A. 没考虑内部类
B. 还能包含其他的类
D. 只能包含一个 public 类(不考虑内部类)
(5)JAVA 语言的下面几种数组复制方法中,哪个效率最高?
A.for循环逐一复制
B.System.arraycopy
C.Arrays.copyOf
D.使用clone方法
B
执行效率
System.arraycopy() > Object.clone() > Arrays.copyof() > for
(6)()仅包含方法定义和常量值
A.接口
B.变量
C.单元
D.成员
A
接口是一种规范, 需要类去实现接口中的方法, 因此接口中仅包含方法的定义和常量值
(7)对文件名为Test.java 的 java 代码描述正确的是 ( )
class Person { String name = "No name"; public Person(String nm) { name = nm; } } class Employee extends Person { String empID = "0000"; public Employee(String id) { empID = id; } } public class Test { public static void main(String args[]) { Employee e = new Employee("123"); System.out.println(e.empID); }
A.输出:0000
B.输出:123
C.编译报错
D.输出:No name
C
实例化 Employee 类时, 由于 Employee 继承了 Person, 因此先去调用 Person 类的构造方法
系统提供的 super() 默认是无参数的, 而 Person 类的构造方法需要参数, 因此编译报错
(8)有关下述 Java 代码描述正确的选项是 ( )
public class TestClass { private static void testMethod(){ System.out.println("testMethod"); } public static void main(String[] args) { ((TestClass)null).testMethod(); } }
A.编译不通过
B.编译通过,运行异常,报NullPointerException
C.编译通过,运行异常,报IllegalArgumentException
D.编译通过,运行异常,报NoSuchMethodException
E.编译通过,运行异常,报Exception
F.运行正常,输出testMethod
F
testMehod() 被 static 修饰, 属于静态方法, null 被强转为 TestClass 类, 因此可以调用 testMethod() 方法
(9)下列 java 程序的输出结果为 ( )
public class Example{ String str=new String("hello"); char[]ch={'a','b'}; public static void main(String args[]){ Example ex=new Example(); ex.change(ex.str,ex.ch); System.out.print(ex.str+" and "); System.out.print(ex.ch); } public void change(String str,char ch[]){ str="test ok"; ch[0]='c'; } }
A.hello and ab
B.hello and cb
C.hello and a
D.test ok and ab
E.test ok and cb
F.test ok and c
B
change() 方法是引用传递
进入 change() 方法的形参 str 最初指向的是 “hello” 的地址
当执行到 str = “test ok” 时, 形参 str 指向的是 “test ok” 的地址
而实参 str 仍然指向的是 “hello” 的地址
ch[0] = ‘c’ 是将 ch 所指向地址的值进行了修改, 即 char[] ch = {‘c’, ‘b’}
但 ch 所指向的对象未发生改变
(10)在jdk1.5之后,下列 java 程序输出结果为 ( )
int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));
A.true,false
B.true,true
C.false,true
D.false,false
E.对于不同的环境结果不同
F.程序无法执行
B
基本类型和包装类型进行
==
比较时, 包装类型会自动拆包变为基本类型再去进行比较, 因此 Integer(0) 会变为 int j = 0 再去进行==
比较, 结果为 true两个 Integer 类型进行
==
比较, 如果其值在-128 ~ 127
(闭区间), 返回 true. 否则返回 false
两个包装类进行 equals() 比较, 首先会判断类型是否相同, 如果类型相同, 则继续比较值, 如果值相同, 则返回 true
🔎编程题
🥝另类加法
题目描述
给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符
解题思路
- 通过异或与按位与进行操作
- 异或表示无进位相加
- 按位与表示两数相加后需要进位的部分
- << 1 表示将需要进位的部分进1位
- 当按位与的结果为0, 此时异或的结果就是最后的答案(因为需要进位的没有了)
public static int addAB(int A, int B) { // write code here int Eor = A; while(B != 0) { Eor = A ^ B; B = (A & B) << 1; A = Eor; } return Eor; }
📢题目链接
链接: link
🥝走方格的方案数
题目描述
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
输入描述
输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述
输出一行结果
解题思路
采用递归求解
//走方格的方案数 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNextInt()) { int n = scan.nextInt();//横向(行) int m = scan.nextInt();//纵向(列) int ret = getRet(n,m); System.out.println(ret); } } private static int getRet(int n,int m) { if((n == 1 && m >= 1) || (n >= 1 && m == 1)) return n + m; int bottomArea = getRet(n - 1, m); int rightArea = getRet(n, m - 1); return rightArea + bottomArea; } }
📢题目链接
链接: link
🔎结尾
创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油