20155313 2016-2017-2 《Java程序设计》第三周学习总结

教材学习内容总结

4.1 类与对象

4.1.1 定义类

书本中使用了设计衣服来定义类,一件衣服的设计Clothes定义了color和size两个变量,即java术语来说,叫作定义两个值域成员,或叫作定义了两个对象数据成员。在下面有具体实例运行。

具体编写步骤是:

  1. 定义Clothes类
  2. 建立Clothes实例
  3. 为个别对象的数据成员指定值
  4. 显示个别对象的数据或成员值

与此同时书本还介绍了另外一种定义构造函数。构造函数是与类名称同名的方法。下面也有具体实例运行。

具体编写步骤是:

  1. 定义Clothes类
  2. 定义构造函数
  3. color参数的值制定给这个对象的color成员
  4. 使用指定构造函数建立对象
  5. 显示个别对象的数据或成员值

以上的两种Clothes定义类的区别主要是:第一种方法在赋值前先建立了空的Clothes实例,然后在主函数里进行赋值操作;而第二种方法先在定义类的模块构造了函数,然后在后面的赋值中直接将对象代入函数完成赋值。

4.1.2 使用标准类

1.使用java.util.Scanner

在此小节中本书第一次出现了让用户进行输入,之前在学习c语言时,每个程序在运行时基本都需要用户进行输入,再根据程序内容计算然后反馈给用户(除了一些显示图表的程序,例如:显示杨辉三角、九九乘法表)。在这里用户可以直接再ieda下方的程序框中输入。下面有猜数字的具体实例。

这个java.util.Scanner是一个标准类,是组成Java SE提供的标准API的许多种类之一。由于是系统自带的内容,所以在程序中可以直接使用,不需要像上一节的Clothes一样去定义。

2.使用java.math.BigDecimal

第二种基本类型中使用1.0 - 0.8的结果不是2是因为Java遵守IEEE 754浮点数运算规范,使用分数与指数来表示浮点数,所以导致有无限循环,无法精确表示,因而造成运算误差。本节就使用了一个标准类java.math.BigDecimal来解决,以默认的精度进行运算。下面是1.0 - 0.8的实例运行。

4.1.3 对象指定与相等性

Java并非完全的面向对象程序语言,在Java中有两大类型系统,即基本类型与类类型,所以必须区分=与==运算用于基本类型与类类型的不同。

当=用于基本类型时,是将值赋值给变量,当==用于基本类型时,是比较两个变量储存的值是否相同。

int a = 28;
int b = 22;
int c = a;
System.out.println(a == b);    //判断a与b是否相等,这里显示False
System.out.println(a == c);    //判断a与c是否相等,这里显示True

当=用于对象时,是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。

BigDecimal a = new BigDecimal("0.1");    //给a赋值0.1,即把a标签贴给"0.1"
BigDecimal b = new BigDecimal("0.2");    //给b赋值0.1,即把b标签贴给"0.1",此"0.1"非彼"0.1"
System.out.println(a == b);    //判断a与b是否绑在同一个对象上,结果是False
System.out.println(a.equal(b));    //判断a与b的赋值是否相等,结果是True

PS:这里其实还是有一点搞不清楚,即两个"0.1"为什么能区别是不同的对象,因为定义的顺序不一样吗?

4.2 基本类型打包器

4.2.1 打包基本类型

Java中有两个类型系统,即基本类型与类类型,使用基本类型目的在于效率,然而更多时候,会使用类建立实例,因为对象本身可以携带更多信息。如果要让基本类型像对象一样操作,可以使用Long、Integer、Double、Float、Boolean、Byte等类来打包(Wrap)基本类型。具体实例如下。

具体编写步骤是:

  1. 打包基本类型
  2. 基本类型运算
  3. 操作打包器方法

这个程序中有两个操作:doubleValue()将打包值以double类型返回,以及compareTo()与另外一个对象进行对比。这些都是包含在Integer中的方法,在打包器中可以直接使用。

4.2.2 自动装箱、拆箱

J2SE 5.0以后Java提供了自动装箱和自动拆箱功能。所以可以这样打包基本类型和取出打包器中的基本形态信息:

Integer wrapper = 10;    //自动装箱
int foo = wrapper;    //自动拆箱

4.3 数组对象

4.3.1 数组基础

数组在Java中就是对象,所以前面介绍过的对象基本性质,在操作数组时也要注意,如参考名称声明、=指定的作用、==与!=的比较等。在Java中如果想要一次取出数组中每个值,方法之一是使用for循环。下面是具体实例。

一维数组使用一个索引存取数组元素,你也可以声明二维数组,二维数组使用两个索引存取数组元素。下面是具体实例。

