一、博客说明

随着这四个月对于《Java面向对向设计》的学习,这门课也接近了尾声,我也通过本次博客对这门课做出一定的总结。

二、知识点总结

1.基本类型

  boolean(布尔)   true/false 默认为false

  short(短整数) 16位,2字节

  int(整数)     32位,4字节

  long(长整数)      64位,8字节

  float (单精度型浮点数) 32位,4字节

  double(双精度型浮点数)64位,8字节

  char(字符)

  BigInteger 支持无限大的整数运算

  BigDecimal 支持无限大的小数运算

 

2.运算符

  基本运算符:+,-,*, /, %

  逻辑运算符:&,|,!

  比较运算符 :==,!=,>,>=, <, <=

3.类中关键字

  private:类成员是私有的

  public:类的方法是公用的

  this:代表本类中的成员可以代替构造函数。

  static:

    表示静态方法

    用于修饰 变量 方法 类

  final:

    用于修饰 类 方法 字段  变量

final修饰的类为最终类不能被继承

    final修饰的变量不能再次被赋值

4.继承

  1.继承通过extends实现

  2.子类继承父类所有的属性和方法(但不能直接访问private成员)

  3.每个类都只能继承一个类

每个子类的构造函数的第一句话,都默认调用父类的无参数构造函数super()

5.抽象类

  1.抽象类通过关键字abstract声明

  2.如果一个类暂时有方法未实现,需要被定义为抽象类

子类可以继承于抽象类,但是一定要实现父类们所有 abstract的方法。如果不能完全实现,那么子类也必须被定义为抽象类

 

6.接口

  1.接口通过关键字interface声明

  2.如果类的所有方法都没有实现,那么这个类就算是接口

类只可以继承(extends)一个类,但是可以实现(implements)多个接口。

  4.类实现接口,就必须实现所有未实现的方法。如果没有全 部实现,那么只能成为一个抽象类

7.多态

  1.子类可以转换成父类,而父类不可以转为子类。

  2.子类继承父类所有的财产,子类可以变成父类(从大变小,即向上转型)

8.有关Math类的运用

 

System.out.println(Math.E);//取e,2.718281828459045
System.out.println(Math.PI);//取Π,3.141592653589793
System.out.println(Math.pow(2, 3));//取2的3次方,8.0
System.out.println(Math.min(2.4, 5.6));//取两者最小值,2.4
System.out.println(Math.max(5, 3));//去两者最大值,5
System.out.println(Math.sin(Math.PI / 2));//取sin(Π/2),1
System.out.println(Math.exp(5));//求e的5次方,148.4131591025766
System.out.println(Math.log(Math.E));//求ln e,1
System.out.println(Math.log10(10));//求long10 10,1.0
System.out.println(Math.sqrt(2));//求2的开二次方,1.4142135623730951
System.out.println(Math.ceil(3.5));//向上取整,4.0
System.out.println(Math.floor(3.5));//向下取整3.0
System.out.println(Math.abs(-4));//取-4的绝对值,4

 

9.Java异常处理

 

  1.异常分类

Throwable//所有错误的祖先
Error//系统内部错误或者资源耗尽,不管。 
Exception://程序有关的异常 
    –RuntimeException    //程序自身的错误(5/0,空指针,数组越界../)
    –非RuntimeException//外界相关的错误 (打开一个不存在文件 加载一个不存在的类)
    -Unchecked Exception//(编译器不会辅助检查的,需要程序员自己管的)异常,包括Error子类和 RuntimeException子类。 
  -Checked Exception//(非RuntimeException的Exception的子类),程序员必须处理,以发生后处理为主。编译器会辅助检查

 

  2.异常处理

   try: 正常运行逻辑代码。 

  catch: 当try发生异常,将执行catch代码。若无异常,绕之。

   finally: 当try或catch执行结束后,必须要执行finally

  throw:声明异常向上抛出异常  

  方法:

    –try…catch
    –try…catch…finally
    –try…finally
  try必须有,catch和finally至少要有一个

try

{

    需要被检测的代码;

}

catch(异常类 变量名)

{

    异常处理代码;

}

