常用工具类作业
一、 填空题
- 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是____Number________的直接子类。
- 包装类Integer的静态方法可以将字符串类型的数字”123”转换成基本整型变量n,其实现语句是:__int n = integer.ParseInt(“123”);__________。
- 在Java中使用java.lang包中的__StringBufer和StringBuilder__________类来创建一个字符串对象,它代表一个字符序列可变的字符串,可以通过相应的方法改变这个字符串对象的字符序列。
- StringBuilder类是StringBuffer类的替代类,两者的共同点是都是可变长度字符串,其中线程安全的类是______StringBuffer________。
- DateFormat类可以实现字符串和日期类型之间的格式转换,其中将日期类型转换为指定的字符串格式的方法名是__format____________。
- 使用Math.random( )返回带正号的 double值,该值大于等于0.0且小于1.0。使用该函数生成[30,60]之间的随机整数的语句是__(int)(Math.random)*31+30_ ___________。
- JDK1.5后提供了___enum_________关键字,用以定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法和构造方法。
- File对象调用方法 creatNewFile 创建一个目录,不包括所有必需但不存在的父目录,当且仅当已创建目录时,返回true;否则返回false。
二、 选择题
1. |
以下选项中关于int和Integer的说法错误的是(BD )。(选择二项) |
|
|
|
|
|
A. |
int是基本数据类型,Integer是int的包装类,是引用数据类型 |
|
B. |
int的默认值是0,Integer的默认值也是0 |
|
C. |
Integer可以封装了属性和方法提供更多的功能 |
|
D. |
Integer i=5;该语句在JDK1.5之后可以正确执行,使用了自动拆箱功能 |
2. |
分析如下Java代码,该程序编译后的运行结果是( D )。(选择一项) |
|
|
public static void main(String[ ] args) { String str=null; str.concat("abc"); str.concat("def"); System.out.println(str); } |
|
|
|
|
|
A |
null |
|
B. |
abcdef |
|
C. |
编译错误 |
|
D. |
运行时出现NullPointerException异常 |
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. |
以上都不对 |
4. |
以下关于StringBuffer类的代码的执行结果是( D )。(选择一项) |
|
|
public class TestStringBuffer { public static void main(String args[]) { StringBuffer a = new StringBuffer("A"); StringBuffer b = new StringBuffer("B"); mb_operate(a, b); System.out.println(a + "." + b); } static void mb_operate(StringBuffer x, StringBuffer y) { x.append(y); y = x; } } |
|
|
|
|
|
A. |
A.B |
|
B. |
A.A |
|
C. |
AB.AB |
|
D. |
AB.B |
5. |
给定如下Java代码,编译运行的结果是( C )。(选择一项) |
|
|
public static void main(String []args){ String s1= new String("pb_java_OOP_T5"); String s2 = s1.substring(s1.lastIndexOf("_")); System.out.println("s2="+s2); }
|
|
|
|
|
|
A |
s2=_java_OOP_T5 |
|
B. |
s2=_OOP_T5 |
|
C. |
s2=_T5 |
|
D. |
编译出错 |
6. |
对于语句String s="my name is kitty",以下选项中可以从其中截取”kitty”的是( AB )(选择二项) |
|
|
|
|
|
A |
s.substring(11,16) |
|
B. |
s.substring(11) |
|
C. |
s.substring(12,17) |
|
D. |
s.substring(12,16) |
7. |
分析下面的Java程序段,编译运行后的输出结果是( D )。(选择一项) |
|
|
public class Test { public void changeString(StringBuffer sb) { sb.append("stringbuffer2"); } public static void main(String[] args) { Test a = new Test(); StringBuffer sb = new StringBuffer("stringbuffer1"); a.changeString(sb); System.out.println("sb = " + sb); } } |
|
|
|
|
|
A |
sb = stringbuffer2stringbuffer1 |
|
B. |
sb = stringbuffer1 |
|
C. |
sb = stringbuffer2 |
|
D. |
sb = stringbuffer1stringbuffer2 |
8. |
给定如下Java代码,编译运行的结果是( A )。(选择一项) |
|
|
public static void main(String[] args) { StringBuffer sbf = new StringBuffer("java"); StringBuffer sbf1 = sbf.append(",C#"); String sbf2 = sbf + ",C#"; System.out.print(sbf.equals(sbf1)); System.out.println(sbf2.equals(sbf)); } |
|
|
|
|
|
A |
true false |
|
B. |
true true |
|
C. |
false false |
|
D. |
false true |
9. |
分析下面的Java程序,编译运行后的输出结果是(B )。(选择一项) |
|
|
public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; 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] = 'g'; } } |
|
|
|
|
|
A |
goodandabc |
|
B. |
goodandgbc |
|
C. |
test okandabc |
|
D. |
test okandgbc |
10. |
以下程序片段中可以正常编译的是( C )。(选择一项) |
|
|
|
|
|
A |
String s = "Gone with the wind"; String k = s+t; String t = "good"; |
|
B. |
String s = "Gone with the wind"; String t; t = s[3]+"one"; |
|
C. |
String s = "Gone with the wind"; String stanfard = s.toUpperCase(); |
|
D. |
String s = "home directory"; String t = s – "directory"; |
11. |
File类中的( B )方法可以用来判断文件或目录是否存在。(选择一项) |
|
|
|
|
|
A |
exist() |
|
B. |
exists() |
|
C. |
fileExist() |
|
D. |
fileExists() |
12. |
在Java中,以下File类的方法中( C )用来判断是否是目录。(选择一项) |
|
|
|
|
|
A |
isFile( ) |
|
B. |
getFile( ) |
|
C. |
isDirectory( ) |
|
D. |
getPath( ) |
13. |
分析下面的Java程序,编译运行后的输出结果是( B )。(选择一项) |
|
|
public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; 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] = 'g'; } } |
|
|
|
|
|
A |
goodandabc |
|
B. |
goodandgbc |
|
C. |
test okandabc |
|
D. |
test okandgbc |
三、 判断题
- 方法Integer.parseInt()的作用是将一个整数转变成String。( F )
- JK1.5后提供了自动装箱和自动拆箱功能,从而可以实现基本数据类型和对应包装类之间的自动转换,简化了操作。( T )
- 执行语句String str="abcedf"; int len=str.length; 后,能够得到字符串的长度是6。( F )
- 运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。(T )
- java.sql.Date类和java.util.Date类的关系是前者是后者的父类,其中前者没有提供无参数构造方法,而后者可以提供无参数构造方法来获取当前时间。( F )
- 求x的y次方,其表达式为:Math.pow(x,y)。( T )
- 7. 一个File对象可以代表一个文件或目录,它可以获取文件和目录属性,也可以访问文件内容。( )
- 8. 在使用File类中的delete( )方法时,删除时可能文件不存在,所以我们最好先判断一下是否存在,不然会出现NullPointerException异常。( )
- 9. 程序调用自身的编程技巧称为递归。递归的特点是编程简单并且节省内存。( )
- 10. 任何可用递归解决的问题也能使用循环解决,递归既花时间又耗内存,在要求高性能的情况下尽量避免使用递归。( )
四、 简答题
- 自动装箱和自动拆箱
装箱就是自动将基本数据类型转换为包装器类型;
(1) Integer it = 200;
实际上是:Integer it3 = Integer.valueOf(100);
自动装箱功能:把int类型自动装载到Integer中 先装箱,再赋值
拆箱就是 自动将包装器类型转换为基本数据类型。
(2) Integer it2 = it+it1;
实际上是:Integer it2 = Integer.valueOf(it2.intValue() + it3.intValue());
先对it2 和 it3做拆箱功能,然后相加,得到一个int类型的值,然后在对这个int类型的值,做装箱操作,最后再赋值
- String、StringBuffer、StringBuilder区别与联系。
(1):是否产生新的对象
String会产生新的对象,效率低下,浪费内存空间
StringBuffer,StringBuilder,不会产生新的对象,都是在原本的缓冲区中操作
(2):是否可变
String是不可变的
StringBuffer,StringBuilder可变的
(3):是否安全
StringBuffer是安全的
StringBuilder是不安全
(4):是否多线程
StringBuffer适合多线程操作
StringBuilder适合单线程操作
(5):效率
StringBuilder>StringBuffer>String
- String str=”bjsxt”;和String str= new String(“bjsxt”);的区别
1.当使用String str=" bjsxt ",这种方式时,先去内存的堆内存中找是否存在" bjsxt "这个字符串,若存在,则将地址引用。若不存在则创建。
2.当使用String str=new String("bjsxt ");时,不管事先是否存在" bjsxt ",每次都会创建其新的对象。
- java.sql.Date和java.util.Date的联系和区别
(1) java.util.Date 就是在除了SQL语句的情况下面使用
(2) java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分
(3) 它都有getTime方法返回毫秒数,自然就可以直接构建
(4) java.util.Date 是 java.sql.Date 的父类(注意拼写)
(5) java.util.Date是常用的表示时间的类,我们通常格式化或者得到当前时间都是用java.util.Date
(6) java.sql.Date在读写数据库的时候用java.sql.Date
- 递归的定义和优缺点
五、 编码题
- 验证键盘输入的用户名不能为空,长度大于6,不能有数字。
提示:使用字符串String类的相关方法完成
1 public static void empty(String user){ 2 if(user==null||"".equals(user)){ 3 System.out.println("用户名不能为空!"); 4 return; 5 }else if(user.length()>6){ 6 System.out.println("用户名长度不能大于6!"); 7 return; 8 } 9 for(int i=0;i<user.length();i++){ 10 char ch = user.charAt(i); 11 if(ch>=48&&ch<57){ 12 System.out.println("用户名不能有数字!"); 13 return; 14 } 15 } 16 System.out.println("用户名OK"); 17 } 18 public static void main(String[] args) { 19 Scanner sc = new Scanner(System.in); 20 System.out.println("请输入用户名:"); 21 String user = sc.nextLine(); 22 empty(user); 23 24 25 }
2.接收从键盘输入的字符串格式的年龄,分数和入学时间,转换为整数、浮点数、日期类型,并在控制台输出。
提示:使用包装类Integer、Double和日期转换类DateFormat实现
public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入年龄:"); String age1 = sc.nextLine(); System.out.println("请输入分数:"); String grade1 = sc.nextLine(); System.out.println("请输入入学时间:"); String enterDate1 = sc.nextLine(); int age; age = Integer.parseInt(age1);//年龄转换为整数 double grade =Double.parseDouble(grade1);//分数转换为浮点数 DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); try { Date enterDate =df.parse(enterDate1);//入学时间转换为日期类型, } catch (ParseException e) { e.printStackTrace(); } System.out.println("年龄 分数 入学时间"); System.out.println(age+" "+grade1+" "+enterDate1); }
六、 可选题
- 生成10个[10,23)之间的随机整数
提示:分别使用Math.random()和Random类的nextDouble()或nextInt()实现
1 public static void main(String[] args) { 2 //Math.random()方法 3 for (int i = 1; i < 11; i++) { 4 System.out.println("Math.random()随机生成第" + i + "个数是:"); 5 int r = (int) (Math.random() * 13) + 10; 6 System.out.println(r); 7 } 8 System.out.println("============================"); 9 //Random类的nextDouble()实现 10 Random ra = new Random(); 11 for (int j = 1; j < 11; j++) { 12 System.out.println("Random类的nextDouble()随机生成第" + j + "个数是:"); 13 int r = (int)(ra.nextDouble() * 13) + 10; 14 System.out.println(r); 15 } 16 System.out.println("============================"); 17 //Random类的nextInt()实现 18 for (int k = 1; k < 11; k++) { 19 System.out.println("Random类的nextDouble()随机生成第" + k + "个数是:"); 20 int b = (int)(ra.nextInt(13)+10); 21 System.out.println(b); 22 } 23 24 }
2.打印某个月份的可视化日历
1 public static void main(String[] args) throws ParseException { 2 //从键盘输入指定格式的字符串 (Scanner) 2015-12-3 3 System.out.println("请输入日期(按照格式:2030-3-10):"); 4 Scanner scanner = new Scanner(System.in); 5 String temp = scanner.nextLine(); 6 //把输入的字符串变成Date(DateFormat) 7 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 8 Date date = format.parse(temp); 9 //把Date变成Calendar(setTime()) 10 Calendar calendar = Calendar.getInstance(); 11 calendar.setTime(date); 12 //取出日历的日信息 13 int dateOfMonth = calendar.get(Calendar.DATE); 14 //输出日历头信息 日 一 二 三 四 五 六 15 System.out.println("日 一 二 三 四 五 六"); 16 //输出该月1日之前的空白( 要知道该月1日是星期几) 17 calendar.set(Calendar.DATE, 1); 18 int weekDay = calendar.get(Calendar.DAY_OF_WEEK); 19 for(int i=1;i<weekDay;i++){ 20 System.out.print(' '); 21 } 22 //输出该月的日历从1到最后一天(更多细节) 23 int maxDay = calendar.getActualMaximum(Calendar.DATE); 24 for(int i=1;i<=maxDay;i++){ 25 //如果是当天,输出* 26 if(i==dateOfMonth){ 27 System.out.print("*"); 28 } 29 //输出每一天 30 System.out.print(i+" "); 31 //如果是周六换行 32 weekDay = calendar.get(Calendar.DAY_OF_WEEK); 33 if(weekDay==7){ 34 System.out.println(); 35 } 36 //日历变成下一天!!!!!! 37 calendar.add(Calendar.DATE, 1); 38 } 39 } 40 41 3. 使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现