201621123063《Java程序设计》第2周学习总结

1.本章学习总结

本章主要讲了java基本的数据类型,基本的数据类型与c语言类似,引用数据类型与C语言不同。java是一个面向对象的语言,引用类型变量存放指向对象的引用。
通过本章的学习了解了==与equals在比较上的不同以及对字符串常量池的了解,string是不可变性的,若要对字符串进行频繁修改时使用string会造成内存大量浪费,这时使用stringbuilder效率更高。

2.书面作业

1.String-使用Eclipse关联jdk源代码

1.1查看String对象的源代码(截图),分析String使用什么来存储字符串?
1123710-20170924145743790-1053334780.png

使用堆来存储字符串,它是由JVM分配用于存储对象等数据的区域。

1.2 分析其构造函数public String(char value[])的作用?
该函数的作用是通过char数组,生成String字符串对象

1.3 阅读public String replace(char oldChar, char newChar)方法的代码,回答String的不可变性在该函数中如何体现?(重点)

函数的返回值是替换后生成的新字符串。原来的字符串还是存在只是生成了新的与原来字符串数值一样的字符串。

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
string是不可变对象,只有当字符串是不可变的,字符串池才有可能实现,大大提升效率,并且用string来储存字符串更加安全

2.StringBuilder

2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
因为String是不可变性的,若使用string频繁修改字符串会造成浪费大量存储空间。
而StringBuilder是个动态对象,可直接拼加上字符串,因此使用StringBuilder比使用String效率更高。

2.2阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?
1.以char数组为参数的字符串附加到原有的序列中。
2.StringBuilder在内部有一个足够长的字符数组用于存放字符串对象,当字符串长度没超过字符数组长度时,所有操作都是针对同一个字符数组。
3.在原有的字符串后面追加一个char型数组类型的字符串并返回,不构成新的对象

3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

因为直接使用双引号创建字符串,会在字符串常量池中创建字符对象,若字符串常量池中已有则不创建直接复用。因此str1与str2只创建了一个字符串对象,再新创一个字符串对象用来存储数值上与str1相等的str3.
所以这段代码创建了两个字符串对象并且输出结果为true.

3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?
因为String,Integer,数组等引用类型可能存放的数值相同但是地址不同,用==比较的话 地址不同即使数值相等也会不等,所以应该用equals进行比较

4.Wrapper(包装类)

4.1 Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?
①这是自动装箱的过程,将基本类型转换为Integer类型。
②1.Integer x=100包含了自动装箱的过程
2.int y=x+1 包含了自动拆箱的过程
3.x++包含了自动拆箱和自动装箱的过程

4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?

①java是面向对象的,而基本类型是不具有对象性质的,为了让基本类型也具有对象的特征,因此出现了包装类。
②经过包装的类,功能或者优化性能比原来强,使用方便。

5.实验总结

5.1结对编程实践
1123710-20170923163026243-962150827.png

队友:陈锦霞
结对过程:在这结对过程中,我们决定先完成一题编程题,首先各自说出解决这题的大概思路,决定两个人轮流写,没有具体规定要打几分钟代码后换人。
结对过程的好处是,当思路卡在某个点过不去的时候,对方有的时候能帮助越过这个卡,能提高打代码的效率节省一些时间。但对代码水平的提高我觉得没有很大作用。
5.2 PTA-1综合小测验
sort和search用到Arrays类中sort(),binarySearch()和Integer.parseInt等方法,身份证取生日类似7-2简化,fib注意输出要跳行

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
利用subString()截取身份证号中的出生日期并转化成整型存入数组,对数组进行升序排序,用equals()方法找回排序后的出生日期所对应的身份证号并按顺序输出
5.4 PTA-4动态数组
使用StringBuilder类来不断对字符串进行添加操作,字符串的截取用StringBuilder类中toString()方法把StringBuilder类转为String类再用subString()方法进行截取

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
参考jdk api中ArrayList类,对ArrayList类中的方法进行简单使用
5-5(浮点数计算)
直接用double型进行计算不够精确,使用BigDecimal类中的add()和multiply()可以进行精确的浮点数加法和乘法,再用doubleValue()方法返回double类型的值并输出
5-6(枚举)
使用枚举类,编写函数使输入的分数能返回正确的枚举类型常量
5-7(大整数相加)
BigInteger类可以轻松对大整数进行操作而避免溢出,本题直接用BigInteger().add()方法来完成大整数的相加

选做:公交卡里应该还有多少钱?请分析原因

1123710-20170923185929978-862024608.png
4294967276 =(16进制的)FFFFFFFC,其实是欠0.02元
无符号整型,没考虑到负数的情况

3.码云及PTA

3.1. 码云代码提交记录

1123710-20170923163125056-1380297407.png

3.2 截图题集“Java基本语法”PTA提交列表

1123710-20170923162814571-256114779.png
1123710-20170923162842384-1959473217.png

3.3 使用老师发的jar程序统计每周的代码量

1123710-20170923185756228-662085112.png

转载于:https://www.cnblogs.com/Yelz/p/7565011.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值