20155313 2016-2017-2 《Java程序设计》第三周学习总结
20155313 2016-2017-2 《Java程序设计》第三周学习总结
教材学习内容总结
4.1 类与对象
4.1.1 定义类
书本中使用了设计衣服来定义类,一件衣服的设计Clothes定义了color和size两个变量,即java术语来说,叫作定义两个值域成员,或叫作定义了两个对象数据成员。在下面有具体实例运行。
具体编写步骤是:
- 定义Clothes类
- 建立Clothes实例
- 为个别对象的数据成员指定值
- 显示个别对象的数据或成员值
与此同时书本还介绍了另外一种定义构造函数。构造函数是与类名称同名的方法。下面也有具体实例运行。
具体编写步骤是:
- 定义Clothes类
- 定义构造函数
- color参数的值制定给这个对象的color成员
- 使用指定构造函数建立对象
- 显示个别对象的数据或成员值
以上的两种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)基本类型。具体实例如下。
具体编写步骤是:
- 打包基本类型
- 基本类型运算
- 操作打包器方法
这个程序中有两个操作: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 并截图
- 运行 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小时
参考资料
20155313 2016-2017-2 《Java程序设计》第三周学习总结的更多相关文章
- Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- 20155313 2016-2017-2 《Java程序设计》第九周学习总结
20155313 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 JDBC(Java DataBase Connectivity)即java数据库连 ...
- 20155313 2016-2017-2 《Java程序设计》第二周学习总结
20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...
- 20155313 2016-2017-2 《Java程序设计》第一周学习总结
20155313 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周的Java学习进入了一个全新的阶段,对于我这样的并没有每天花费时间钻研的同学来说,最后几 ...
- 20155220 2016-2017-2 《Java程序设计》第九周学习总结
20155220 2016-2017-2<Java程序设计>第九周学习总结 教材学习内容总结 JDBC(Java DataBase Connectivity)即java数据库连接,是一种用 ...
- 20155211 2016-2017-2 《Java程序设计》第九周学习总结
20155211 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 一.JDBC入门 (一)JDBC简介 厂商在操作JDBC驱动程序时,依 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
随机推荐
- canvas小球 时间倒计时demo-优化
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- [CTSC2018]假面
题目 先来考虑一下第一问,血量有\(P\)的概率减\(1\) 由于我们最后需要求每一个人的期望血量,于是考虑维护出每个人处于不同血量时候的概率 一个简单\(dp\)即可 \[dp_{i,j}=dp_{ ...
- 【小M的作物】
这是一道我好像没写过的最小割 这道题如果没有那\(m\)条限制,我们完全可以贪心来做 但是硬要用网络流怎么办 可以转化为最小割模型 我们将源点\(S\)表示为耕地\(A\),汇点\(T\)表示为耕地\ ...
- C++内存总结——开坑,随时总结添加
C++内存区域分为: 程序代码区:存储程序代码的地方 栈区:编译器自动管理(分配释放)的内存区域,如函数参数,函数中的局部变量 堆区(又称动态存储区):由C语言中的函数malloc和free和C++ ...
- PAT——1075. 链表元素分类(25)
给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→ ...
- ListView 中的TextView实现跑马灯效果
案例:怎么样在一个ListView中含有TextView的item中实现字母滚动呢.这个在一些特定的场合经常用得到.如下图,当焦点位于某个item的时候其内容就自动滚动显示 要实现这样的效果,废话不多 ...
- ibatis运行的SQL语句的输出——通过配置log4j
将ibatis 的log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句 ### 设置Logger输出级别和输出目的地 ###log4j.rootLogger=debug,st ...
- 『ACM C++』 PTA 天梯赛练习集L1 | 029-033
哈哈,今天开始我也是学车人了~ 开始一千多道疯狂刷题~ ------------------------------------------------L1-029------------------ ...
- Bootstrap01
Bootstrap01内容概要 一.使用Bootstrap的步骤 1.下载Bootstrap类库,包含三个部分,fonts,css,Bootstrap 2.导入项目中,在头部引入JQ,css和Boot ...
- Linux下Tomcat性能优化--文件句柄数增大
今天在对项目进行性能压力测试时,设置并发量为1000,发现Tomcat控制报错: java.IOException:打开的文件过多 经搜索,发现是由于Linux默认设置的句柄数为1024,当并发量过大 ...