• Week02Java基本语法与类库


    1. 本周学习总结
      ==========
      这一周讲了Java数据类型,讲了不同于C的基本数据类型:布尔型(boolean)。还有引用数据类型,有点类似C语言中的指针,在其中提出==和equals的区别。还知道了,String的不变性。若是需要对字符串进行修改,就需要用到StringBuilder。每个基本类型,都有对应的包装类。有两种语法,分别叫做自动装箱和自动拆箱。数组这个概念,有一维二维还有多维的数组。不过,一旦确定了数组大小,就无法改变!当然,可以用到传说中的动态数组,只是它无法存放基本数据类型,只能存放引用类型。
    2. 书面作业
      ==========

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

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


    String的本质是字符char 常量,且作为字符数组,用来存储字符串,然后其被初始化后就不可被更改。

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

    其作用把char数组转换成String类的对象。

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

    public String replace(char oldChar, char newChar)此方法是返回 newChar 更换 oldChar 所有出现在此字符串中产生一个新的字符串。并未改变原来指向的字符串对象内容,而是生成新的对象。

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

     首先String是一个类,是字符串,简而言之,字符串就是String类型的,而字符数组是char类型的。String底层就是char数组,只是封装了许多新的功能,基本上char[]能实现的,String都能实现。然而有些String能实现的,char[]却无法实现。然而他俩最大区别就是cahr是基本数据类型,String是引用数据类型。虽然使用字符数组就可以处理字符串,但String中有很多相关函数,比如substring(),大大简化了我们所需要做的工作,所以说,String的功能很强大,运用也很灵活,同时还能简化我们的工作量。
    

    2.StringBuilder

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

    String的缺点是每次字符串变量的内容发生了改变时,都必须重新分配内存,同时String是不可变的,使用+操作符拼接,将会在内存中产生大量String对象,耗费大量时间、占用大量内存。String用来做字符串的连接时效率非常低,但并不是所任何情况下都要用StringBuilder,如果遇上很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。

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


    其功能是将 char 数组参数的字符串表示形式追加到此序列。
    StringBuilder内部是使用字符串数组来存放字符的。
    调用StringBuilderappend(char[] str)方法时是将 char 数组参数的字符串表示形式追加到此序列。按顺序将数组参数中的字符追加到此序列中。此字符将增加该参数的长度。该方法的最终效果与以下操作过程的效果相同:先使用 String.valueOf(char[]) 方法将参数转换为字符串,然后将所得字符串的字符追加到此字符序列。

    3.字符串与字符串池

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

    输出结果是true,因为直接使用双引号创建字符串,会在字符串常量池中创建字符对象,执行第一个语句String str1 ="hi",就在字符串常量池中创建一个"hi"。而如果已有则不创建直接复用,所以直接让str2指向"hi",此时str1==str2,所以输出为true。String str3 = new则是创建了一个新的空间,是一个新的对象。

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

    ==是用于比较两个引用类型变量存放的引用(可以说是地址)是否相等。对于引用类型来说,他们可能创建了多个新的字符串对象,虽然值相同,但是引用(地址)不同。这时候就需要用到equals,其使用方法是比较指向的对象的内容是否相等。

    4.Wrapper(包装类)

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

    这里的Integer是int的包装类,此时,这里的i存放的是指向对象的用,虽然100是基本数据类型,但自动装箱后,将基本类型转换为Integer类型。这就可以实现将100赋值给i。
    Integer x = 100; int y = x+1;x++;这段语句中,所含操作的顺序是:自动装箱、自动拆箱和先拆箱后装箱。

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

    我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

    ------[魅力降不住美丽的博客](http://blog.csdn.net/min996358312/article/details/62894674)

    5.实验总结

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


    不知道为啥,拍了好几张,电脑界面都是看不清,可能因为反光。
    a.我结对队友的姓名叫做张书阳,我们俩在讨论过程中,思路挺一致的,主要是听宿舍另一位大神的讲解,毕竟我们C语言基础有些薄弱,学起Java也有些难,大多情况下都是向舍友请教。
    b.个人认为,1+1真的能不能大于2,得看这两个人有没有真的想把这题努力做出来,而不是为了赶作业。若两个人都是为了作业而做作业,我想,每个人心里多多少少都会有些偷懒,比如,想着给你多做点儿,我会比较轻松一些,到时候借鉴你的一下,copy一下。然而,若是在平时,真正的没有任何要求,想要自己掌握好Java这门语言的话,这样的两个人,凑在一起,才能真正的实现1+1>2。我觉得,这是有利于自己编程水平的提高、有利于开拓思路,毕竟,以后若是以专业为工作道路,更不会自己一个人孤军奋战,而是你会拥有一个团队!在团队中实现合作共赢。

    5.2 PTA-1综合小测验

    首先用switch分成四部分进行选择
    1.采用递归实现fib函数。
    2.sort则需要用Arrays[]对数组进行升序排列。
    3.search需要int pos=Arrays.binarySearch(digits,digit);对数组进行查找。
    4.最后一个功能就需要用到StringBuilder和String.substring,进行拼接,提取。

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

    需要用到冒泡排序法,然后按照出生月份排序:使用SubString,按格式输出。

    5.4 PTA-4动态数组

    很明显需要动用到二维动态数组来存放乘法表,利用getDynamicMatrix然后按照要求输出。(由于当时C语言也有写过九九乘法表,所以,大概是借鉴C语言的模式来编写这段代码)

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

    这一题,大半时间我都是在查百度,查到电脑快炸了,很尴尬。ArrayList是动态数组,不同于普通数组的一经确定就无法修改,它动态的增删元素,更适合灵活运用。

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

    大整数相加:首先我看题目的意思有些出路,一早上都在搞这题,提交一直显示错误。后来,群里看到他们讨论,我才知道,曲解了题目的意思,此时此刻应该有一个捂脸的表情!里面要BigDecimal类型,然后做一些加法运算,最后输出。

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


    欠费,余额为-0.2元。哈哈哈,这个是当时新闻看过,然后我又去查了一下:

    交通卡余额突然变4000多万元,有时又变欠费近2000万元,真是瞬时富翁,瞬时“负翁”。上海交通卡公司表示这可能是卡内芯片有问题导致数据错误。而交通卡最多充值1000元,欠费最多8元,如遇数据错误,请寻求工作人员帮助。

    ----------[新闻](http://news.sina.com.cn/s/2013-03-18/063926561201.shtml)
    3. 码云及PTA

    3.1. 码云代码提交记录


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

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

    周次 总代码量 新增代码量 总文件数 新增文件数
    2 366 366 2 2
  • 相关阅读:
    通用应用程序设计
    咫尺与天涯
    SQL SERVER 自定义函数 split
    asp.net 页面实践执行顺序
    asp.net UpdatePanel 不能局部刷新问题汇总
    DataGrid GridView 单页javascript 表头排序
    存储过程分页方案
    数据库名、数据表名、字段名、主键、标识列相关查询
    c# web 缓存管理
    js笔记---拖动元素
  • 原文地址:https://www.cnblogs.com/jmu201621123082/p/7571740.html
Copyright © 2020-2023  润新知