一、选择题
1. 以下选项中关于int和Integer的说法错误的是(BD)。
A.int是基本数据类型,Integer是int的包装类,是引用数据类型
B.int的默认值是0,Integer的默认值也是0
C.Integer可以封装了属性和方法提供更多的功能
D.Integer i=5;该语句在JDK1.5之后可以正确执行,使用了自动拆箱功能
解析
B:int的默认值是0,Integer的默认值是null
D:使用了自动装箱功能
2. 分析如下Java代码,该程序编译后的运行结果是(A)。
public static void main(String[ ] args) {
String str=””;
str.concat("abc");
str.concat("def");
System.out.println(str);
}
A.null
B.abcdef
C.编译错误
D.运行时出现NullPointerException异常
解析
String是final不可更改的
3. 以下关于String类的代码的执行结果是(B)。
public class Test2 {
public static void main(String args[]) {
String s1 = new String("bjsxt");
String s2 = new String("bjsxt");
if (s1 == s2)
System.out.println("s1 == s2");
if (s1.equals(s2))
System.out.println("s1.equals(s2)");
}
}
A.s1 == s2
B.s1.equals(s2)
C.s1 == s2
s1.equals(s2)
D.以上都不对
解析
s1和s2是两个不同的对象,所以二者地址不相等,s1 != s2
sequals方法在String类中得到了重写,含义已经变为比较字符串中值是否相等,所以s1.equals(s2) == true
4. 在Java中,以下File类的方法中( C )用来判断是否是目录。
A.isFile( )
B.getFile( )
C.isDirectory( )
D.getPath( )
5. 分析下面代码的结果(A)。
public static void main(String args[]) {
String s = "abc";
String ss = "abc";
String s3 = "abc" + "def";
String s4 = "abcdef";
String s5 = ss + "def";
String s2 = new String("abc");
System.out.println(s == ss);
System.out.println(s3 == s4);
System.out.println(s4 == s5);
System.out.println(s4.equals(s5));
}
A.true true false true
B.true true true false
C.true false true true
D.false true false true
二、简答题
1. 什么是自动装箱和自动拆箱?
自动装箱:基本类型的数据处于需要对象的环境中时,会自动转为“对象”。
自动拆箱:每当需要一个值时,对象会自动转成基本数据类型,没必要再去显式调用intValue()、doubleValue()等转型方法。
2. String、StringBuffer、StringBuilder区别与联系。
- 是否产生新的对象
- String会产生新的对象,效率低下,浪费内存空间
- StringBuffer,StringBuilder,不会产生新的对象,都是在原本的缓冲区中操作
- 是否可变
- String是不可变的
- StringBuffer,StringBuilder可变的
- 是否安全
- StringBuffer是安全的
- StringBuilder是不安全
- 是否多线程
- StringBuffer适合多线程操作
- StringBuilder适合单线程操作
- 效率
- StringBuilder>StringBuffer>String
3. String str=”bjsxt”; 和String str= new String(“bjsxt”); 的区别。
- 当使用String str=" bjsxt “,这种方式时,先去内存的堆内存中找是否存在” bjsxt "这个字符串,若存在,则将地址引用。若不存在则创建。
- 当使用String str=new String("bjsxt “);时,不管事先是否存在” bjsxt ",每次都会创建其新的对象。
4. File类的方法mkdir跟mkdirs,有什么区别?
mkdir():只能创建一层目录
mkdirs(): 创建多层目录
5. 简述枚举的使用。
当你需要定义一组常量时,可以使用枚举类型
enum 枚举名 {
枚举体(常量列表)
}
三、编码题
1. 验证键盘输入的用户名不能为空,长度大于6,不能有数字。
提示:使用字符串String类的相关方法完成
可以使用Scanner的nextLine()方法,该方法可以接口空的字符串。
import java.util.Scanner;
public class Homework1 {
public static void main(String[] args) {
System.out.println("输入一个用户名:");
Scanner scanner = new Scanner(System.in);
String username = scanner.nextLine();
scanner.close();
if (username.equals("")) {
System.out.println("用户名不能为空");
} else if (username.length() <= 6) {
System.out.println("用户名长度需要大于6");
} else {
for (int i = 0; i < username.length(); i++) {
if (Character.isDigit(username.charAt(i))) {
System.out.println("用户名不能有数字");
}
}
}
}
}
2. 接收从键盘输入的字符串格式的年龄,分数和入学时间,转换为整数、浮点数、日期类型,并在控制台输出。
提示:使用包装类Integer、Double和日期转换类DateFormat实现
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Homework22 {
public static void main(String[] args) throws ParseException {
System.out.print("请输入年龄:");
Scanner scanner =new Scanner(System.in);
String age = scanner.nextLine();
System.out.print("请输入分数:");
String grade = scanner.nextLine();
System.out.print("请输入入学时间(格式为:2020-10-10):");
String time = scanner.nextLine();
//转换为整数、浮点数、日期类型
int age2 = Integer.parseInt(age);
double grade2 = Double.parseDouble(grade);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date time2 = df.parse(time);//先转为时间类型
Calendar c = new GregorianCalendar();
c.setTime(time2);//再转为日期类型
System.out.println("年龄:"+age2+"岁\n"
+"分数:"+grade2+"分\n"
+"入学时间:"+time2);
}
}
3. 根据交通信号灯颜色决定汽车停车、行驶和慢行
提示:使用枚举实现
public class Homework33 {
public static void main(String[] args) {
TrafficLight light = TrafficLight.GREEN;
switch (light) {
case GREEN:
System.out.println("gkd");
break;
case YELLOW:
System.out.println("慢点开");
break;
case RED:
System.out.println("STOP");
break;
}
}
}
enum TrafficLight{
RED,YELLOW,GREEN
}