1. 本周学习总结

·学习了String类的特点,以及其与字符数组的关系等等。
·常量池的相关概念。
·包装类的特点。

2. 书面作业

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

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

如图所示,String实际上是使用char[]来存储字符串。

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

查阅JDK文档

public String(char[] value)
分配一个新的 String,使其表示字符数组参数中当前包含的字符序列。该字符数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。
参数:
value - 字符串的初始值

将当前字符数组中的字符放入新创建的字符串中,但该字符数组依旧存在。

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

 if (i < len) {               //申请一个和原来字符数组一样大小的buf数组。                  char buf[] = new char[len];  
               
在该函数中是先创建了一个新的字符串数组,然后将字符替换并复制到新数组后,将构造的新字符串对象返回。所以实质是创建了一个新的String对象,而不是在原字符串中更改。

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

String本质上是使用字符数组存储字符串;String创建对象后是不可变的,字符数组可以改变。直接赋值定义一个String对象时,会将改字符串入字符串常量池,等下一次再定义相同的String对象时就不会再开辟一个新的空间,节省空间,效率高。

2. StringBuilder

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

如果使用String的话,因为String的不可变性,每修改一次字符串,就会创建新的String对象,产生大量的String对象,占用大量空间。StringBuilder是将字符串追加或插入到字符串生成器中。

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

功能:将 char 数组参数的字符串表示形式追加到此序列。
StringBuilder内部使用字符数组来存放字符。它是通过将字符参数转化为字符数组添加到原序列后实现添加字符的操作。

该方法的最终效果与以下操作过程的效果相同:先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。

3. 字符串与字符串池

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

String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
输出结果:true,创建了两个字符串对象。
解释:直接赋值定义str1,该字符串会存入字符串池中,当str2被直接赋值定义后,字符串池中已有该字符串,所以不再重复创建新的对象。而str3是采用new String()的方式定义的,所以新创建了一个字符串对象。

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

因为==比较的是是否为同一个对象,而不是比较两个值。应该用equals方法,如String str=new String("hi");str.equals("hi");不区分大小写进行比较:"abc".equalsIgnoreCase("ABC");

4. Wrapper(包装类)

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

因为包装类可自动装箱、拆箱。
Integer x = 100自动装箱,将基本数据类型100转换为Integer类型;int y = x+1自动拆箱,将Integer类型x转换为基本数据类型y;x++则是先拆箱再装箱。

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

包装类可以实现基本数据类型之间、基本数据类型和String之间的转换,而且可以将基本数据类型封装成对象,毕竟Java是面向对象的语言,所以许多地方都是需要用对象。

5. 实验总结

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

结对对象:秦玉
就近选择舍友作为合作方,步骤1、2进行得还是比较顺利的,但从步骤3开始,两人讨论过程中发现两个人思路、编程习惯大相径庭,确实不太适合一起编程,所以我们决定用各自的方法进行编程,结束后再做交流,互相吸取对方方法的优点。个人认为,就这次的体验,觉得确实没有产生1+1>2的效果,不过各自编程后进行交流总结的这个过程倒是觉得有所收益,确实开拓了编程思路。

5.2 PTA-1综合小测验

该题中,斐波那契函数部分基本和以前用C语言编写的差不多,就不多说了,注意输入的n可以小于3;sort部分使用split()函数去掉空格,再自己编写函数将字符串数组转换成整型数组,然后使用Arrays.sort()进行排序,最后使用Arrays.toString输出即可;search部分会使用Arrays.binarySearch(int[] a, int key)即可;getBirthDate部分使用substring()方法,要注意参数的选取。

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

sort1部分类似与综合小测验中的截取年月日的部分,只不过再对其进行排序,使用Arrays.sort()方法即可;sort2的话跟以前写C语言的时候的一些题目差不多,可以利用冒泡法进行排序,如果要降序的话就把冒泡法里的判断条件更改一下就行了。

5.4 PTA-4动态数组

这题的话比较基础,注意一下输出格式就行了。

5.5 (重点:小测题目)PTA-8 ArrayList入门。并回答:为什么有了数组还要使用ArrayList?

这题其实也不难,题目里已经列好了操作的步骤,只要把这些步骤转化成代码即可。用JDK文档查询ArrayList类的相关方法,根据步骤要求使用这些方法就能编写出来。比较值得注意的就是步骤12,一开始将strlist里的元素转化成字符数组和str进行比较,出现空指针的错误,反复尝试后发现其实只要将每个元素转换成字符串然后用indexOf()方法比较即可orz想得太复杂了。
使用ArrayList可以灵活改变容量长度,有点像C中的分配动态空间。

3. 码云及PTA

3.1. 码云代码提交记录

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

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

行数 新增行数 文件数 新增文件数
247 247 76 76

201621123033 《Java程序设计》第2周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 第29章 电容触摸屏—触摸画板—零死角玩转STM32-F429系列

    第29章     电容触摸屏—触摸画板 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  2. 关于 ReactNative 环境搭建之 error: invalid developer directory '/Library/Developer/CommandLineTools' - RN

    简要说明,此次尝试安装 ReactNative 时当前 MacPro 版本为 10.13.6.Xcode 版本为 Version 9.4.1 (9F2000),按照官方的完整原生环境搭建流程一步步执行 ...

  3. JavaScript_DOM学习篇_图片切换小案例

    今天开始学习DOM操作,下面写一个小案例来巩固下知识点. DOM: document object model (文档对象模型) 根据id获取页面元素 : 如: var xx = document.g ...

  4. Java分享笔记:使用缓冲流复制文件

    [1] 程序设计 /*------------------------------- 1.缓冲流是一种处理流,用来加快节点流对文件操作的速度 2.BufferedInputStream:输入缓冲流 3 ...

  5. 【转载】java 客户端链接不上redis解决方案 (jedis)

    本文出自:http://blog.csdn.net/lulidaitian/article/details/51946169 出现问题描述: 1.Could not get a resource fr ...

  6. 汉罗塔问题——Python

    汉罗塔问题就是一个循环的过程:* (有两种情况) 如果被移动盘只有一个盘子,可以直接移动到目的盘 但是被移动盘有多个盘子,就先需要将上面的n-1个盘子通过目的盘移动到辅助盘,然后将被移动盘最下面一个盘 ...

  7. C# WinForms跨线程更新 UI

    与在Android中一样, 子线程中更新UI被认为是线程不安全的, 会抛出异常. 子线程返回UI线程中更新UI的一个方法为: 1, 捕获应用的UI线程的上下文; 2, 定义线程任务; 3, 定义线程任 ...

  8. laravel5.5用户认证

    目录 1. 命令 2. 快速认证 2.1 自定义路径 2.2 自定义用户名 2.3 自定义看守器 2.4 自定义验证/存储 2.5 Auth::xx() 2.6 保护路由 2.7 指定看守器 3 手动 ...

  9. Android学习记录(4)—在java中学习多线程下载的基本原理和基本用法①

    多线程下载在我们生活中非常常见,比如迅雷就是我们常用的多线程的下载工具,当然还有断点续传,断点续传我们在下一节来讲,android手机端下载文件时也可以用多线程下载,我们这里是在java中写一个测试, ...

  10. shell脚本递归删除空文件夹

    有时我们需要递归删除空文件夹,网上找了一下,没有发现比较好的脚本,于是自己动手写了一个 脚本 #!/bin/bash # author: 十年后的卢哥哥(http://www.cnblogs.com/ ...