关于数组的表示,感觉java语言和以前学的c语言有很多的共同之处,除了显示主函数、打印的代码不同之外,个人感觉很是十分相似的。

4.3.2 操作数组对象

如果在建立数组前不知道元素值,只知道元素的个数,那可以使用new关键词指定长度来建立数组。例如,预先建立长度为10的数组:

int[] scores = new int[10];

在Java中只要看到new,一定就是建立对象,这个语法代表了数组就是对象。使用new建立数组后,每个索引元素会有默认值,如下表所示:

数组元素初始值
数据类型 初始值
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
char \u0000
boolean false
null

下面是使用java.util.Arrays(即一种标准类,之前在类的感念中有涉及)中的fill()的方法来设定新建数组的元素值。例如,将每个学生的成绩默认为60分起:

如果想在new数组中一并指定初始值,可以这样撰写:

int[] scores = new int[] {88, 81, 74, 68, 78, 76, 77, 85, 95, 93};

如果使用new配置二维数组后想要一并指定初始值,则可以这样撰写:

int[][] cords new int[][] {{1, 2, 3},{4, 5, 6}
};

没有人规定二维数组一定得是矩阵,也可以按照下面的方法建立不规则数组:

以上都是示范基本类型建立的数组,接下来介绍类类型建立的数组。下面是使用new关键词建立Integer数组:

Integer[] scores = new Integer[3];

4.3.3 数组复制

如果要进行数组的复制,按照学习c语言的思路,在java中也同样适用。例如:

int[] score1 = {1, 2, 3, 4, 5};
int[] score2 = new int[score1.length];
for(int i = 0; i < score); i++) {score2[i] = score1[i];
}

但是java比c语言更高级的地方就是java内部有更多可以直接使用的函数,比如这里可以使用的System.arraycopy()方法,这个方法会使用yuan原生方式复制每个索引元素,比自行使用循环来得快:

int[] score1 = {1, 2, 3, 4, 5};
int[] score2 = new int[score1.length];
System.arraycopy(scores1, 0, scores2, 0, scores1.length);

同时书本还介绍了更方便得方法Arrays.copyOf()方法,可以不用零星建立新数组,Arrays.copyOf()会帮你建立。

4.4 字符串对象

4.41 字符串基础

在Java中,字符串是java.lang.String实例,用来打包字符数组。可以用""包括一串字符来建立字符串:

String name = "justin";
System.out.println(name);    //显示justin
System.out.println(name.length());    //显示字符串长度为6
System.out.println(name.charAt(0));    //显示第一个字符j
System.out.println(name.toUpperCase());    //显示JUSTIN

如果要将字符串转换为整数、浮点数等基本类型,可以使用下面表中类提供的剖析方法。

将字符串剖析为基本类型
方法 说明
Byte.parseByte(number) 将number剖析为byte整数
Short.parseShort(number) 将number剖析为Short整数
Integer.parseInteger(number) 将number剖析为Inte整数
Long.parseLong(number) 将number剖析为Long整数
Float.parseFloat(number) 将number剖析为Float浮点数
Double.parseDouble(number) 将number剖析为Double浮点数

下面这个实例可以让用户输入整数,输入后会计算所有整数总和并显示:

这个程序中使用了之前章节提到过的import java.util.Scanner,即可以输入数据的标准类。

4.2.2 字符串特性

以Java的字符串来说,就有一些必须注意的特性:

  • 字符串常量与字符串池
  • 不可变动字符串
1.字符串常量与字符串池

如果像比较对象实质内容是否相同,不要使用==,要使用 equal()。同样地,如果想要比较字符串实际字符内容知否相同,不要使用==,要使用 equal()。下面的程序片段执行结果都是true:

String name1 = "Justin";
String name2 = "Justin";
String name3 = new String("Justin");
String name4 = new String("Justin");
System.out.println(name1.equals(name2));
System.out.println(name1.equals(name3));
System.out.println(name3.equals(name4));
2.不可变动字符串

在Java中,字符串对象一旦建立,就无法更改对象中任何内容,对象上没有任何方法可以更改字符串内容。但是可以使用+连接字符串。例如:

String name1 = "Java";
String name2 = name1 + "World";
System.out.println(name2);

运行的结果就会显示JavaWorld。

对象封装

public为公开类,在构造函数上声明public class{}表示其他包中的类可以调用这个构造函数,private定义私有数据类型。用在成员变量前private class{}。

构造函数:在定义类时,可以使用构造函数定义对象建立的初始流程。构造函数是与类名称同名,无需声明返回类型的方法。示例:

class name{int a=0;String strs;name(int a,String strs){this.a=a;this.strs=strs;}
}

