zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SP笔记:交叉实现七行并成一行
    HTML tag 学习
    操作哈希表
    Efficient bipedal robots based on passivedynamic walkers
    Pushing People Around
    ZEROMOMENT PONTTHIRTY FIVE YEARS OF ITS LIFE

    Active Learning for RealTime Motion Controllers
    Accelerometerbased User Interfaces for the Control of a Physically Simulated Character
    Dynamic Response for Motion Capture Animation
  • 原文地址:https://www.cnblogs.com/jmu201621123082/p/7571740.html
Copyright © 2011-2022 走看看