1.为什么需要包装类?包装类的作用是?
因为java语言是面向对象的语言,但是java中的基本数据类型却不是面向对象的,而在实际的使用中经常需要将基本数据转化成对象,便于操作。比如说在集合中存储数据时,只能存储对象
作用:
[1]作为和基本数据类型对应的类类型存在,方便涉及到对象的操作
[2]包含每种基本数据类型相关的属性以及相关的操作方法
2.将字符串"123"转化成基本类型数字的方式有哪些?
通过Integer类的静态方法来转换
Integer.parseInt(“123”);
3.自动装箱和自动拆箱指的是?举例说明。
自动装箱和自动拆箱指的是将基本数据类型和包装类进行自动的互相转换
237.【上机】完成老师课堂上Integer的测试,并自己写Double类的测试代码
public class TestDouble {
public static void main(String[] args) {
Double int1 = new Double(10);
Double int2 = Double.valueOf(20);
double a = int1.doubleValue();
Double int3 = Double.parseDouble("334");
Double int4 = new Double("999");
String str1 = int3.toString();
}
}
238.为什么String类被称为不可变字符序列?从String类的源代码分析,给出解释。
字符串是常量,它们的值在创建之后不能更改,String对象是不可变的,所以可以共享
String类的底层结构是char类型的数组value,而这个数组使用final进行修饰
239.【上机】String类的equals方法跟Object的equals方法什么关系? 并详细阅读String类的equals方法源代码,分析它的内部流程。
String类的equals方法重写了Object类的equals方法,用于比较两个String对象的内容是否相同
String类的equals方法的源码分析:
如果两个String对象的内存地址(引用)相同,那么return true
如果两个String对象的内存地址(引用)不相同,那么进行类型判断,如果不是String类型,那么直接返回false,如果是String类型则进行向下类型转换,转换成String类型,然后变改char类型数组,比较两个数组对应位置上的内容是否相同,如果相同返回true,如果不同返回false
240.String类的trim()方法是什么作用?
返回字符串的副本,去掉字符串前后的空格
241."hamburger".substring(4, 8) 返回的结果是?
urge
242.【上机】分析下面代码的结果,并画出内存结构图,针对每个打印的结果给出文字
解释。
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));
System.out.println(s==ss);结果为true
System.out.println(s3==s4);结果为true
System.out.println(s4==s5);结果为false
System.out.println(s4.equals(s5));结果为true
243.【上机】练习String类的常用方法
字符串的长度:
System.out.println(“hello”.length());
去掉字符串前后的空格:
System.out.println(“ hello world ”.trim());
截取子字符串:
System.out.println(“helloworld”.substring(0,4));
244.StringBuffer和StringBuilder的联系是?区别是?
联系:
StringBuffer和StringBuilder都是可变字符序列,底层数组结构都是char类型的数组
区别:
StringBuffer:jdk1.0版,线程安全,但是效率低
StringBuilder:jdk1.5版,线程不安全,但是效率高
245.如下的代码会造成什么后果?运行期间会产生多少个对象? 使用StringBuilder修改这段代码。
String s = "";
for(int i=0;i<10000;i++){
s +=i;
}
会导致大量副本字符串对象存留在内存中,降低效率
运行期间会产生10001个对象
StringBuffer sb=new StringBuffer();
for(int i=0;i<10000;i++){
sb.append(i);
}
246.计算机中的时间是如何表示的?
获取从1970-1-1 0:0:0到当前时间所经历的毫秒数,然后转换为日期或者时间
247.System.currentTimeMillis()表示什么意思?
返回以毫秒为单位的当前时间
248.Date d = new Date()表示的是当前时间吗?
是,精确到毫秒
249.【上机】我们使用SimpleDateFormat类来实现时间跟字符串的转化。常用那两
个方法?并写出代码,举例说明
//字符串转日期
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
sdf.parse("1990-3-3");
//日期转字符串
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
sdf.format(new Date());
250.将1990年3月3日通过Calendar来表示,并得出这天是该年的第几天?将该日
期增加35天,是哪一天?使用代码来说明。
public static void main(String[] args) throws ParseException {
Calendar c=new GregorianCalendar();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
c.setTime(sdf.parse("1990-3-3"));
System.out.println(c.get(Calendar.DAY_OF_YEAR));
c.add(Calendar.DATE, 35);
System.out.println(c.get(Calendar.YEAR)+"年"
+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DATE));
}
251.【上机】写代码测试Date/SimpleDateFormat/Calendar的用法。
//Date的用法
public static void main(String[] args) {
Date date1 = new Date();
System.out.println(date1.toString());
}
//SimpleDateFormat的用法
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String daytime = s1.format(new Date());
//Calendar的用法
GregorianCalendar calendar2 = new GregorianCalendar();
calendar2.set(Calendar.YEAR, 2009);
252.【上机】模仿老师的写法,完成可视化日历程序的开发。
public class AppMain {
public static void main(String[] args) throws ParseException {
System.out.println("请输入日期(格式为:2010-3-3):");
Scanner scanner = new Scanner(System.in);
String dateString =scanner.nextLine();
System.out.println("您刚刚输入的日期是:"+dateString);
String[] str = dateString.split("-");
int year = Integer.parseInt(str[0]);
int month = new Integer(str[1]);
int day = new Integer(str[2]);
Calendar c = new GregorianCalendar(year,month-1, day);
c.set(Calendar.DATE, 1);
//week:1-7 日一二三四五六
int dow = c.get(Calendar.DAY_OF_WEEK);
System.out.println("日\t一\t二\t三\t四\t五\t六");
for(int i=0;i<dow-1;i++){
System.out.print("\t");
}
int maxDate = c.getActualMaximum(Calendar.DATE);
for(int i=1;i<=maxDate;i++){
StringBuilder sBuilder = new StringBuilder();
if(c.get(Calendar.DATE)==day){
sBuilder.append(c.get(Calendar.DATE)+"*\t");
}else{
sBuilder.append(c.get(Calendar.DATE)+"\t");
}
System.out.print(sBuilder);
if(c.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY){
System.out.print("\n");
}
c.add(Calendar.DATE, 1);
}
}
253.File类能代表一个目录吗?
能
254.File类的方法mkdir跟mkdirs,有什么区别?
mkdir:只能在已经存的目录中创建文件夹
mkdirs:可以在不存的目录中创建文件夹
255.使用File类模拟实现DOS的dir和dir/s命令
public static void main(String[] args) {
File file = new File("e:/教学1");
showTree(file, 1);
}
public static void showTree(File file, int level){
File[] files = file.listFiles();
for (File f : files) {
for(int i = 0; i < level; i++){
System.out.print("-");
}
if (f.isDirectory()) {
System.out.println(f.getName());
showTree(f, level+1);
}else{
System.out.println(f.getName());
}
}
}
256.【上机】使用递归算法,根据老师的树状结构代码,完整展示一个目录树
import java.io.File;
public class FileTree {
public static void main(String[] args) {
File f = new File("d:/1005班");
printFile(f, 0);
}
static void printFile(File file,int level){
for (int i = 0; i < level; i++) {
System.out.print("-");
}
System.out.println(file.getName());
if(file.isDirectory()){
File[] files = file.listFiles();
for (File temp : files) {
printFile(temp, level+1);
}
}
}
}
257.什么时候使用枚举? 枚举的定义是什么?
当需要定义一组常量时,使用枚举类型
枚举的定义:
只能够取特定值中的一个
使用enum关键字
所有的枚举类型隐性地继承自java.lang.Enum
258.【上机】手动定义一个枚举,表示十二个月的英文月份。
public enum Month {
JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER
}
259.【上机】switch语句中的表达式结果可以是枚举吗? 模仿课堂代码,写一个例子说明。
public static String testEnum(Month m){
String str=null;
switch (m) {
case JANUARY:
str="一月";
break;
case FEBRUARY:
str="二月";
break;
default:
break;
}
return str;
}