1. 本周学习总结

  • 本周主要学习了包装类,明白了包装类比基本数据类型的优点(见书面作业4.2),了解了自动装箱,自动拆箱的概念和区别(见书面作业4.1),知道了java中的引用类似C语言中的指针,明白了常量池的概念(见书面作业3.1),通过查阅资料及写代码知道了String的不可变性(见书面作业1.3、2.1)
  • 在代码方面,学习了StringBuilder类,ArrayList类,bigInteger类以及bigDecimal类的基本使用规则和其中的一些方法

2. 书面作业

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

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



从以上截图可以看出String类用字符数组来存储字符串

1.2分析其构造函数public String(char value[])的作用?

将char数组中的内容合成一个字符串

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

该方法是用新的字符(newChar)代替原来字符串中所有指定的旧的字符(oldChar),如果 oldChar 在此 String 对象表示的字符序列中没有出现,则返回对此 String 对象的引用,否则,创建一个新的 String 对象,它所表示的字符序列除了所有的 oldChar 都被替换为 newChar 之外,与此 String 对象表示的字符序列相同,String的不可变性就体现在如果有存在替换字符的情况,要创建一个新的引用

代码图



运行结果

1.4 简述String与字符数组的关系,使用字符数组就可以处理字符串,为什么还需要String呢?

String是用字符数组来存储字符串的,但是String类中有很多实用的方法是可以直接使用,而这些方法用字符数组很难实现甚至不能实现

2.StringBuilder

2.1 结合PTA -2(StringBuilder) ,说明为什么频繁修改字符串时,应该使用StringBuilder而不是String?

String对象是不可变的,在每次对String类进行改变是,都会生成一个新的引用对象,而对StringBuilder类进行操作时,是直接对StringBuilder进行操作,不会生成一个新的引用对象,当频繁修改字符串时,用StringBuilder类所占的内存,消耗的时间显然比用String类来的少

2,2阅读jdk文档,查询StringBuilder的append(char[] str)方法功能是什么?试分析StringBuilder内部使用什么来存放字符?调用StringBuilder的append(char[] str)方法时,是如何实现添加字符的操作?



通过上图可知append(char[] str)方法是直接把字符数组char添加到StringBuilder字符串的尾部中,StringBuilder是用字符数组来存放字符,通过直接将char数组中的内容追加到此序列的尾部,生成序列的长度增加相应char数组的长度的方式来实现添加字符的操作

3.字符串与字符串池

3.1 尝试使用字符串池的概念解释如下程序段输出结果,并回答这段代码创建了几个字符串对象:

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);

运行结果是true,当给str1赋值hi是,就会将hi字符串放入字符串池,当给str2赋值hi时,会先在字符串池中查找有没有相同的字符串,若有,则指向这个字符串,即str1和str2的引用是相同的,当判断str1==str2时,实际上是判断str1和str2的引用是否相同,两者都指向字符串池中的hi,引用自然相同,返回结果true

3.2 重点:对基本类型我们可以使用==比较两个值是否相等,对于引用类型(如String, Integer、数组等)为什么不能使用==比较?应该怎样比较他们的值是否相等呢?

对引用类型,==是判断两者的引用是否相同,并不能用来比较两者的数值是否相同,要想知道数字是否相等,可用equal方法

4.Wrapper(包装类)

4.1Integer i = 100;//100是基本类型,i是引用类型,为什么可以将100赋值给i?Integer x = 100; int y = x+1;x++;这一串命令中包含了些什么操作?

  • 将基本类型100赋给应用类型i是java的自动装箱功能
  • 这串命令中先后包含了自动装箱,自动拆箱,先拆箱再装箱

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

  • 通过包装类,可以很方便实现基本类型之间的转换
  • 集合不能存放基本数据类型,只能存放包装类
  • 有很多实用的方法

5.实验总结

