zoukankan      html  css  js  c++  java
  • 20145314郑凯杰 《Java程序设计》第3周学习总结

    20145314郑凯杰 《Java程序设计》第3周学习总结

    所有代码均已托管

    地址https://git.oschina.net/qiaokeli26/codes

    按照下面程序结果中的代码名来对应即可。

    教材学习内容总结

    1、定义类

    1. 按照书上的形象比喻,知道的关系是:类是对象的设计图,对象是类的实际类型。另外,定义时用class,建实例用new。

    这里引用书上的一段代码来理解:

    class Clothes 
    {
    String color;
    char size;
    }
    public class Field
    {
    public static void main(String[] args)
    {
    Clothes sun = new Clothes();
    Clothes spring = new Clothes();
    
    sun.color = "red";
    sun.size = 'S';
    spring.color = "green";
    spring.size = 'M';
    System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
    System.out.printf("spring(%s,%c)%n",spring.color,spring.size);}
    }
    

    这里,sun就是一个类类型变量,类类型变量指向的是对象。
    运行结果1:

    1. this关键字的使用:参考名称与对象数据成员同名时,可以在数据成员前使用this区别。

    也是用一个书上的例子,代码托管上去,这里只给出运行结果2:

    2、标准类

    1、java.util.Scanner、java.math.BigDecimal分别为两个基本标准类。

    java.util.Scanner的nextInt()方法会看标准输入中,录入下一个字符串,并会尝试将之剖析为int类。一旦直接取得上一个字符串,则使用next()。nextLine()这是一个更加方便的功能,直接取得用户输入的整行文字,类似于C中的gets和getc之间的关系。

    另外,还有nextByte()、nextShort()之类的功能也是以此类推的。

    接下来也用书上的例子进行练习:

    同上,代码托管,给运行结果3-1,3-2(中间尝试了很久,爆炸):

    2、java.math.BigDecimal则为更加精确的精度。实验截图如下(代码已托管),运行结果4:

    用BigDecimal比较相等时,先调用add(),最后调用equals()比较两个BigDecimal实质上是否相同。

    运行结果5如下:

    2、基本类型打包器

    Long、Integer、Double、Float、Boolean等,就是所谓的打包器。其主要目的是提供对象实例作为“壳”,将基本类型打包在对象之中,就可以将基本类型当作对象操作。书上的简单练习例子如下:

    运行结果6:

    这里出现了一个问题,当decimal类型进行devide运算时,出现了报错问题(陈俊达在上课时问过老师)。老师给出的回复是,在输出语句时还可以加上一定的后缀(一些精度信息)从而才能输出正确的值。

    3、数组

    1、数组的基本使用

    与C中一样,数组的概念一样只是出现了使用方式上的不同,采用先后两个数组录入。

    2、操作数组对象

    截图如下(运行结果7):

    3、数组复制

    首先,再建立一个数组,再对这个数组进行转移,就是一个简单的方法。另外,还可以使用arrays.copyOf():

    马上就使用这个函数进行练习:

    结果如下(运行结果8):

    值得一提的是arrays.copyOf()和System.arraycopy()用在类类型声明的数组时,都是浅层复制。而什么是深层复制呢,arrays.copyOf()的第二个参数,实际上就是指定建立的新数组长度。以范例来分析深层复制:

    运行结果9:

    4、字符串

    字符串使用java.lang.String实例,用来打包字符数组。

    可以使用length()取得字符串长度。

    另外还可以使用charAt()指定取得字符串中某个字符,使用toUppercase()将原本小写的字符串内容转为大写。

    书上实例oneto100

    截图如下(运行结果9):

    接下来用另外两个实例继续熟悉一下字符串的用法:

    运行结果10:

    运行结果11:

    至此,第四章内容结束,接下来直接总结下第五章的内容,再附上程序截图:

    1、封装

    封装即要隐藏对象细节,直接使用对象而忽略不重要因素。

    2、构造函数

    首先,函数名与类名必须相同。接着,我们知道返回值类型将与前边一致,就可以忽略不定义。

    3、this

    this代表了其所在函数所属对象的引用。

    4、static

    被声明为static的成员,不会让个别对象拥有,而是属于类,将类名称作为名称空间。在static方法或区块中不能出现this关键字。

    接下来跑几个书上的实用范例

    一、构造函数与方法重载

    运行截图(运行结果12):

    二、运行结果13:

    教材学习中的问题和解决过程

    这次学习时,遇到一个问题,浮点类型能不能用 == 进行比较,只知道尽量不要使用 == 对浮点数进行比较。我对这个问题比较好奇,因为当时C语言的时候没有深入探究过,今天就好好研究一次。

    首先我们要了解浮点数在计算机中怎么存放的。我百度了一下,上面是这样说的,浮点数普遍的作为实数运算的近似值的计算,是很有用的。

    这里说的是实数的近似值的计算,所以浮点数在计算机中其实是一种不精确的表示。它存在舍入(rounding)误差。IEEE浮点标准用符号,尾数和阶码将浮点数的位表示划分为三个字段,单精度为32位,双精度为64位,因为表示方法限制了浮点数的范围和精度,浮点运算只能近似的表示实数运算。而 == 表示的是在计算机中的内存表示完全一样,这样使用 == 来表示两个浮点数的相等就会出现问题了。

    代码调试中的问题和解决过程

    本次我没有编写自己的代码,都是模仿书上的代码。但是我看见了陈俊达同学所改进的一次代码。即用decimal类型进行devide。结果4除以3,结果无法显示出来。

    后来询问过老师后发现,输出时还需要加一个括号,括号中将录入一定的精度,从而才能完成显示。但这种方式实用性不高,这边就不再深究了。

    其他(感悟、思考等,可选)

    本章内容多,而且专业性强,学起来很费力。所以本次我就没有在书本例子的基础上进行创新。

    但是,本次将录入数组,检索等方法都教过了,我可以凭借数据结构的算法,自己编写一些排序的代码了。

    下周一定要完成这样的的程序!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 50/50 1/2 20/20
    第二周 600/600 2/4 38/38
    第三周 276/600 1/7 60/60
    第四周 /1300 2/9 /90

    参考资料

  • 相关阅读:
    node-webkit 不支持html5_video播放mp4的解决方法
    node-webkit(Windows系统) 打包成exe文件后,被360杀毒软件误报木马的解决方法
    剑指 Offer 36. 二叉搜索树与双向链表
    剑指 Offer 33. 二叉搜索树的后序遍历序列
    Leetcode96. 不同的二叉搜索树
    Leetcode95. 不同的二叉搜索树 II
    leetcode1493. 删掉一个元素以后全为 1 的最长子数组
    Leetcode1052. 爱生气的书店老板
    Leetcode92. 反转链表 II
    Leetcode495. 提莫攻击
  • 原文地址:https://www.cnblogs.com/5314zkj/p/5297747.html
Copyright © 2011-2022 走看看