zoukankan      html  css  js  c++  java
  • 201621123037《Java程序设计》第二周学习总结

    Week02-Java基本语法与类库


    1. 本周学习总结

    • 关键词:常量池、对象、null、不可变性、string对象拼接、字符串池
    • 关键概念之间的联系:Java中有常量池,超出常量池以外的就会新开辟内存空间。如String x="abc";x不是存放"abc",而是指向它的对象。比较特殊的null这个在Java中不等同于0,代表没有值。Java中String类具有不可变性,如果不停地进行字符拼接来修改字符串时,每次更改后的字符串是一个新的面向对象,而原来的字符串不会消失仍占用内存空间(系统可以定时清除占用空间),所以用String来频繁修改字符串时会占用大量空间,故当字符拼接操作量大的时候,则应运用StringBuilder来进行拼接。被“”包裹起来的字符串字面常亮会先在字符串常量池中进行查找,如果有则不创建。

    2. 书面作业

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

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

    答:String使用存放变量,但对象本身不存放在栈中,而是存放在或者常量池中(字符串常量对象存也放在常量池中)。其中的堆使用new得出的对象,常量池是在堆中开辟的一块区域存放基本常量。String用char[]数组存储字符串,不过没办法动态增加数组长度。

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

    答:函数输入的参数为字符数组类型,通过函数内的运算之后,输出返回值,返回值类型为字符串类型。

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

    public String replace(char oldChar, char newChar)方法的代码如下:

    答:由于String的不可变性,字符串拼接的话将会占用大量内存空间。所以代码中创建和原来字符数组一样大小的buf数组,改成对数组的改变。

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

    答:String初始化创建的字符串常量被定义为只读,也就是说没办法对定义后的字符串进行修改;而字符串数组存放的是若干个元素,是可以对单个字符进行修改的。在大部分情况下String和字符数组可以互换使用,但是若要修改字符元素,则不能用String。虽然字符数组很灵活,但是String可以加快字符串处理速度。

    2.StringBuilder

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

    答:
    由于String具有不可变性,如果不停地进行字符拼接来修改字符串时,每次更改后的字符串是一个新的面向对象,而原来的字符串不会消失仍占用内存空间(系统可以定时清除占用空间),所以用String来频繁修改字符串时会占用大量空间,故当字符拼接操作量大的时候,则应运用StringBuilder来进行拼接。

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

    ava.lang.StringBuffer.append(char[] str) 方法追加char数组,即str参数为这个序列的字符串表示形式。数组参数的字符追加的顺序到这个序列的内容。这个序列以该参数的长度增加它的长度。

    答:StringBuilder的内部使用字符数组来实现的,数组可以进行动态扩展。当输入字符后,先存放到缓冲区中,然后转换成字符数组添加到StringBuilder中。

    3.字符串与字符串池

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

    String str1 ="hi", str2="hi"; String str3 = new String(str1) System.out.println(str1==str2);
    答:
    输出结果为true,创建了两个对象。首先初始化str1时创建"hi"常量字符串放入到常量池中,当再创建str2时,则会优先在常量池中搜索,若搜索到则指向相同的对象,若未搜索到就创建放常量池中。而str3则是直接在内存开辟空间创建对象。所以上述的str1和str2指向的是同一个面向对象,所以答案为true.

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

    答:
    比较的"=="是用来比较两个变量本身的值,即两个对象在内存中的首地址。而引用类型new创建的话,则会出现内容相同但是地址不同的状况。若想要比较,可以用“equals()”比较字符串中所包含的内容是否相同。

    4.Wrapper(包装类)

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

    答:
    Integer i = 100; 自动装箱,基本类型->Integer类型
    Integer x = 100; int y = x+1;x++;包含了 自动装箱(100转换成Integer类型);然后自动拆箱将Integer类型转换为int类型;最后是自动拆箱(Integer类型转换为int类型)后加一再自动装箱回Integer类型。

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

    答:
    因为在实际生活中,很多问题不单单是一个基本数据类型可以解决,当输入端错误或空时,基本数据无法表示这种状况,而包装类中可以很好的表示出来。加之基本数据类型之间的转换比较麻烦,定义包装类可以更加方便,解决问题更加全面。

    5.实验总结

    5.1 结对编程实践:使用结对编程的方式完成本周编程题目,即两个人同时合作完成实验题目(可1题也可多题,但最好是是两个人都没做过的题目)。

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

    合作对象:姚雯婷
    答:关于结队编程这个,最开始有和舍友尝试一起写一道题,但是在我们一同审题判断时,产生很大分歧,两个人思路差异有点大,然后我们就两个互相尝试自己的办法打代码,不过这样的话后面就没办法交流了,最后都是各自解决问题,最多在格式上有所互助。所以感觉结队代码的方式应该比较适合两个人打完之后交流,或者在更改格式啊或者小地方进行交流,不然的话是没办法进行互助交流的。

    5.2 PTA-1综合小测验

    答:
    这道题四大部分:

    • fib部分主要是编写 斐波那契数列,只要会编写函数很好解决;
    • sort部分则需要用String[] str1=input.nextLine().split(" ");来创建数组,达到分离的目的。再将转换成int类型进行排序,后输出。这道题的关键是输出格式,原先采用自己打的方式一直报错,后来发现Arrays.toString(num)可以输出要求格式。不过到现在也不太明白之前的输出格式有什么错误。

    System.out.print("[");
    for (j= 0; j<num.length; j++) {
    if(j==0) {
    System.out.print(num[j]);
    }
    else {
    System.out.print(", "+num[j]);
    }
    }
    System.out.print("]");

    • 关于search部分,只要学会创建静态变量,将sort中的数组定义为全局变量就可以完成。
    • getBirthDate,重点学会str.substring(start,end)函数的应用。

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

    答:
    这道题的sort1和上一题差不多,比较好些。重点是sort2部分,刚开始百度想用Array.sort(类型,start,end)函数进行总排序,后来发现存入信息的id数组相当于一维数组下的字符串数组,没办法这么应用。之后在实验课上听讲到用冒泡法进行排序,这样需要改变顺序的时候整个id数组交换即可。

    5.4 PTA-4动态数组

    答:
    这道题需要搞清楚每一行和数组下标的关系,在双层for循环中,如果i,j从一开始,则对应的下标应该减一。并且应该注意一行末尾最后一次打印应该不同。

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

    答:
    加上头import java.util.ArrayList;
    首先学会创建ArrayList list = new ArrayList();(String)则是拿出来的时候为字符串类型。
    这道题主要学会以下函数即可:
    ch.contains("!!end!!")
    list.add(0, "begin");
    list.indexOf(str1)
    list.lastIndexOf(str1)
    list.get(0)
    list.remove(0)
    size()与isEmpty()

    ArrayList是动态数组,有以下好处:
    (1)动态的增加和减少元素
    (2)灵活的设置数组的大小

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

    5-5:本题主要运用BigDecimal类,开头加入import java.math.BigDecimal;,创建使用BigDecimal d = new BigDecimal(b); 和 函数 a.add(d); 进行精确计算即可。

    5-6:本题运用枚举方法
    ,主要将构建代码块Grade getGrade(int score)在外定义,主要要掌握枚举的格式。后面引用switch语句就可以了。

    5-7:本题用到大数字操作类中的BigInteger类,注意的是定义sum初值为0应该定义方式如下:
    BigInteger sum=new BigInteger("0");
    运用a.equalsIgnoreCase("e")函数进行E和e的判断。后运用sum.add();即可完成相加操作。

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

    答:计算机底层进行浮点数运算的时候出现了溢出问题,也就是说有符号的负数变成了无符号的极大地正数,故卡中应该是欠费的。

    7.1 尝试用命令行进行编译并运行,截图

    在edu.jmu包中编写Main类,其中掉了com.ibm.StringUtil的foo1方法


    7.2 将生成的StringUtil.class放到d:lib下正确的目录结构下,将Main.class放到d: est下正确的目录结构,尝试在命令行下运行,并截图。

    7.3 Eclipse中自己编写的源代码放在哪个目录、class文件放在哪个目录(给出绝对目录)?在Eclipse项目中按一下Ctrl+F11就可以直接运行Main,当按下Ctrl+F11时,到底在哪个目录下执行了什么样的java命令?

    源代码在:src目录下
    字节码文件在:bin目录下
    运行时,在bin目录下编译.class文件输出。

    3. 码云及PTA

    3.1. 码云代码提交记录

    在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图

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


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

    行数 新增行数 文件数 新增文件数
    233 233 6 6

    注意:请使用学姐更新的1.0版,使用新版前请先删除以前information.txt

  • 相关阅读:
    DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting
    DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)
    DVWA 黑客攻防演练(八)SQL 注入 SQL Injection
    DVWA 黑客攻防演练(七)Weak Session IDs
    DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA
    DVWA 黑客攻防演练(五)文件上传漏洞 File Upload
    工作流表结构设计
    Visual Studio 2019尝鲜----新建空项目体验
    《使用CSLA 2019:CSLA .NET概述》原版和机译文档下载
    .NET快速开发平台的在线预览
  • 原文地址:https://www.cnblogs.com/qin-yu/p/7579342.html
Copyright © 2011-2022 走看看