期末总结
一,课程内容总结
绪论
本章为绪论,主要介绍:
JAVA程序设计语言
程序编译运行步骤
理解问题求解的一般方法
软件开发的一般过程
面向对象技术相关概念
JAVA程序设计语言
类定义: public class XXX{};
main方法的定义是固定的,只有以下一种形式:
public static void main(String [] args){/*这里加内容*/}
注释://单行注释,到行末
/* 多行注释 */到*/截止
标志符和保留字
常见的标识符有:class、public、static、void、main、String、args、System、out、println......我们命名的在程序中使用的标识符可以由任意字母、数字、下划线和美元符号组成,但不能以数字开头。
常见的保留字有:package、this、do、if、throw、boolean、double、protected、else、import......
程序编译运行步骤
程序设计语言:机器语言,汇编语言,高级语言,第四代语言
1.3理解问题求解的一般方法
理解问题
设计方案
考虑方案的选择并优化方案
实现方案
测试方案并修改存在的问题
软件开发的一般过程
四个基本的开发行为:
建立需求:做什么?
生成设计:如何做?
实现设计:设计到代码
测试:做对没?
三种代码
伪代码
产品代码
测试代码
1.5面向对象相关技术概念
封装继承多态
我们首次接触Java是从其程序设计语言和基本的程序开发过程开始的。刚开始的几节课无比漫长……一直在理解封装继承多态,觉得没啥大用处,直到全部学懂之后才理解,发现封装继承多态就是面向对象的基础。(另:刚学完c,感觉JAVA在思路上与c有一定的相似,但在一些方面上还有比较大的差异。比如为什么printf要打成System.out.println这么长的形式)
数据和表达式
字符串
变量和赋值
基本数据类型
表达式
数据转化
读输入数据
2.1字符串
print及println方法
字符串连接
转义字符
变量和赋值
2.2变量和赋值
赋值语句
常量
基本数据类型
整型和浮点型
字符类型
boolean类型
2.3.基本数据类型
8 种基本类型(byte,short,int,long,float,double,boolean,char)
6种数字类型(byte,short,int,long,float,double)
4种整数类型(byte,short,int,long),
2.4表达式
算术运算符
运算符优先级
自增及自减运算符
赋值运算符
2.5数据转化
转换技术
基本类型之间的转换:加宽转换与缩窄转换。
2.6输入数据
Scanner类的输入
这一章学起来并不算难,因为有上学期的c打底,而c与java有一定的相似之处,很多基础代码的逻辑是一样的,所以在学的时候就很有熟悉感,很快地培养了对java的兴趣,作业考试也很快上手(但纯英文考试,一边考一边看有道词典是真的折磨),现在就可惜当初为啥没有多看几遍云班课的视频,好多加几分,枯辽
第三章
创建对象
2.String类
3.包
4.Random类
5.Math类
6.格式化输出
7.枚举类型
8.包装类
3.1 创建对象
new:返回指向新建对象的引用
别名:引用保存的内存地址
3.2 String类
String是个很常用的类名,在java.lang包中,java使用String类创建一个字符串变量,字符串变量属于对象。String类对象创建后不能修改,StringBuffer & StringBuilder 类。在存储名字的时候经常使用这一类名。
3.3 包
Java标准类库中的类按包来组织。每个类都属于一个具体的包。
3.4 random类
伪随机数生成器执行复杂的计算产生随机数
3.5 math类
java中的 +、-、*、/ 和 % 等基本算术运算符不能进行更复杂的数学运算,例如,三角函数、对数运算、指数运算等。于是 Java 提供了 Math 工具类来完成这些复杂的运算
3.6 格式化输出
NumberFormat,DecimalFormat(前面这俩我还是没懂) ,print,println,printf方法。(这个我倒是会了)
3.7枚举类型
它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。枚举可以根据Integer、Long、Short或Byte中的任意一种数据类型来创建一种新型变量。这种变量能设置为已经定义的一组之中的一个,有效地防止用户提供无效值。该变量可使代码更加清晰,因为它可以描述特定的值。
3.8 包装类
包装类的产生就是为了解决基本数据类型存在的这样一些问题,通过包装类可以让基本数据类型获取对象一样的特征,行使对象相关的权力。
在java中,类是一个模板,它描述一类对象的行为和状态,它表示一个共性的产物,类之中定义的是属性和行为(方法);而对象是类的一个实例,是一种个性的表示,表示一个独立的个体,每个对象拥有自己独立的属性,依靠属性来区分不同对象。 这一章代表着JAVA的一个基础思路,把东西放到类里,然后用方法的引用来解决问题。这样做的好处是方便引用,方便编写,也方便修改。
条件和循环
1.布尔表达式
2.if语句
3.数据比较
4.switch语句
5.while语句
6.迭代器
7.do语句
8.for语句
4.1布尔表达式
控制流:顺序(存储程序)、分支(条件语句,特殊情况、循环(自动化)
4.2if语句
If(){}else if(){}else,忘不掉
4.3数据比较
浮点数的比较:计算两个差值的绝对值,在与公差进行比较。
字符比较:Unicode顺序,大小写字母,数字要联系ASCII表中的编码。
对角比较:equals。
4.4switch语句
Switch(){
Case1:
Case2:
Default:
}
4.5while语句
While(){},break跳出循环,但容易出现逻辑漏洞
4.6迭代器
迭代器是一个对象,可以使用它的一些方法每次处理集合中的一个元素。也就是说,迭代器可以按需一项项地处理每一个元素。
4.7do语句
Do{}while,和while异曲同工吧
4.8for语句
For(){},也是一个非常常用的循环表示
本章内容非常熟悉,在学习c语言时就是着重讲解的内容,所以学起来不算累,一弄就会了
第五章 编写类
1.再谈类和对象
2.类的剖析
3.封装
4.方法的剖析
5.静态类成员
6.类方法
7.方法设计
8.方法重载
9.测试
10.调试
数组
1.数组元素
2.数组的声明及使用
3.对象数组
4.命令行参数
5.变长参数表
6.二维数组
继承
1.创建子类
2.方法的重写
3.类层次
4.可见性
5.设计继承
多态
1.后绑定
2.通过继承实现多台
3.接口
4.通过接口实现多态
异常
1.异常处理
2.不捕获异常
3.try-catch语句
4.异常传播
5.异常类的层次
6.I/O异常
递归
1.递归思想
2.递归程序设计
3.使用递归
算法分析
1.算法效率
2.增长函数和打O符号
3.比较增长函数
查找与排序
1.查找
2.排序
3.分析查找及排序算法
查找
1.线性查找
2.二分查找:从中间开始,要求表是有序的,每次比较后可以减少查找池中的一半元素。
3.分块查找:先二分查找,再线性查找。
4.哈希查找:直接通过关键字找到存储地址,是的查找时间可以常数级。
5.散列查找
排序
1.选择排序:分别将每个值放在排好序的最终位置,从而完成一组值的排序。
2.插入排序:将一个具体的值插入到表中已有序的子系列中,从而完成一组值的排序。
3.冒泡排序:重复地比较表中的相邻元素,如果它们不符合要求则交换他们。
4.快速排序:根据一个任意选定的划分元素来对表进行划分,然后再递归地对划分元素两边的字段进行排序,从而完成对表的排序。
5.归并排序:递归地对分表,知道每个子表只含有一个元素时为止,然后再将子表按序合并,从而完成对表的排序。
6.分析查找及排序算法
栈
1.集合的介绍
2.栈集合
3.继承、多态和泛型
4.栈的ADT
5.使用栈:计算后缀表达式
6.异常
7.使用数组实现栈
8.ArrayStack类
9.将引用作为链
10.管理链表
11.没有链的元素
12.使用链实现栈
13.使用java.util.Stack类实现栈
14.包
队列
1.队列是一个线性集合,它在一端添加元素,在另一端删除元素————先进先出。
2接口中一般有以下功能:
enqueue:将元素插入到队尾。
dequeue:从队头删除元素。
first:检测队头的元素。
isEmpty:判定队列是否为空。
size:断定队列中的元素个数。
队列也是种线性表(特殊的),因为它只能对表的前端进行删除操作,而在表的后端进行插入操作,和栈一样,队列是一种操作受限制的线性表。
算法简单,理解上和栈一样没什么难度。
树
1.树
2.树的遍历
3.数的实现策略
4.二叉树的实现
5决策树
二叉排序树
1.二叉查找树
2。二叉查找树的实现
3.平衡二叉查找树
4.二叉查找树
左子树小于结点,右子树大于结点;
最有效的二叉查找树是平衡的;
可以对二叉树进行旋转使其达到平衡;
堆和优先队列
1.堆
2.堆的实现
3.堆排序
4.优先队列
堆可以使用数组形式,用顺序结构存储最为合适。
5.最小堆(小顶堆)
6.最大堆(大顶堆)
图
1.无向图
2.有向图
3.带权图
4.常用的图算法
5.图的实现策略
二,总结所做过的作业
作业1:安装虚拟机
这个虚拟机在云班课上就有原视频教程,但视频教程的版本和下载的版本不一样(这个真的难到我了)费了九牛二虎之力才弄好,当一切弄好,虚拟机开机的那一刻,哇,值了。
作业2:实验三 面向对象程序设计(1)
参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECUNITTEST
参考http://www.cnblogs.com/rocedu/p/6736847.html
提交最后三个测试用例都通过的截图,截图上要有画图加水印,输入自己的学号。
百分制转成五个等级,粗略地运用了if语句
作业3:实验三 面向对象程序设计(2)
参考 积极主动敲代码,使用JUnit学习Java (http://www.cnblogs.com/rocedu/p/4837092.html)
参考http://www.cnblogs.com/rocedu/p/6736847.html
以 TDD的方式研究学习StringBuffer,提交你的单元测试用例和测试通过的截图,截图要加上学号水印。
学习StringBuffer的使用
作业4:实验三 面向对象程序设计(3)
实验三 Java面向对象程序设计(http://www.cnblogs.com/rocedu/p/4472842.html)
参考http://www.cnblogs.com/rocedu/p/6736847.html
对设计模式示例进行扩充,体会OCP原则和DIP原则的应用,初步理解设计模式
用自己的学号%6进行取余运算,根据结果进行代码扩充:
0:让系统支持Byte类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
1:让系统支持Short类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
2:让系统支持Boolean类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
3:让系统支持Long类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
4:让系统支持Float类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
5:让系统支持Double类,并在MyDoc类中添加测试代码表明添加正确,提交测试代码和运行结的截图,加上学号水印
让系统可以支持输入其他类型的数据。现在回想起来其实可以用多态的思想来overload一下来做的,可惜当时懂的少,看学长学姐的代码但跑不通,错误要自己找自己改,太痛苦啦!
作业5:实验三 面向对象程序设计(4)
提交:单元测试代码和运行成功截图及码云上代码链接,截图要加上学号水印
参考http://www.cnblogs.com/rocedu/p/6736847.html
任务:以TDD的方式开发一个复数类Complex,要求如下:
// 定义属性并生成getter,setter
double RealPart;
double ImagePart;
分成实数部分和复数部分存储,以及生成getter和setter,在之后的复数计算器中,这个类可帮大忙了
作业6:实验三 面向对象程序设计(5)
使用[WhiteStarUML](http://whitestaruml.sourceforge.net/)对实验二中的代码进行建模,发类图的截图,加上学号水印。
参考http://www.cnblogs.com/rocedu/p/6736847.html
类图中只少两个类。
作业7: 实现自己的ArrayList
1.编写自己的ArrayList类
要求:实现增加、删除、修改、查找、判断是否为空、返回list长度等操作。
2.测试。
比较简单,不说多了
作业8: 学习Java Socket编程
Java Socket编程(2分)
1.学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程
2.结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。
3.截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。
这个是分成两个人来做的复数计算器,一个人客户端,另一个人服务器端,然后在同一个网下可以传送数据,计算结果,很有意思
作业9: Java和密码学:
参考 http://www.cnblogs.com/rocedu/p/6683948.html,以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。
提交学习成果码云链接和代表性成果截图,要有学号水印。
作业:10 实验四 (3)编写有理数/复数计算器
结对编程,结对伙伴A编写有理数计算器。结对伙伴B编写复数计算器。(本题2分)
1.截图加水印上传蓝墨云,代码push码云
2.撰写实验报告
作业:11 实验四 (4)远程有理数计算器
结对编程,结对伙伴A编程实现客户端,结果伙伴B实现服务器端。
客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
作业:12 实验四 (5)远程复数计算器
结对编程,结对伙伴B编程实现客户端,结果伙伴A实现服务器端。
客户端通过键盘输入一个有理数计算的公式(例如:1/4 + 1/6 = ),并把该公式以字符串的形式发送给伙伴A(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端B,B收到结果后输出结果。截图加水印上传蓝墨云,代码push码云。
(本题3分)
作业:13 ArrayStack测试
(1)撰写自己的类;
(2)提供StackADT,ArrayStack(框架),实现ArrayStack里面的剩余方法;
(3)编写测试类,测试所写的方法是否正确。
作业14:栈应用-进制转换
算法基于原理: N = (N div d)×d + N mod d
例如:(1348)10 = (2504)8 ,其运算过程如下:
N N div 8 N mod 8
1348 168 4
168 21 0
21 2 5
2 0 2
要求输入一个十进制数,转换成任意进制数并输出。
作业15:最小生成树测试
1.画出Prim算法的最小生成树的生成过程
2.画出Kruscal算法的最小生成树的生成过程
3.计算最小权值
实践1:使用VIM编辑器编写Java程序
实践2:查找及ASL作业
实践3:排序
实践4:树-计算题
实践5:哈夫曼编码测试
实践6:地图染色问题
实践7:最小生成树测试
实践8:Dijkstra(迪杰斯特拉)算法测试
三,个人心得体会
学了一学期的JAVA了,真的感觉学海无涯,自己想破脑袋也想不出来的问题,网上的大神,和身边的同学总能给出一个巧妙的方式来解决这个问题。还记得当初学c的时候,我在班上可是老懂哥,经常为其他同学答疑解惑,结果这学期我要经常靠大家来帮我度过难关,帮我处理bug,属实是学习如逆水行舟,不进则退了。也感慨于同学们强大的学习能力和奋发拼搏的精神。学了JAVA,又认识到一些新的知识体系和处理问题的思路,希望在未来的学习生涯和工作生涯中,可以更好地应用这一些知识吧!