fianlly

{

    一定会执行的代码;

}

 

10.Java数据结构

  1.列表List

    1. ArrayList-以数组实现的列表

      1.索引位置可以快速定位访问

      2.不适合指定位置的插入、删除操作

    2.LinkedList-以双向链表实现的列表

      1.顺序访问高效,随机访问较差,中间插入和删除高效

      2.适用于经常变化的数据

  2.集合 Set

 

    1.HashSet-散列函数的集合(无序)

    2.TreeSet-树结构的集合(可排序)

    3.LinkedHashSet-散列函数和双向链表的集合(可排序)

add //添加一个元素 
clear //清除整个集合
contains//判定是否包含一个元素 
remove //删除一个元素 
retainAll //计算两个集合交集

 

  3.映射Map

    1.Hashtable(同步,慢,数据量小)

    2. HashMap(不支持同步,快,数据量大)

    3.Properties (同步,文件形式,数据量小)

clear//清除整个Map
contains//判断是否包含一个元素
containsValue//返回Value值
containsKey//返回Key值
put//添加一个元素
remove//删除一个元素

11.JavaFX

   JavaFX主要用于开发用户界面,有Stage,Pane,FlowPane,Scene,Button等等通过这些可以设计出很多各色各样的界面。

java面向对象程序设计笔记 java面向对象程序设计总结_java面向对象程序设计笔记

 

12.Java中一些常用的基本方法

  1.快速结束

System.exit(-1);//结束代码,主要用于报错时直接结束,而不运行下面的代码

  2.保留小数

String.format("%.2f",a)//对a保留两位小数

  3.随机数生成

    Random 随机数

Random.nextInt() 返回一个随机int
Random.nextInt(int a) 返回一个[0,a)之间的随机int
Random.nextDouble()返回一个[0.0,1.0]之间double

    Math随机数

Math.random() 返回一个[0.0,1.0]之间double

   4.强制类型转换 

Integer.parseInt(str);//将String类型强制转换为int类型
Integer.toString(i);//将int类型强制转化为String类型

Double.valueOf( str);//将String类型强制转化为double类型
String.valueOf(d)//将double类型强制转化为String类型

  5.字符串的处理

 

data=data.replace("+","/+");//将字符串data中的+号替换成/+号
String Data[] = data.split("/");//将字符串data用/号分隔开存储到Data[]数组里面

 

 

三、作业总结:

在PTA方面作业:

PTA第一次作业(得分:100)

题目1:计算税率题目  题目2:判断坐标点所在范围  题目3:电话键盘字母数字转换  题目4:判断三角形类型  题目5:统计最大数出现次数

 

 

PTA第二次作业(得分:100)

题目1:求一元二次方程  题目2:判断闰年及星期几  题目3:求下一天  题目4:求前N天

 

 

PTA第三次作业(得分:100)

题目1:用类解一元二次方程式  题目2:日期类设计  题目3:日期问题面向对象设计(聚合一)  题目4:日期问题面向对象设计(聚合二)

 

PTA第四次作业(得分:98)

题目1:第一题:水文数据校验及处理  题目2:蒙特卡罗方法求圆周率  题目3:图形继承

失分点:第一题  

测试点0:输入为连续多个空(null)一开始以为是输入空格然后报错,截止后询问了同学才得知是之间Enter不输入然后输出数据全部为0,当时思想还是太局限了,没有想到。

 

 

PTA第五次作业(得分:94)

题目1图形继承与多态  题目2:一元多项式求导

失分点:第二题  

测试点7:大数据测试 到现在还是不知道大数据测试是什么,我运用的是BigInteger来求数据,能运行给的例子但还是过不了测试点也不知为什么。

 

PTA第六次作业(得分130,含30加分题)

题目1:图形卡片排序游戏  题目2:图形卡片分组游戏  加分题:求素数

 

PTA第七次作业(得分:100)

题目1:雨刷程序功能扩展设计

 

PTA第八次作业(得分:80)

题目1: 统计Java程序中关键词的出现次数

失分点:第一题  

测试点5:两种注释测试   能运行/**/ 和//但是过不了PTA 主要还是不知道这个测试点的数据是什么也没法查