5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。推荐实施步骤:1.两个人坐在同一台电脑屏幕前判题,讨论、决定大概由谁先写。2. 1个人先编5分钟(自己商量多少分钟),同时另一个人观察对方编程或者查相关资料。3. 5分钟后,简单讨论后,换另外一个人继续编(请一定要换,另一个人如果无法接受应由第一个人讲解大概思路以方便其接受)。并完成如下作业:a.描述结对队友姓名、结对过程,提供非摆拍的两人在讨论、细化和编程时的结对照片。b.结对编程真的能够带来1+1>2的效果吗?通过这次结对编程,请谈谈你的感受和体会(如是否有利于自己编程水平的提高、是否有利于开拓编程思路)。

  • 结对对象:林诗乐
  • 结对题目:7-1 jmu-Java-02基本语法-02-StringBuilder
  • 感受和体会:我一般比较喜欢自己思考或者上百度查资料,觉得这样子记忆会比一起讨论来的深刻,所以我觉得对我来说自己写代码会比合作完成有效率

5.2 PTA-1综合小测验

新建三个方法,fib方法用来输出斐波那契数列的前n个数,getBirthDate方法用来提取身份证中的出生年月日,主要用到String类中的subString方法,convertToDigits方法用来将字符数组转换成整型数组,再利用Java中的sort方法对整型数组进行排序,最后要实现search功能,则使用Java中的binarySearch方法

5.3 PTA-3身份证排序。并回答:使用sort2方法进行排序可以对出生年月日进行升序排序,如果现在有需要对其进行降序排序,或者按照其中的出生月份排序,怎么解决呢?

  • 当输入为sort1时,先将身份证中的年月日信息提取出来,在用sort方法对所有的生日字符串进行升序排列
  • 当输入的为sort2时,将身份证中的年月日信息提取出来,将其转换为整型,用冒泡法进行比较,最后输出比较后的身份证信息
  • 要是有需要对其进行讲序排序,则冒泡法for循环的条件改变一下即可

5.4 PTA-4动态数组

先设置二维数组的行数为输入的整数n,再根据行标设置列数,代码为str[i]=new String[i+1];,本题需要特别注意输出格式问题,当下标i=j时,输出二维数组str[i][j]的值及回车键,但下标不等时,输出7个字符的str[i][j]的值

5.5 PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?

  • 本题主要应用ArrayList类中的atr.add() str.contain() str.indexOf() str.lastIndexOf() str.get() str.remove()等方法完成代码
  • ArrayList是动态数组,可以随时改变数组长度

5.6 选做:5-5(浮点数计算), 5-6(枚举), 5-7(大整数相加)

  • 5-5(浮点数计算)

    运用BigDecimal类,用add方法进行相加运算,用multiply方法进行相乘运算

  • 5-7(大整数相加)

    本题运用了bigInteger类来实现大整数相加,还运用了equalsIgnoreCase()方法来判断输入的数是e还是E

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



卡中应该是欠费的,数据类型是unsigned无符号类型,数据溢出导致有符号的负数变成无符号的极大正数

3. 码云及PTA

3.1. 码云代码提交记录



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



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

周次 总代码量 新增代码量 总文件数 新增文件数
2 343 343 10 10