重载构造函数: 可以定义多个构造函数,只要参数类型不同或者个数不同。

public class name {int a=1;String strs ="strs";public name(int a){if(a>0){this.a=a;}}public name(int a ,String strs ){if(a>0){this.a=a;}if(strs !=null){this.strs=java;}}
}

static类成员被声明为static的成员,不会让个别对象拥有,而属于类。在static方法或区块中,不能出现this关键字。static方法中不能使用非static数据或方法成员。

不定长度自变量
int...声明的变量实际上展开为数组;在使用不定长度自变量时,必须是参数列中的最后一个,使用两个以上不定长度自变量也是不合法的,使用对象的不定长度自变量不能和方法相同。

代码托管

  • 代码提交过程截图:

    • 运行 git log --pretty=format:"%h - %an, %cd : %s" 并截图
  • 代码量截图:
    • 运行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 并截图

上周考试错题总结

  • 填空:Linux Bash中,查找当前目录中前天创建的Java文件的命令是(find . –name *.java -ctime 2)。
  • 判断: Java中, 数字235 的类型是 int 。(OK)
  • 填空:~0b1011的十进制值是(-12)
  • 判断:System.out.printf("%b", 11)的输出结果是0b1011 (X)
  • 判断:Java中,非零数字等价于true.(X)
  • 填空 :0x10%9 的结果是( 7 )
  • 填空 :0x10&9 的结果是( 0 )
  • 填空:运行p69 Odd.class的命令为(java cc.openhome.Odd)。
  • 填空:编译p60 Comparison.java的命令为(javc –d xxx Comparison.java )
  • 判断:P64 Shift.java中第三个printf的输出结果是”2的2次方:4”。(X)

学习进度条

代码行数(新增积) 博客量(新增积) 学习时间(新增积) 重要成长
目标 5000行 30篇 400小时
第三周 168/200 1/2 15/20
  • 计划学习时间:20小时

  • 实际学习时间:15小时

参考资料

  • Java学习笔记(第8版)

  • 《Java学习笔记(第8版)》学习指导

转载于:https://www.cnblogs.com/bonsai/p/6540203.html

20155313 2016-2017-2 《Java程序设计》第三周学习总结相关推荐

  1. 20155313 2016-2017-2 《Java程序设计》第二周学习总结

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  2. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

  3. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  4. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

  5. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  6. 20175208 《Java程序设计》第九周学习总结

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  7. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  8. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

  9. 20165203 2017-2018-2 《Java程序设计》第一周学习总结

    20165203 2017-2018-2<Java程序设计>第一周学习总结 教材学习内容总结 (一)Java的地位 Java是面向对象编程,并涉及网络.多线程等重要的基础知识,是一门很好的 ...

  10. 20175221 2018-2019-2 《Java程序设计》第一周学习总结

    20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...

最新文章

  1. void函数返回值_(*void(*)()0)() 是什么
  2. 2010-08-22 动漫店 员工卡缓存出现问题。
  3. 有一天人人都会变成程序猿
  4. python中自动化办公 【笔记】
  5. C++学习——类的初始化
  6. Java全能手册火了!Redis/Nginx/Dubbo/Spring全家桶啥都有!
  7. n1运行linux,斐讯 N1 运行 ArchLinuxARM
  8. Castle ActiveRecord学习实践(6):延迟加载和使用Where子句
  9. 【计算机网络】许多信道不能传输低频、直流分量的原因
  10. Flink Table和SQL的基本API
  11. 如何让Mac电脑在Finder窗口顶部显示文件路径?
  12. SVN删除或新建(添加)文件
  13. Java 分布式框架面试题合集
  14. 联想全系列 Lenovo ThinkPad ThinkBook Thinkcenter ThinkStation 原厂恢复系统
  15. 批量解析域名为IP地址的shell脚本和python脚本
  16. 【翻译辅助】开源CAT翻译辅助软件OmegaT协同翻译
  17. java实现下载并选择保存路径
  18. 模版之AnyType
  19. clo6|clo standalone 6(3D服装设计软件) v6.0.328.32100
  20. Java实现发送邮件并携带附件

热门文章

  1. Firefox将以HTTP明文发送密码的网站标注为不安全
  2. Python 基础练习
  3. android开发环境搭建(ubuntu15.04+jdk8+eclipse+android sdk)
  4. 企业邮箱自建,该如何选型测试
  5. SVN 提交出错:Attempted to lock an already-locked dir
  6. 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换
  7. 数据库性能优化—数据库连接池
  8. flutter web:lottie jssdk报错处理
  9. tensorflow--卷积神经网络
  10. swiper轮播后hover无效问题解决案例