1、为什么需要包装类?包装类的作用是?

  我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

另外,当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

     Java中基本数据类型与包装类型有:

    

 

  2、将字符串"123"转化成基本类型数字的方式有哪些?

     Integer.parseInt("123")

  3、自动装箱和自动拆箱指的是?举例说明。

   装箱就是自动将基本数据类型转换为包装器类型;拆箱就是自动将包装器类型转换为基本数据类型。

//自动装箱
2 Integer total = 99;
3 
4 //自定拆箱
5 int totalprim = total;

  4、【上机】完成老师课堂上Integer的测试,并自己写Double类的测试代码

 

  5、为什么String类被称为不可变字符序列?从String类的源代码分析,给出解释。

   字符串是常量,String对象是不可变的,所以可以共享

  String类的底层是char类型的 数组value,这个数组用了final

  6、【上机】String类的equals方法跟Object的equals方法什么关系? 并详细阅读
        String类的equals方法源代码,分析它的内部流程。

 

 

  7、String类的trim()方法是什么作用?

     返回一个去掉字符串前后空格的字符串

  8、"hamburger".substring(4, 8) 返回的结果是?

     urge

  9、【上机】分析下面代码的结果,并画出内存结构图,针对每个打印的结果给出文字
        解释。

              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

        // 此处根据String中equals源码可以看出,先比较内存地址是否相同,

        // 如果内存地址相同,直接返回true,

        // 如果内存地址不同,进行判断是否是String类型,

        // 如果是String类型,进行向下类型转换,转换成String

        // 然后变改成char类型数组,比较两个数对应上的数值是否相同,

       // 如果相同返回true,如果不同返回false

        System.out.println(s4.equals(s5));   // true  String底层结构是char类型数组

 

  10、【上机】练习String类的常用方法

   

  12、StringBuffer和StringBuilder的联系是?区别是?

     三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

    StringBuilder:线程非安全的

    StringBuffer:线程安全的

  13、如下的代码会造成什么后果?运行期间会产生多少个对象?  使用StringBuilder修
        改这段代码。

String s = "";

for(int i=0;i<10000;i++){

       s +=i;

}

   10001个对象,会降低效率

  StringBuilder s = new StringBuilder();

  14、计算机中的时间是如何表示的?

   

 

  15、System.currentTimeMillis()表示什么意思?

    返回以毫秒为单位的当前时间

  16、Date d = new Date()表示的是当前时间吗?

    是

  17、【上机】我们使用SimpleDateFormat类来实现时间跟字符串的转化。常用那两
        个方法?并写出代码,举例说明

   

Date date = new Date();  
//格式

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");

//日期转字符串
String date2 = simpleDateFormat.format(date);

//字符串转日期
Date date3 = simpleDateFormat.parse("2019-02-02");

    

 

  18、将1990年3月3日通过Calendar来表示,并得出这天是该年的第一天?将该日
        期增加35天,是哪一天?使用代码来说明。

  

        Calendar calendar = new GregorianCalendar();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        calendar.setTime(simpleDateFormat.parse("1990-3-3"));
        System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
        calendar.add(Calendar.DATE, 35);
        System.out.println(calendar.get(Calendar.YEAR)+"年"+
                (calendar.get(Calendar.MONTH)+1)+"月"+
                calendar.get(Calendar.DATE)+"号");

 

  19、【上机】写代码测试Date/SimpleDateFormat/Calendar的用法。

        

     public static void main(String[] args){

                    // Date的用法

                    Date date1 = new Date();

                    System.out.println(date1.toString());

                    // SimpleDateFormat的用法

                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

                    String daytime = sdf.format(new Date());

                    // Calendar的用法

                    GregorianCalendar calendar = new GregorianCalendar();

                    calendar.set(Calendar.YEAR,2009);

             }

 

  20、【上机】模仿老师的写法,完成可视化日历程序的开发。

              package com.test;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.Scanner;

public class Test { 

    public static void main(String[] args) {

        System.out.println("请输入日期(格式为:2017-3-3):");

        Scanner sc = new Scanner(System.in);

        String date = sc.nextLine();

        String[] daytime = date.split("-");

        int year = Integer.parseInt(daytime[0]);

        int month = Integer.parseInt(daytime[1]);

        int day = Integer.parseInt(daytime[2])

        GregorianCalendar calendar = new GregorianCalendar(year, month-1, day);

        calendar.set(Calendar.DATE, 1);

        // week:1-7 日一二三四五六

        int week = calendar.get(Calendar.DAY_OF_WEEK);

        System.out.println("日\t一\t二\t三\t四\t五\t六");

        for(int i = 0; i < week-1; i++){

            System.out.print("\t");

        }

        int maxDate = calendar.getActualMaximum(Calendar.DATE);

        for(int i = 1; i <= maxDate; i++){

            StringBuilder sb = new StringBuilder();

            if(calendar.get(Calendar.DATE) == day){

                sb.append(calendar.get(Calendar.DATE)+"*\t");

            }else{

                sb.append(calendar.get(Calendar.DATE)+"\t");

            }

            System.out.print(sb);

            if(calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY){

                System.out.print("\n");

            }

            calendar.add(Calendar.DATE, 1);

        }

    }

}

 

 

  21、File类能代表一个目录吗?

     可以

  22、File类的方法mkdir跟mkdirs,有什么区别?

     

  23、使用File类模拟实现DOS的dir和dir/s命令

   24、【上机】使用递归算法,根据老师的树状结构代码,完整展示一个目录树

        

  25、【上机】手动定义一个枚举,表示十二个月的英文月份。

   

public enum Month{
        JANUARY,FEBRUARY,MARCH,APRIL,MAY,JUNE,JULY,AUGUST,
        SEPTEMBER,OCTOBER,NOVEMBER,DECEMBER
    }
  1. 【上机】switch语句中的表达式结果可以是枚举吗? 模仿课堂代码,写一个例子
            说明。

     可以。

            

第八章 容器