20145307《Java程序设计》第三周学习总结
教材学习内容总结
认识对象
类类型 Java可区分为基本类型和类类型两大类型系统,其中类类型也称为参考类型。sun就是一个类类型变量,类类型变量指向的是对象。
类与对象 类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象是类的实例。我觉得在视频中对类与对象关系的描述更加形象,它说类是对现实生活中事物的描述,而对象就是这类事物,它是实实在在存在的个体。
类在定义时要使用关键词class,而具体对象就是对应java在堆内存中用new建立的实体。 在Java中,为个别对象的数据成员指定值的方式是:对象.对象成员 在一个java文档中可以有多个类,当类只需要描述一个事物,而不需要独立运行的时候,是不用写主函数的.
标准类API
java.util.Scanner
类:java.util.Scanner的nextInt()
方法会看看标准输入中,有没有输入下一个字符串,有的话会尝试将之剖析为int类型,其它的nextByte()
、nextShort()
等作用都类似。如果直接取得上一个字符串,则使用next(),如果想取得用户输入的整行文字,则使用nextLine()
,总而言之Scanner
类大大简化了Java的输入。 java.math.BigDecimal
类:使用分数与指数来表示浮点数,这样就导致无法精确的进行运算,从而造成运算上的误差,且不能用==直接比较浮点数运算结果,所以我们可以使用BigDecimal
类来得到想要的精确度。
对象指定与相等性
在基本类型中,=是将值复制给变量,而==是比较两个变量储存的值是否相同。如果是在操作对象时,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。 equals是逻辑上相等,equals()
和==是不一样的。
基本类型包装
为了让Java 基本类型像对象一样操作,可以使用Long
、Integer
、Double
、Float
、Boolean
、Byte
等类来打包基本类型,这些类就是所谓的打包器。
数组对象
数组在Java中就是对象,Java会检查数组的边界,一旦越界就会抛出ArrayIndexOutOfBoundsException
的错误,所以在Java中,数组一旦建立,其长度就已经固定了,这一点也是和C语言所不同的地方。 在Java中可以使用System.arraycopy()
的方法来进行数组值的复制,它会使用原生方式复制每个索引元素,比使用循环更快。在JDK6以上的版本中,还有个更方便的Arrays.copyOf()
的方法,能够帮你建立新的数组。无论System.arraycopy()
还是Arrays.copyOf()
,用在类类型声明的数组时,都是执行浅层复制。
字符串对象
字符串本质是打包字符数组的对象,是java.lang.String
类的实例。 要想比较字符串实际字符内容是否相同,不能使用==,要用equals()
,这一点前面也提到了。 字符串对象一旦建立,就无法更改对象中的内容,使用+会产生新的String
实例,不要将+用在重复性的连接场合。 使用javac指令没有指定-encoding
选项时,会使用操作系统默认编码。
对象封装
封装 封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式,其目的主要就是隐藏对象细节,将对象当作黑箱进行操作。
this
关键字 this
代表其所在函数所属对象的引用,简而言之就是this
代本类对象的引用,当在函数内需要用到调用该函数的对象时,我们就可以使用this
。 this()
代表了调用另一个构造函数,至于调用哪个构造函数,则视调用this()
时给的自变量类型与个数而定。
static
关键字 static
用于修饰成员,被声明为static
的成员,不会让个别对象拥有,而是属于类。 在static
方法中不能出现this
关键字,static
方法中不能用非static
数据或方法成员。import static
语法是为了偷懒,但要注意名称冲突的问题。
教材学习中的问题和解决过程
关于BigDecimal
的精度问题 这种import
引用虽然精度高,但因为存在无限循环小数的原因会让循环结构导致程序垮掉,所以还是要用语句让小数点后固定一定的数字。
关于数组内写入数据后循环结构在printf
的时候会出现不定对象使结构崩溃的现象。掉换顺序定制数组数目就好了。
心得体会
编程中要多思考,不要仅仅的只会敲打验证书上的代码啊,打字谁都会,编程不是比谁打字快,谁打的多,而是看谁理解扩展的更多,这是我这周学到的东西。