习题链接:https://blog.csdn.net/zz2097831284/article/details/120334301
一、单选题(每题 2 分,共 40 分)
1.下列 javaDoc 注释正确的是( C )
A./*我爱北京**/ 多行注释,是注释的一种
B.//我爱北京**/
C./**我爱北京**/ 文本注释,是javaDoc注释
D./*我爱北京***/
2.计算二进制 1100^1010 的结果是( C )
A.1000 B.1110 C.0110 D.0000
3.计算~36 的十进制结果是( D )
A.36 B.-36 C.37 D.-37
36: 00000000 00000000 00000000 00010100
~36:11111111 11111111 11111111 11101011 即-1-36=-37
4.二进制数(0011 1101)转换成十六进制数是( B )
A.3C B.3D C.E1 D.F1 //0011为3,1101为13即D
5.在位运算中,操作数每左移一位,其结果相当于( A )
A.操作数乘以 2 //左移一位=*2
B.操作数除以 2 //右移一位=/2
C.操作数除以 4 //左移二位=*4
D.操作数乘以 4 //右移二位=/4
6.以下( C )表达式产生一个 0~7 之间(含 0,7)的随机整数
A、Math.floor(Math.random()*6) //向下取整5
B、Math.floor(Math.random()*7) //向下取整6
C、Math.floor(Math.random()*8)//向下取整7
D、Math.ceil(Math.random()*8) //向上取整9
7.SimpleDateFormat 类的哪个方法可以将 Date 转化成 String 对象?( D )。
A.equals B.toString C.parse D.format //C是String转Date
8.String 类中的getBytes()方法的作用是( C )
A.将整数变成字符串 //int->String用valueOf或””+拼接
B.将字符串变成字符数组 //字符是char,用toCharArray()
C.将字符串变成字节数组
D.获取字符串中字符的个数 //获取长度length()
9。下面程序的输出结果是( A )
Class Demo{
public static void main(String[] args){
System.out.println(“abcd”.substring(1,3));//从1到3含头不含尾
}
}
A.bc
B.b
C.bcd
D.abcd
10.关于 Integer 类中的静态方法 parseInt()说法正确的是( B )
A.将小数转换为整数 //强转(int)
B.将数字格式的字符串转成整数
C.parseInt 方法永远不会抛出异常 //非int格式字符串会异常
D.将单个字符转成整数
11.将十进制数 100 转成二进制数用哪个方法 A
A.toBinaryString //十进制->二进制
B.toHexString //十进制->十六进制
C.intValue
D.toOctalString
12.假设有 random.dat 文件,其内容为“International”
请看下列代码的输出结果是:B
RandomAccessFile raf = new RandomAccessFile("random.dat", "r");
raf.seek (5); //指针挪向下标5 Inter↓national
byte[] buf = new byte[8]; raf.read(buf);//数组长8
System.out.println(new String(buf, “utf-8”));//输出下标5开始8个,national
raf.close();
A.International B.national C.rnational D.ational
13.阅读下面程序段:
BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream("bos.txt"));
bos.write( "hello".getBytes(“utf-8”)));//写完没刷新flush没关流close,还在缓冲区
假设bos.txt 不存在,运行该程序段后,文件bos.txt 的字节数为: D
A.5 B.10 C.4 D.0
14.请看下列代码:
public class Foo {
public static void main (String[]args) throws Exception {
String name = "tarena";
byte[] c = name.getBytes(); //将name转化为byte数组
File f = new File("company.txt");
FileOutputStream out = new FileOutputStream(f, true); //为true,从末尾开始写
out.write(c); //文件末尾+tarena
out.close();
}
}
假设文件 company.txt 中已存在一些内容,则关于上述代码的说法正确的是:( D )。
A.编译错误
B.程序可以通过编译,运行后文件 company.txt 没有任何改变
C.程序可以通过编译,运行后文件 company.txt 的长度变为 0
D.程序可以通过编译,运行后company.txt 文件末尾增加了字符串“tarena”
15.分析如下Java代码,如果想在控制台上输出"B类的test()方法",则1处应填入( A )。
class A {
public void test() {
System.out.println("A 类的 test()方法");
}
}
class B extends A {
public void test() {
System.out.println("B 类的test()方法");
}
public static void main(String args[]) {
// 1
}
}
A.A a = new B(); a.test(); //父类指向子类,用子类重写的test
B.A a = new A(); a.test();//父类指向父类,用父类的
C.B b = new A(); b.test();//子类指向父类,编译报错
D.B.test();//不是静态,不能直接调用
16.下面的程序输出结果是( C )。
public class A extends B {
int k = 20; //A的成员变量
public static void main(String args[]) { int i;
B c1 = new A();//父类指向子类,属性用自己的,方法用重写的
i = c1.k;//用父类B的k=10
System.out.println("i=" + i);
}
}
class B {
int k = 10; //B的成员变量
}
A.i=20 B.程序有编译错误 C.i=10 D.i=true
17.Java 语言中,String 类的 charAt ()方法返回的类型是( B )
A.int B.char C.double D.float
18.Java I/O 程序设计中,下列描述正确的是( A )
A.OutputStream 用于写操作
B.InputStream 用于写操作//Input是读read
C.I/O 库不支持对文件可读可写 API //File不能修改文件内容,IO可
D.InputStream 是一个接口 //是一个类
19.System.out.println("5" + 2);的输出结果应该是( A )。
A.52 //字符串拼接起来了
B.7
C.2
D.5
20.计算机中的流是( D )
A.流动的字节
B.流动的对象
C.流动的文件
D.流动的数据缓冲区
二、多选题(每题 3 分,共 15 分)
1.下列文档注释规范说明正确的是 ABCD
A.@author Lee Boynton 代表作者
B.@version 1.2.1 代表版本号
C.@see import java.util.Arrays;代表参见
D.@since JDK1.8 代表 JDK 版本
2.下列对 File 类的描述正确的是( CD )。
A.创建File 类对象,即在磁盘上创建了一个目录或文件//创建得createNewFile和mkdir
B.通过 File 类可以访问文件中的内容 //file访问目录,IO访问内容
C.File 类中的delete()方法,可以删除文件或目录,如果删除目录,只能删除空目录D.File 类中的 isDirectory()方法用于判断当前对象表示的是否是一个目录。
3.下列( AC )属于引用数据类型
A.String
B.char //BD是基本数据类型
C.用户自定义的 Student 类类型
D.int
4.下面的方法属于 StringBuffer 的是:( BCD )。
A.size
B.insert //插入,StringBuffer和Builder特有
C.delete //删除,StringBuffer和Builder特有
D.length //长度,大家都有
5.关键字 abstract 修饰类时,不可以和下列(ABD )关键字一起使用
A.final //修饰类不继承
B.private //修饰类不继承
C.public
D.static //修饰类不继承
三、简答题(每题 5 分,共 25 分)
1.double、Double 和 BigDecimal 的区别?
double是基本数据类型的浮点型,是浮点型的字面值,所占字节为8
Double是double对应的包装类,可以调用类的属性和方法
BigDecimal是为了解决浮点数计算精度丢失问题而产生的,当构造传参为double时会更加不精确,需要使用String的参数类型。
2.什么是可变参数?
可变参数:适用于传入多个相同数据类的的参数,写为:参数类型...参数名,实质上是传入一个数组,可以使用数组对应的方法。
当多个参数共同传递时,需要将可变参数放到最后。比如 int a,int...b;
3.什么是匿名内部类?什么是 lambda 表达式?二者有什么区别和联系?
匿名内部类:当抽象类或接口只使用一次,并且在创建对象后立刻能用到,此时不必定义子类,可以使用匿名内部类的方式,在创建对象的()后增加{},在大括号中重写抽象类/接口的抽象方法,也可以重写普通方法。
lambda表达式是JDK8后推出的新特性,可以简写。语法:(参数列表) ->{ 方法体 }
当是接口,且只有一个抽象方法时使用lambda表达式。
4.简述RandomAccessFile 与FileOutputStream 的异同
RAF是基于指针的随机读写形式,可以对文件任意位置进行局部的覆盖,但是文件流不行,由于java标准的IO是顺序读写形式,对于写write而言只能顺序先后写,不能回退,因此写操作的灵活性不如RAF。
但是后期基于流连接,我们可以串联若干高级流完成复杂的读写操作,这一点是RAF所不及的。
5.Date 和 Calendar 的区别?
① Date类是日期类,Calendar类是日历类,获取对象后输出内容不同。
② Calendar类是一个抽象类,无法直接创建对象,该类提供了一个静态方法getInstance(),用于返回Calendar的子类对象,该子类对象是根据当前默认时区和语言环境所获取的。Date可以直接创建对象。
③ Calendar类出现于Date类之后,在很大程度上替代了Date方法,该类将所有可能用到使用到的时间信息都封装为静态成员变量,方便使用。
四、编程题(每题 10 分,共 20 分)
1. 设计方法,传入文件夹路径,删除该文件夹
public static void delDirs (File dir){
//1.获取目标数组中的所有子项
File[] subs = dir.listFiles();
//2.遍历数组,获取每个子项
for (int i = 0; i < subs.length; i++) {
//3.判断该子项是文件还是目录,如果是文件直接删除
if(subs[i].isFile()){
subs[i].delete();
}else{//如果是目录,需要再获取遍历判断……
delDirs(subs[i]);//递归,重复之前做的1 2 3
}
}
dir.delete();//删除空目录
}
2. 分析以下需求,并用代码实现
通过键盘录入日期字符串,格式(2015-10-20),获取该字符串表示的日期是星期几,以及
这一年的第几天。
如输入:2015-10-20,输出"2015 年 10 月 20 日 是 星期二,是 2015 年的第 293 天"
public static void method2() throws Exception {
Scanner sc = new Scanner(System.in);
String strin = sc.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date datein = sdf.parse(strin);
Calendar cin = Calendar.getInstance();
cin.setTime(datein);
int weekday = cin.get(Calendar.DAY_OF_WEEK)-1;
if(weekday != 0) {
System.out.println(strin+"是星期"+weekday);
}else {
System.out.println(strin+"是星期日");
}
int date = cin.get(Calendar.DAY_OF_YEAR);
System.out.println("是"+cin.get(Calendar.YEAR)+"年的第"+date+"天");
}