常用工具类作业
一、 填空题
1. 在Java中每个Java基本类型在java.lang包中都在一个相应的包装类,把基本类型数据转换为对象,其中包装类Integer是____java.lang.Number_______的直接子类。
2. 包装类Integer的静态方法可以将字符串类型的数字”123”转换成基本整型变量n,其实现语句是:_____n=_Interger.intValue(“123”);______。
3. 在Java中使用java.lang包中的______stringBuilder,stringBuffer______类来创建一个字符串对象,它代表一个字符序列可变的字符串,可以通过相应的方法改变这个字符串对象的字符序列。
4. StringBuilder类是StringBuffer类的替代类,两者的共同点是都是可变长度字符串,其中线程安全的类是________stringBuffer______。
5. DateFormat类可以实现字符串和日期类型之间的格式转换,其中将日期类型转换为指定的字符串格式的方法名是______Format________。
6. 使用Math.random( )返回带正号的 double值,该值大于等于0.0且小于1.0。使用该函数生成[30,60]之间的随机整数的语句是__(Math.random()*31)+30____________。
7. JDK1.5后提供了______enum______关键字,用以定义枚举类。枚举类是一种特殊的类,可以有自己的属性、方法和构造方法。
8. File对象调用方法 createNewFile() 创建一个目录,不包括所有必需但不存在的父目录,当且仅当已创建目录时,返回true;否则返回false。
二、 选择题
1. |
以下选项中关于int和Integer的说法错误的是( b,d )。(选择二项) |
|
|
|
|
|
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”的是( b )(选择二项) |
|
|
|
|
|
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程序,编译运行后的输出结果是( d )。(选择一项) |
|
|
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( ) |
8. |
分析下面的Java程序,编译运行后的输出结果是( d )。(选择一项) |
|
|
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 |
三、 判断题
1. 方法Integer.parseInt()的作用是将一个整数转变成String。( cuo )
2. JK1.5后提供了自动装箱和自动拆箱功能,从而可以实现基本数据类型和对应包装类之间的自动转换,简化了操作。( cuo )
3. 执行语句String str="abcedf"; int len=str.length; 后,能够得到字符串的长度是6。( dui )
4. 运算符“==”用于比较引用时,如果两个引用指向内存同一个对象,则返回true。( dui )
5. java.sql.Date类和java.util.Date类的关系是前者是后者的父类,其中前者没有提供无参数构造方法,而后者可以提供无参数构造方法来获取当前时间。( cuo )
6. 求x的y次方,其表达式为:Math.pow(x,y)。( dui )
7. 一个File对象可以代表一个文件或目录,它可以获取文件和目录属性,也可以访问文件内容。( cuo )
8. 在使用File类中的delete( )方法时,删除时可能文件不存在,所以我们最好先判断一下是否存在,不然会出现NullPointerException异常。( dui )
9. 程序调用自身的编程技巧称为递归。递归的特点是编程简单并且节省内存。( cuo )
10. 任何可用递归解决的问题也能使用循环解决,递归既花时间又耗内存,在要求高性能的情况下尽量避免使用递归。( dui )
四、 简答题
1. 自动装箱和自动拆箱
2. String、StringBuffer、StringBuilder区别与联系。
3. String是不可变字符串,stringbuffer和stringBuilder是可变字符串
4. String 不可变可谓线程安全stringBuffer线程安全stringBuilder非线程安全
5. 3. 性能
在大量字符串拼接操作中String最差
在非线程安全环境中StringBuilder性能要比StringBuffer好
6. 注:
在某些特别情况下, String 对象的字符串拼接其实是被 Java Compiler 编译成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,例如:
String s1 = “a” + “b” + “c”;
StringBuffer Sb = new StringBuilder(“a”).append(“b”).append(“c”);
生成 String s1对象的速度并不比 StringBuffer慢。
此时String操作相当于String s1 = “abc”;
7. 二、相似点
1. 实现
底层均为数组实现
2. 继承及修改
均为final修饰,不可继承修改
3.StringBuffer与StringBuilder相同点
StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。
三、使用策略
1. 基本原则
少量数据用String,单线程大量数据用StringBuilder,多线程大量用StringBuffer
2. 大量数据操作中不用String类中”+”操作
影响性能,使用StringBuilder/StringBuffer的append进行操作(Java中一条比较重要的优化原则)
3. 数据量大时,指定StringBuffer/StringBuilder的容量
默认capacity=16,会影响性能
4.使用范围
StringBuilder一般在局部变量中使用
StringBuffer一般在全局变量中使用,线程安全
String在操作小的前提下都可以
5. 相同情况下,StringBuilder相比StringBuffer能获得10%-15%的性能提升
非线程安全下可使用StringBuilder提升性能
8.
9. String str=”bjsxt”;和String str= new String(“bjsxt”);的区别
10. 前边是生成字符串,后边生成对象
11. string str="bjsxt";
就是把str赋值为bjsxt
string str= new string;
就是清除str以前的赋值,但却并没有赋予str新值,若要赋予str新值,就要在后面写上
str="XXXXX";
12. java.sql.Date和java.util.Date的联系和区别
Java.util.date 与 java.sql.date区别和转换(2009-11-30 15:00:51)转载标签: it 分类: JavaSE
java.util.Date 就是在除了SQL语句的情况下面使用
java.sql.Date 是针对SQL语句使用的,它只包含日期而没有时间部分
它都有getTime方法返回毫秒数,自然就可以直接构建
java.util.Date d = new java.util.Date(sqlDate.getTime());
13.
14. 递归的定义和优缺点
15. 递归好处:代码更简洁清晰,可读性更好
16. 递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住
五、 编码题
1. 验证键盘输入的用户名不能为空,长度大于6,不能有数字。
提示:使用字符串String类的相关方法完成
package projectTest;
import java.util.FormatFlagsConversionMismatchException;
import java.util.Scanner;
public class TT {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s;
System.out.println("请输入字符串");
s = sc.next();
if (s.length() <= 6) {
System.out.println("too short!");
return;
}
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
System.out.println("must not contains number!");
return;
}
}
System.out.println("ok");
}
}
2. 接收从键盘输入的字符串格式的年龄,分数和入学时间,转换为整数、浮点数、日期类型,并在控制台输出。
提示:使用包装类Integer、Double和日期转换类DateFormat实现
package projectTest;
import java.text.DateFormat;
import java.text.Format;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.FormatFlagsConversionMismatchException;
import java.util.Scanner;
import javax.xml.crypto.Data;
import org.omg.CORBA.PRIVATE_MEMBER;
public class TT {
public static void main(String[] args) {
String age="24";
String score="97";
String schoolTime="2016-09-16";
Date sc=null;
int sage=Integer.parseInt(age);
double sscore=Double.parseDouble(score);
DateFormat scT=new SimpleDateFormat("yyyy-MM-dd");
try {
sc=scT.parse(schoolTime);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sage+" "+sscore+" "+sc);
}
}
3. 根据交通信号灯颜色决定汽车停车、行驶和慢行
提示:使用枚举实现
package projectTest;
public enum TrafficLight {
RED, BLUE, YELLOW
}
package projectTest;
public class Car {
public static void main(String[] args) {
TrafficLight trafficLight = TrafficLight.RED;
switch (trafficLight) {
case RED:
m1();
break;
case BLUE:
m2();
break;
case YELLOW:
m3();
break;
default:
break;
}
}
private static void m2() {
System.out.println("绿灯亮,请通过");
}
private static void m3() {
System.out.println("黄灯亮,慢行");
}
private static void m1() {
System.out.println("红灯亮,停车");
}
}
4. 编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求数列的第40位数是多少。
package projectTest;
public class Test {
public static void main(String[] args) {
System.out.println(m(40));
}
static int m(int n) {
if (n <= 0) {
return 0;
} else if (n > 0 && n <= 2) {
return 1;
} else {
return m(n - 1) + m(n - 2);
}
}
}
5.
6. 以树状结构输出计算机某个指定文件夹下的所有的文件和子文件夹名称。
提示:使用File的方法,并结合递归实现
package projectTest;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
File file = new File("d:/bjsxt");
System.out.println(file.getName());
m(file, 0);
}
public static void m(File file, int level) {
File[] files = file.listFiles();
for (File files1 : files) {
for (int i = 0; i <= level; i++)
System.out.print(" ");
System.out.println(files1.getName());
if (files1.isDirectory()) {
m(files1, level + 1);
}
}
}
}
六、 可选题
1. 生成10个[10,23)之间的随机整数
提示:分别使用Math.random()和Random类的nextDouble()或nextInt()实现
package projectTest;
import java.util.Random;
public class TestRandom {
public static void main(String[] args) {
Random random = new Random();
int i = random.nextInt(13) + 10;
System.out.println(i);
}
}
2. 打印某个月份的可视化日历
提示:使用DateFormat、Calendar类实现功能
package projectTest;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class TestDate {
public static void main(String[] args) {
Date date=new Date();
DateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH时mm分ss秒");
System.out.println(dateFormat.format(date));
Calendar calendar=Calendar.getInstance();
System.out.println(calendar.get(calendar.DAY_OF_MONTH));
int level=calendar.getMaximum(calendar.DAY_OF_MONTH);
System.out.println(level);
for(int i=1;i<=level;i++){
System.out.print(i+"\t");
calendar.add(Calendar.DAY_OF_WEEK, 1);
if (calendar.get(calendar.DAY_OF_WEEK)==Calendar.SUNDAY) {
System.out.println();
}
}
}
}
3. 使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现
package projectTest;
public class Binary {
public static void main(String[] args) {
int[] arr = { 2, 3, 5, 6, 8, 10 };
int end = arr.length;
int mid;
System.out.println(m(arr, 0, end / 2, end, 3));
}
static int m(int[] arr, int start, int mid, int end, int aim) {
mid = (start + end) / 2;
if (arr == null) {
return -1;
}
while (start <= end) {
for (int i = 0; i < arr.length; i++) {
if (aim == arr[mid]) {
return mid;
} else if (aim > arr[mid]) {
return m(arr, mid + 1, mid, end, aim);
} else {
return m(arr, start, mid, mid - 1, aim);
}
}
}
return -1;
}
}