201621123008 《Java程序设计》第二周学习总结
1. 本周学习总结
通过查询API掌握了一下几种类的基本用法:
- String类
- StringBuilder类
- ArrayList类
- BigInteger类
- BigDecimal类
- Arrays类
认知两种基本变量:
- primitive主数据类型
- 引用
2. 书面作业
1. String-使用Eclipse关联jdk源代码
1.1 查看String对象的源代码,分析String使用什么来存储字符串?
String对象源代码部分截取:
/** The value is used for character storage. */
private final char value[];
- 分析: String用字符数组来存储字符串。
1.2 分析其构造函数public String(char value[])
的作用?
String对象源代码部分截取:
* Allocates a new {@code String} so that it represents the sequence of
* characters currently contained in the character array argument. The
* contents of the character array are copied; subsequent modification of
* the character array does not affect the newly created string.
*
* @param value
* The initial value of the string
*
public String(char value[]) {
this.value = Arrays.copyOf(value, value.length);
}
- 分析: 由以上可知该够造函数可接收一个char数组,生成一个String对象。
举例:
char[] ch={'c','h','a','r'}; String str=new String(ch); System.out.println(str)
运行结果:
char
1.3 阅读public String replace(char oldChar, char newChar)
方法的代码,回答String的不可变性在该函数中如何体现?
String对象源代码部分截取:
- 分析:在进行字符串替换时并不是直接对原有字符串进行操作,而是建立了一个新的字符串,将新的字符放入到新字符串的适当位置上,将新字符串作为返回值赋给Sting类型的引用。总结来说,此过程中是String类型的引用由一个旧的对象指向一个新的对象。
1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?
Java是面向对象的。类是创建对象的模版,类中包含了许多的方法,当我们用new方法创建一个对象时,就有许多现成的方法可供我们调用,相比其他语言,Java使用更为方便。运用new方法创建一个String类的对象时,若我们需要进行一些操作则只需调用String类中的方法就可,相比于字符数组,String更便捷;另一方面,由于String的不变性,若我们对字符串进行增添,修改,等操作时,便会生成新的对象,而那些旧的对象失去了对其的引用,将会失去生命力,垃圾回收器若不及时回收这些废弃的对象,整个程序将会非常低效,而此时若用字符数组则会显得比较灵活。不过,若是追溯到底层,String对字符串的存储及操作也是借助字符数组来实现的。
2. StringBuilde
2.1 结合PTA -2(StringBuilder),说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?
以该题为例,通过输入n将0至n-1之间的数作为字符串存入变量中。
String:因其具有不可变性,每进行一次循环将会在堆上生成一个新的对象,大大降低了程序运行的效率。
StringBuilder:每次循环是对对象本身进行操作,而不是生成新的对象。
2.2 阅读jdk文档,查询StringBuilder的append(char[]str)
方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[]str)
方法时,是如何实现添加字符的操作?
该方法的功能:将 char 数组参数的字符串表示形式追加到此序列。
StringBuilder对象源代码部分截取:
AbstractStringBuilder对象源代码部分截取:
- 分析:同String其内部使用字符数组来存放数组。
添加操作的实现过程:添加这个序列的char数组参数的字符串表示形式。字符数组参数按顺序追加,该序列的内容。这个序列的长度增加该参数的长度。
3. 字符串与字符串池
3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:
String str1 ="hi",
String str2="hi";
String str3 = new String(str1)
System.out.println(str1==str2);
执行该程序输出结果为true,共创建了两个对象。
执行第一行代码结果:在字符串常量池创建一个对象,其引用为str1,该对象存放的内容为hi。
执行第二行代码结果:此时字符串常量池中已存在字符串hi,str2直接指向str1所指向的对象,而不是再创建一个新对象。
执行第三行代码结果:通过new方法在堆上新建了一个对象,该对象存放的内容为hi。
执行第四行代码结果:对于引用类型==可以理解为判断两个引用所指向的对象的内存地址是否相同。而此题srt1与str2分别指向相同的对象,故其相等。
3.2 对基本类型我们可以使用比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用比较?应该怎样比较他们的值是否相等呢?
对于引用类型==可以理解为判断两个引用所指向的对象的内存地址是否相同。
若要比较两对象内容是否相等,调用equals方法即可。例:str1.equals(str2)
,其返回值为boolean
4. Wrapper(包装类)
4.1 Integer i = 100;
100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;
这一串命令中包含了些什么操作?
- 第一串命令:Integer为int的包装类,能将int类型的值赋给Integer类型的,是因为包装类具有自动装箱功能。
- 第二串命令:Integer x = 100;装箱
int y = x+1;装箱
x++;先拆箱后装箱
4.2 Java为什么有了基本数据类型,还需要其包装类呢?包装类能给我们带来什么好处呢?
- 可以通过包装类,实现String和基本类型之间相互转换。
- 可以通过包装类,实现基本数据类型的相互转换。
- Integer是一个引用类型,在传参,返回参数方面比int,即值类型,更兼容。
5. 实验总结
5.1 结对编程实践
使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。
结对对象:林文秀
由于PTA上的大部分题目在上星期就已完成,在宿舍也就和舍友讨论了下PTA上格式输入,输出的问题。有时候代码打完在eclipse上可以运行,但是放到PTA上却无法通过,可能是格式的错误或是对题目理解的错误,这时候和舍友讨论一下,看一下舍友的做法,比一个人在那里死扣好。但是如果自己没有深入的思考就开始问别人,一方面自己养成不了独立思考的能力,另一方面也是浪费别人的时间。每个人都有思维的盲区,我们面对问题的时候都是以一贯的思维来思考,如是遇到自己实在无法解决的问题时,就要与别人探讨交流,换个角度去想问题的解决方法。
5.2 PTA-1综合小测验
- 基本思路:
- 创建一个私有的静态整形数组,用于存储整形元素。
static private int[] arr;
- 通过
while (sc.hasNext())
控制输入。 - 根据用户输入的关键字进入不同的switch分支。
- 输入相应数据进入函数:
public static void sort(String[] str)
主要功能:将Strig类行的数组str转化为int型数组,存入arr<并对其排序,通过System.out.println(Arrays.toString(arr));
进行输出。
public static void search(int e)
主要功能:通过Arrays.binarySearch(arr, e)
查找元素e,返回其下标,若不存在则返回-1
public static void getBirthDate(String id)
主要功能:通过substring方法对输入的id进行截取,输出其出生日期。
public static void fib(int n)
主要功能:通过参数n打印出斐波那契数列的前n项,采用累加法。
5.3 PTA-3身份证排序。并回答:使用sort2
方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?
- 使用Arrays.sort方法对数组进行的排序为升序,若需降序排序则将通过Arrays.sort方法排序后的数组从最后一项开始输出即可,或者采用冒泡法,其他排序方法也可以。
- 通过substring方法截取id中的月份,将其转化为int型存入数组,调用Arrays.sort方法对数组进行的排序。
5.4 PTA-4动态数组
基本思路:
- 通过
while (sc.hasNext())
控制输入。 - 进入
getDynamicMatrix
函数
private static void getDynamicMatrix(int n)
主要功能:根据输入的n值打印相应的乘法表。通过双层for循环来实现,将每一行的输入存入的String类型的二维数组中,通过System.out.println(Arrays.deepToString(str));
打印二维数组。
5.5 PTA-8ArrayList入门。并回答:为什么有了数组还要使用ArrayList?
基本思路:
- 查询API文档即可。
- 通过使用ArrayList类我们可以动态添加数组元素,因为java是面向对象的,ArrayList中提供了许多方法,更便于使用。
5.6 浮点数计算
基本思路:运用math包中的BigDecimal类。在创建对象时若需精确计算则需向其构造函数中传入Sctring类型的参数。调用add方法实现两数相加;调用multiply方法实现两数相乘。
5.7 枚举
基本思路:enum
相当与class
,可以理解为一些常量的集合。根据PTA的输出要求,注意不要把其定义在Main
类中就可以。
5.8 大整数相加
基本思路:运用math包中的BigInteger类。
BigInteger sum = new BigInteger("0");
用sum
存储其和- 通过
while (sc.hasNext())
控制输入。 - 按行读取字符串。
- 若字符串为e或E,跳出循环。
- 通过add方法进行相加。
- 通过
System.out.println(sum.toString());
输出和。
6. 选做:公交卡里应该还有多少钱?请分析原因
分析:公交卡已欠费。将4294967276转为十六进制产生了溢出,而在系统中以无符号整形来存储,故而出现了余额很大的显示界面。
7. 选做(难):package与javac、 java、 -classpath、 -d与Eclipse
在 com.ibm
包中编写 StringUtil
类,内有一方法
public static void foo1(){ System.out.println(StringUtil.class+" method:foo1"); }
在edu.jmu包中编写Main类,调用com.ibm.StringUtil的foo1方法。
7.1 尝试用命令行进行编译并运行,截图
在edu.jmu包中编写Main类,其中掉了com.ibm.StringUtil的foo1方法
7.2 将生成的StringUtil.class放到d:\lib下正确的目录结构下,将Main.class放到d:\test下正确的目录结构,尝试在命令行下运行,并截图。
7.3 Eclipse中自己编写的源代码放在哪个目录、class文件放在哪个目录(给出绝对目录)?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?
class文件目录:E:\java workspace2\MyProject3\bin\JavaLearn2
源文件目录:E:\java workspace2\MyProject3\src\JavaLearn2
按下 ctrl+F11,是执行了bin
下相应的字节码文件。
3. 码云及PTA
3.1 码云代码提交记录
3.2 截图题集“Java基本语法”PTA提交列表
3.3 使用老师发的jar程序统计每周的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
2 | 665 | 665 | 20 | 20 |
4. 小任务
2.1 加分考核点:新建n个大小的数组,往数组中随机填入1-100之间的整数(写成函数形式),然后统计并输出其中大于50与小于等于50的百分比(写成函数形式)。(注意:可以使用for each循环进行统计,随机数用法见参考资料 )
代码:
运行结果:
201621123008 《Java程序设计》第二周学习总结的更多相关文章
- 20145304 刘钦令 Java程序设计第二周学习总结
20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...
- 201521123063 JAVA程序设计 第二周学习总结
1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...
- 2017面向对象程序设计(Java)第二周学习总结
2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结
丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...
- 201521044152<java程序设计>第一周学习总结
本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...
- 20145304 刘钦令 Java程序设计第一周学习总结
20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...
- 201621123007 Java程序设计第一周 学习总结
第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...
- 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结
这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...
- 杨其菊201771010134《面向对象程序设计Java》第二周学习总结
第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...
- 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
随机推荐
- python学习之----初见网络爬虫(输出整个网页html的代码)
from urllib import urlopen html = urlopen('http://www.manluotuo.com') print (html.read()) 控制台输出整个网页h ...
- python urlretrieve 下载图片
python 3中urlretrieve方法直接将远程数据下载到本地.为什么不行? 55 import re import urllib.request def getHtml(url): page ...
- JS转义解码方法
之前只知道可以解决传值乱码问题,今天刚好看到,从新补充下: JavaScript中有三个可以对字符串编码的函数,分别是: 转义方法: escape();//函数可对字符串进行编码 encodeURI( ...
- WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/
为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...
- fb 发布桌面应用图标
1.以src文件夹为根目录,即图标放在src文件内 2.修改app.xml文件icon,按尺寸填入,如下图 同时可修改app应用的名字,接受中文,如下图红色涂鸦: 导出发行版的时候,注意打包内容有么有 ...
- as3 连接mysql
http://www.cnblogs.com/yili16438/archive/2011/04/23/2025936.html
- js执行机制(1)
1.参考执行结果 setTimeout(function () { console.log('执行定时任务'); }); new Promise(function (resolve) { consol ...
- @Transactionl注解
spring 事务注解 默认遇到throw new RuntimeException("...");会回滚 需要捕获的throw new Exception("...&q ...
- hadoop发行版本
Azure HDInsight Azure HDInsight is Microsoft's distribution of Hadoop. The Azure HDInsight ecosystem ...
- yum 操作
一.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的. 安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲 ...