常用工具类作业
一、 填空题
- 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中int对应的包装类是__Integer_______; char对应的包装类是_____Character_______。
- 包装类Integer的静态方法可以将字符串类型的数字”123”转换成基本整型变量n,其实现语句是:___Integer.parseInt(“123”);_________。
- 在Java中使用java.lang包中的__StringBuffer/StringBuider__________类来创建一个字符串对象,它代表一个字符序列可变的字符串,可以通过相应的方法改变这个字符串对象的字符序列。
- StringBuilder类是StringBuffer类的替代类,两者的共同点是都是可变长度字符串,其中线程安全的类是____StringBuffer__________。
- DateFormat类可以实现字符串和日期类型之间的格式转换,其中将日期类型转换为指定的字符串格式的方法名是______Format________。
- 使用Math.random( )返回带正号的 double值,该值大于等于0.0且小于1.0。使用该函数生成[30,60]之间的随机整数的语句是___ (int)(Math.random()*31)+30___________。
- JDK1.5后提供了___Enum_________关键字,用以定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法和构造方法。
二、 选择题
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"; |
三、 判断题
- 方法Integer.parseInt()的作用是将一个整数转变成String。( N )
- JK1.5后提供了自动装箱和自动拆箱功能,从而可以实现基本数据类型和对应包装类之间的自动转换,简化了操作。( Y )
- 执行语句String str="abcedf"; int len=str.length; 后,能够得到字符串的长度是6。( N )
- 运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。( Y )
- 求x的y次方,其表达式为:Math.pow(x,y)。( Y )
四、 简答题
- 自动装箱和自动拆箱
基本类: byte, short, char, int, long, float, double, boolean
对应的包装类:Byte, Short, Character, Integer, Long, Float, Double, Boolean
自动装箱就是将基本数据类型转换为对应的对象,可以调用更多的方法。
自动拆箱就是将包装类转换成基本数据类型
原理
例如:
装箱:
Integer i = 100;
Java虚拟机会自动调用Integer的valueOf方法,编译为:Integer i = Integer.valueOf(100);
拆箱:
Integer i = 10; int t = i;
Java虚拟机会自动调用Integer的intValue方法, 编译为:int t=i.Integer.intValue();
注意事项:
(1) 自动装箱和拆箱,要注意空指针的问题。 拆箱的如果Null,则会报空指针异常。
(2) 缓存问题。
① Byte、Short、Integer、Long、Char这几个装箱类的valueOf()方法是以128位分界线做了缓存的,假如是128以下且-128以上的值是会取缓存里面的引用的。
② Float、Double则不会,原因也很简单,因为byte、Short、integer、long、char在某个范围内的整数个数是有限的,但是float、double这两个浮点数却不是。
- String、StringBuffer、StringBuilder区别与联系。
String 字符串的值为常量,是不可变的,所以可以共享。
StringBuffer 线程安全的可变字符序列。效率不高。可以改变字符序列的长度和内容
StringBuider 线程不安全。执行效率比StringBuffer高。可以改变字符序列的长度和内容。
五、 编码题
- 验证键盘输入的用户名不能为空,长度大于6,不能有数字。
提示:使用字符串String类的相关方法完成
import java.util.Scanner; class User_Login { public static void main(String[] args) throws Exception { // 开流 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名:"); // 接收输入的值 String s = sc.nextLine(); boolean flag = true; // 标记 // 判断是否为空 if (s.isEmpty()) { System.out.println("用户名不能为空"); flag=false; } else { // 判断长度是否小于6位 if (s.length() < 6) { System.out.print("用户名的长度不能小于6位"); flag = false; } // 判断输入的值是否合法 for (int i = 0; i < s.length(); i++) { if (s.charAt(i) >= '0' && s.charAt(i) <= '9') { if (!flag) { System.out.print(","); } System.out.println("用户名不能包含数字"); flag = false; break; } } // flag为true的时候提示注册成功 if (flag) { System.out.println("注册成功"); } } sc.close();//关流 } }
- 接收从键盘输入的字符串格式的年龄,分数和入学时间,转换为整数、浮点数、日期类型,并在控制台输出。
提示:使用包装类Integer、Double和日期转换类DateFormat实现
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner; public class TestStringConvert { public static void main(String[] args) { // 从键盘输入字符串形式的年龄,分数和入学时间 Scanner input = new Scanner(System.in); System.out.print("请输入年龄:"); String sage = input.next(); System.out.print("请输入分数:"); String sscore = input.next(); System.out.print("请输入日期(yyyy/MM/dd):"); String sdate = input.next(); // 年龄转换String----int int age = 0; age = Integer.parseInt(sage); // 分数转换 String ---double double score = 0.0; score = Double.parseDouble(sscore); // 入学时间的转换String ---Date Date enterDate = null; DateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); try { enterDate = sdf.parse(sdate); } catch (ParseException e) { e.printStackTrace(); // return; } // 输出结果 System.out.println(age + " " + score + " " + enterDate); } }
- 根据交通信号灯颜色决定汽车停车、行驶和慢行
提示:使用枚举实现
public class Enum_Color { public static void main(String[] args) { Color c = Color.GREEN; c.setName("绿灯"); System.out.println(c.getName()); } } enum Color { RED, YELLOW, GREEN; private String name; public String getName() { return name; } public void setName(String name) { switch (this) { case RED: { if ("红灯".equals(name)) { this.name = name; System.out.println("请停车"); } else { System.out.println("设置内容错误"); } break; } case GREEN: { if ("绿灯".equals(name)) { this.name = name; System.out.println("请行驶"); } else { System.out.println("设置内容错误"); } break; } case YELLOW: { if ("黄灯".equals(name)) { this.name = name; System.out.println("请慢行"); } else { System.out.println("设置内容错误"); } break; } } } }