测试点9:这个应该是测试点出现了错误,能够运行例子并得到正确结果,但是PTA没有分,全班也没有一个人能过。

 

 

PTA第九次作业(得分:100)

题目1:表达式求值

 

作业总结:这一个学期对于Java的学习。虽然也遇到了很多问题,但是还是坚持下来了,总的来说每次作业都还是能较好的完成的不管是在PTA上还是关于课堂作业上,每次也都完成的得分也不算很低,其实也留下了一些遗憾的,毕竟真的花费了很多时间去完成PTA上面的题目,但是有的时候还是有某个点过不去,有的时候是因为思想的局限,有的时候还是不知道这个测试点到底测试的的是什么,可能能运行但就是没有分,导致最后没有得到满分也是很遗憾的,还有一个就是关于查重,有前面有两次我的查重率是100%,主要是当时不知道PTA只算第一次能完全通过的,后面如果再提交对的代码,他是不会上传的,一次是同学用了我的代码去看了一下题目中的测试点,但后面是他自己写的,我们最后提交的代码的主要思想是完全不一样的,另一次是我跟一个同学可以输出相同的结果,但是我有一个测试点就是过不去,我以为是PTA的问题就提交了一下他的试了一下结果他的通过了,导致我后面发现问题改正后再提交自己的代码就没用了,主要原因还是当时不知道PTA是看第一次的正确结果,查重结果发布后,才了解到的,虽然我这两次代码基本上都是自己写的,只是有些问题问了一下同学,但是觉得是没有抄袭的,花费了很多时间,到头来却落了一个抄袭的名声也是很遗憾的。我也不太清楚关于PTA查重是老师设置的按第一次代码还是PTA本就如此,我觉得这样局限性还是很大的,毕竟在写代码时,为了过PTA其实代码还不够优化,有些算法效率并不高,就比如第六次作业的求素数,老师让我们去提高代码的效率,运算时间越小越好,按运行的平均时间得分,但是如果第一次对了但运行时间很长效率较低,后面在思考效率去修改提交代码就没有意义了,所以我觉得这样的设计并不合理。

 

四、课程难点        

  学习了这段时间的Java,个人觉得难度固然是有的,比如说字符串的分隔,以及正则表达式和Map的使用,这些稍不注意就会报错或者是运行错误,有些地方比如面向对象的思路,类的思路也很难理解,但是其实上课认真听课,积极完成课堂作业以及PTA,课后也可以去观看慕课复习知识,其实最后坚持下来发现Java的学习虽然不算简单,但却是充满韵味的,比如当你学习了一节课很轻松的完成了老师交给的课堂作业或者历经百般磨难PTA这个题目的测试点全都能过时,那个红色字体的“答案正确”真的让人回味无穷,有了很强的成就感。

 

五、个人收获

  通过这一个学期对于《Java面向对象设计》课程的学习,虽然困难但是还是坚持了下来,一个学期的时间学习了关于Java的很多很多知识,这里就不一一描述了,最主要的是从原先学习C语言的面向过程的思想,转变到现在也具备了一定的面向过程的思想,以及关于面向对象三大技术特性封装性、继承性、多态性理解的提高,从一开始看到复杂的UML类图不知所措,但后面有自己的独力思考能力可以将他们分为一个一个类去解题,也是一个质的改变。时间也是过的飞快,由于疫情的原因,这个学期都是在网上上的课,虽然课程马上就要结束了,但是我也不会终止对于Java的学习,有时间也会去看一些大佬的博客或者相关书籍,我现在学到的应该还是冰山一角,后面还需要继续学习了解。

 

六、课程建议

  虽然理论课已经结束了,老师在网上讲的课其实也很好,课上听不明白还可以课下去看老师的回放巩固,这里还是提一点小小的建议。

  1:老师可以先把上课要运行的代码发到群里,有的时候跟着老师打代码,还是思考这个代码有什么用处,很容易就错误了,跟不上老师的节奏。

  2:就是关于PTA方面查重问题,我觉得查重应该是查最后一次正确提交的代码,而不是第一次。