尚学堂__百战程序员__1573题------第七章 常用类

本文介绍了Java中的包装类及其作用,例如为了使基本类型具备对象特性,便于在集合中使用。同时讲解了如何将字符串转化为基本类型数字,以及自动装箱和拆箱的概念。此外,文章探讨了String类的特性,如不可变性、equals方法的实现以及常用方法如trim、substring等。还讨论了StringBuffer和StringBuilder的区别,以及时间表示、日期转换和文件操作的相关知识点。最后,文章提到了枚举的使用场景和优势,并给出了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

基本类型 包装类型
booleanBoolean
charCharacter
intInteger
byteByte
shortShort
longLong
floatFloat
doubleDouble

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

Integer.parseInt("123");

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

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

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

//自动装箱
Integer total = 99;
//自定拆箱
int totalprim = total;

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

        

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

        字符串是常量,它们的值在创建之后不能更改,String对象是不可变的,所以可以共享

        String类的底层结构是char类型的数组value,而这个数组使用final进行修饰

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

String类的equals方法重写了Object类的equals方法,用于比较两个String对象的内容是否相同

String类的equals方法的源码分析:

如果两个String对象的内存地址(引用)相同,那么return true

如果两个String对象的内存地址(引用)不相同,那么进行类型判断,如果不是String类型,那么直接返回false,如果是String类型则进行向下类型转换,转换成String类型,然后变改char类型数组,比较两个数组对应位置上的内容是否相同,如果相同返回true,如果不同返回false

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  //在运行时常量池中创建新的对象"abc",如果常量池中不存在,在去栈中创建该对象的引用s; 地址值,和值都相等 所以为true

System.out.println(s3==s4);结果为true  //过程同上

System.out.println(s4==s5);结果为false //  ==  比较地址值  ss部分指向的地址值不同

System.out.println(s4.equals(s5));结果为true //  equals只比较内容 

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

        字符串的长度:

                System.out.println(“hello”.length());

        去掉字符串前后的空格:

                System.out.println(“  hello  world  ”.trim());

        截取子字符串:

                System.out.println(“helloworld”.substring(0,4));

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

        联系:

        StringBuffer和StringBuilder都是可变字符序列,底层数组结构都是char类型的数组

        区别:

        StringBuffer:jdk1.0版,线程安全,但是效率低

        StringBuilder:jdk1.5版,线程不安全,但是效率高

12、如下的代码会造成什么后果?运行期间会产生多少个对象?  使用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);

}

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

        获取从1970-1-1 0:0:0到当前时间所经历的毫秒数,然后转换为日期或者时间

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

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

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

        是,精确到毫秒

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

        

//字符串转日期

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

sdf.parse("1990-3-3");

//日期转字符串

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

sdf.format(new Date());

        

17、将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));

}

18、【上机】写代码测试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);

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

        

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);

}

}

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

        

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

        mkdir:只能在已经存的目录中创建文件夹

        mkdirs:可以在不存的目录中创建文件夹

22、使用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());

}

}

}

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

class demoFile{
    public void show(){
        File f  = new File("d:/demo");
        printFile(f,0);
    }

    public static void printFile(File file,int level){
        for (int i = 0; i < level; i++) {
            System.out.println("-");
        }
        System.out.println(file.getName());
        if(file.isDirectory()){
            File[] files = file.listFiles();
            for(File temp:files){
                printFile(temp,level+1);
            }
        }
    }
}

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

        

25、【上机】什么时候使用枚举?枚举的定义是什么?

        订单的状态场景。

        枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性

26、【上机】switch语句中的表达式结果可以是枚举吗? 模仿课堂代码,写一个例子
        说明。

        可以

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值