Week02-Java基本语法与类库的更多相关文章

  1. 第2周作业-Java基本语法与类库(20170227-20170304)

    本周学习总结 (1)这周学习认识和熟悉了java的一些类型和变量: (2)学习了java的运算符基本使用方法: (3)了解了如何建立远程仓库和本地仓库,和如何让java代码在临时储存,本地仓库和远程仓 ...

  2. Java第2次实验提纲(Java基本语法与类库)

    1. 使用Git克隆(clone)项目到你的Eclipse项目中 见以下参考资料中的3 从码云将项目clone到你的电脑 重要提示: 使用Git来管理你的代码以后,当你在本机Eclipse项目中开始编 ...

  3. Java第02次实验提纲(Java基本语法与类库)

    1. 熟悉Git 1.1 学会使用网页版的操作代码仓库(gitee) 申请账号,然后根据老师提供的链接或者二维码加入团队,然后修改昵称. fork老师提供的代码库项目,新建自己学号命名的文件并上传一些 ...

  4. 第2周作业-Java基本语法与类库

    1. 本周学习总结 答:① 定义流程控制的各种条件式是同以前学习的一样,要善于运用快捷键.(例如`a/t` + `/` ) ② 熟悉输入输出的使用,注意输入的变量类型使用相应的输入类. ③ 数组对象: ...

  5. 201521123044 《Java程序设计》第2周作业-Java基本语法与类库

    1. 本章学习总结 ·1.浮点型的不精确,不能简单的像C语言一样用float或者double来定义.在java中有更精确的BigDecimal类. 举例:BigDecimal bd1= new Big ...

  6. 201521123053 <<Java基本语法与类库>>第二周

    1.本周学习总结 这是第二周学习了,还是感觉吃力,慢慢来吧 .知识总是一点一点进到脑子里,虽然头小,但总会进来不是! 知识储备:   A.整形变量按照长度分为byte.short.int.long. ...

  7. [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  8. Java 的 JSON 开源类库选择比较(zz)

    在看了作者的介绍,然后我又到mvnrepository上去看了各个库的的使用数之后,发现只能在jackson和gson之间做选择. 以下是原文 有效选择七个关于Java的JSON开源类库 April  ...

  9. java正则表达式语法详解及其使用代码实例

    原文地址 译者序(下载代码) 正则表达式善于处理文本,对匹配.搜索和替换等操作都有意想不到的作用.正因如此,正则表达式现在是作为程序员七种基本技能之一*,因此学习和使用它在工作中都能达到很高的效率. ...

  10. 201621123027 Week02-Java基本语法与类库

    Week02-Java基本语法与类库 1.本周学习总结 关键词:基本语法,数据类型,包装类 本周讲了Java的基本数据类型和包装类: 数据类型主要分为八类(byte,short,int,long,do ...

随机推荐

  1. WebView的使用--Hybrid App

    App页面是运行在WebView中的,一个App页面对应一个WebView,本例实现两个WebView之间的跳转. 实现过程(用到了MUI框架): 1.页面标识+跳转按钮(index.html.mai ...

  2. 【BZOJ4554】游戏(二分图匹配,网络流)

    [BZOJ4554]游戏(二分图匹配,网络流) 题解 Description 在2016年,佳缘姐姐喜欢上了一款游戏,叫做泡泡堂.简单的说,这个游戏就是在一张地图上放上若干个炸弹,看 是否能炸到对手, ...

  3. 无需安装Oracle Client连接Oracle数据库

    介绍 当我们采用 ODP.NET 检索Oracle 数据库的时候,Oracle客户端是必须安装.假如当时电脑上没有安装Oracle客户端,就不能这么用了,这时候Oracle.ManagedDataAc ...

  4. Java NIO FileVisitor 高效删除文件

    在公司项目中,由于做个二维码扫码平台项目,预计每天产生的二维码图片达到十几G,所以要做个定时清理任务来定时清理图片,根据不同场景保留图片,规则是:1.二维码统一登录图片几个小时有效   2.电子名片二 ...

  5. EasyUI 二次加载toolbar异常问题解决

    问题:easyUI初次渲染正常,之后会出问题,toolbar重复加载 解决办法:每次加载之前先从body中删除已经渲染的工具栏-->重新加载-->手动渲染工具栏 代码: function ...

  6. 读取超大Excel(39万行数据)

    有个学长需要处理Excel数据,Excel数据共有39W,将数据读取后处理并导出数据.最开始尝试了 NPOI ,发现NPOI 并不能完成该项任务,随后尝试引用的com组件:Microsoft.Offi ...

  7. 优化python程序的几点建议

    1.在需要只读序列时,最好使用元组而非列表: 2.使用生成器yield,而不是创建大的元组和列表并在其上进行迭代处理: 3.尽量使用python内置的数据结构,而不实现自己的自定义结构: 4.从小字符 ...

  8. select子句和三种子查询

    一.select子句 五种子句 Where.group by.having.order by.limit Where.group by.having.order by.limit运用的这个顺序不能变 ...

  9. 从源码浅析Java中的Lock和AbstractQueuedSynchronizer

    在之前的文章中我也曾经介绍过Lock,像ReentrantLock(可重入锁)和ReentrantReadWriteLock(可重入读写锁),这些所我们在说的时候并没有详细的说明它们的原理,仅仅说明了 ...

  10. 【Python】 魔法方法

    魔法方法 这个名字真的很中二有没有 = =(或者说翻译气息太浓了,作为一个学外语的看到这种真是想吐槽的不行..) 从形式上来说,在方法的名字前后个加上两条下划线的就是魔法方法了 .从功能上说,所有魔法 ...