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文档,查询StringBuilderappend(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

  • 执行第二行代码结果:此时字符串常量池中已存在字符串histr2直接指向str1所指向的对象,而不是再创建一个新对象。

  • 执行第三行代码结果:通过new方法在堆上新建了一个对象,该对象存放的内容为hi

  • 执行第四行代码结果:对于引用类型==可以理解为判断两个引用所指向的对象的内存地址是否相同。而此题srt1str2分别指向相同的对象,故其相等。

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++;这一串命令中包含了些什么操作?

  • 第一串命令:Integerint的包装类,能将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())控制输入。
  • 按行读取字符串。
  • 若字符串为eE,跳出循环。
  • 通过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程序设计》第二周学习总结的更多相关文章

  1. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  2. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  3. 2017面向对象程序设计(Java)第二周学习总结

    2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为 ...

  4. 201871010106-丁宣元 《面向对象程序设计(java)》第二周学习总结

    丁宣元 <面向对象程序设计(java)>第二周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在 ...

  5. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 201871010121 王方 《面向对象程序设计(java)》 第二周学习总结

    这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11475 ...

  9. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  10. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

随机推荐

  1. python学习之----初见网络爬虫(输出整个网页html的代码)

    from urllib import urlopen html = urlopen('http://www.manluotuo.com') print (html.read()) 控制台输出整个网页h ...

  2. python urlretrieve 下载图片

    python 3中urlretrieve方法直接将远程数据下载到本地.为什么不行? 55 import re import urllib.request def getHtml(url): page ...

  3. JS转义解码方法

    之前只知道可以解决传值乱码问题,今天刚好看到,从新补充下: JavaScript中有三个可以对字符串编码的函数,分别是: 转义方法: escape();//函数可对字符串进行编码 encodeURI( ...

  4. WebRTC内置debug工具,详细参数解读 chrome://webrtc-internals/

    为了确保这篇文章所写内容尽可能的准确,我决定请来Philipp Hancke来作为此篇文章的共同作者. 当你想要找到你WebRTC产品中的问题时,webrtc-internals是一个非常棒的工具,因 ...

  5. fb 发布桌面应用图标

    1.以src文件夹为根目录,即图标放在src文件内 2.修改app.xml文件icon,按尺寸填入,如下图 同时可修改app应用的名字,接受中文,如下图红色涂鸦: 导出发行版的时候,注意打包内容有么有 ...

  6. as3 连接mysql

    http://www.cnblogs.com/yili16438/archive/2011/04/23/2025936.html

  7. js执行机制(1)

    1.参考执行结果 setTimeout(function () { console.log('执行定时任务'); }); new Promise(function (resolve) { consol ...

  8. @Transactionl注解

    spring 事务注解 默认遇到throw new RuntimeException("...");会回滚 需要捕获的throw new Exception("...&q ...

  9. hadoop发行版本

    Azure HDInsight Azure HDInsight is Microsoft's distribution of Hadoop. The Azure HDInsight ecosystem ...

  10. yum 操作

    一.使用yum安装和卸载软件,有个前提是yum安装的软件包都是rpm格式的. 安装的命令是,yum install ~,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲 ...