20155327 2016-2017-3 《Java程序设计》第4周学习总结

教材学习内容总结

一. 理解封装、继承、多态的关系

封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。是软件设计模块化、软件复用和软件维护的一个基础。

继承:是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于抽取多类事物的共性。java中的继承要使用extends关键字,并且java中只允许单继承,也就是一个类只能有一个父类。

多态,把子类对象主观的看作是其父类型的对象,那么父类型就可以是很多种类型。实现多态,有二种方式,覆盖,重载。

关系:继承可以复用代码,更大的用处是实现「多态」

封装是继承的基础,继承是多态的基础

「用父类声明对象引用,用子类生成对象」就有了多态

二.理解抽象类与接口的区别

1.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。

2.抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。

三.掌握S.O.L.I.D原则

S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是:

The Single Responsibility Principle(单一职责SRP)

The Open/Closed Principle(开闭原则OCP)

The Liskov Substitution Principle(里氏替换原则LSP)

The Interface Segregation Principle(接口分离原则ISP)

The Dependency Inversion Principle(依赖反转原则DIP)

四.了解模式和设计模式

模式:模式是某外在环境(Context) 下﹐对特定问题(Problem)的惯用解决之道(Solution)。模式必须使得问题明晰,阐明为什么用它来求解问题,以及在什么情况下有用,什么情况下不能起作用,每个模式因其重复性从而可被复用,本身有自己的名字,有可传授性,能移植到不同情景下。模式可以看作对一个问题可复用的专家级解决方法。

设计模式:计模式有四个基本要素:

Pattern name:描述模式,便于交流,存档

Problem:描述何处应用该模式

Solution:描述一个设计的组成元素,不针对特例

Consequence:应用该模式的结果和权衡(trade-offs)

五.能正确覆盖方法

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

六.了解垃圾回收机制

垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。

1.引用计数:是垃圾收集器中的早期策略。在这种方法中,堆中每个对象(不是引用)都有一个引用计数。当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象+1),但当一个对象的某个引用超过了生命周期或者被设置为一个新值时,对象的引用计数减1。任何引用计数为0的对象可以被当作垃圾收集。当一个对象被垃圾收集时,它引用的任何对象计数减1。

2.跟踪收集器:早期的JVM使用引用计数,现在大多数JVM采用对象引用遍历。对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段,GC必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

七.掌握Object类

Object类是类层次结构的根,Java中所有的类从根本上都继承自这个类。  Object类是Java中唯一没有父类的类。

 其他所有的类,包括标准容器类,比如数组,都继承了Object类中的方法。

八.掌握enum

分享链接:

教材学习中的问题和解决过程

一.对于JAVA的学习中,我感觉还是通过代码才能更好理解,比如理解封装,继承,多态,例如以下代码:

用java做一个简单计算器;

import java.io.*;

class OperationAttridute

{

   private double numberA=0;

   private double numberB=0;

   private double result=0;

   public double setNumberA(double i)

   {

          return numberA=i;

   }

   public double getNumberA()

   {

          return numberA;

   }

   public double setNumberB(double j)

   {

          return numberB=j;

   }

   public double getNumberB()

   {

          return numberB;

   }

   public double setResult(double z)

   {

          return result=z;

   }

   public double getResult(double a,double b)

   {

          return result;

   }

}

//将要运算的2个数字和运算结果进行封装。

class OperationA extends OperationAttridute

{

   public double getResult(double a,double b)

   {

          double result=0;

          result=a+b;

          return result;

   }

}

//加法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationS extends OperationAttridute

{

   public double getResult(double a,double b)

   {

          double result=0;

          result=a-b;

          return result;

   }

}

//减法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationM extends OperationAttridute

{

   public double getResult(double a,double b)

   {

          double result=0;

          result=a*b;

          return result;

   }

}

//乘法类:继承OperationAttridute类并且覆盖其getResult方法

class OperationD extends OperationAttridute

{

   public double getResult(double a,double b)

   {

          double result=0;

          if(b==0)

          {

                 Throw new RuntimeException(“被除数不能为0”);

          }

          result=a/b;

          return result;

   }

}

//除法类:继承OperationAttridute类并且覆盖其getResult方法,除法要对被除数进行判断并抛出异常

class Operationdo

{

   public static Object expression_r(char r)

   {

          OperationAttridute oa=new OperationAttridute();       

          switch(r)

          {

                 case '+':

                 oa=new OperationA();                

                 break;

                 case '-':

                 oa=new OperationS();                 

                 break;

                 case '*':

                 oa=new OperationM();         

                 break;

                 case '/':

                 oa=new OperationD();         

                 break;                  

          }

          return oa;             

   }

}

//运算类:通过传进来的参数,来调用运算方法

class Account

{

   public static void main(String []args)throws Exception

   {

          char r='*';                   

          OperationAttridute oa=(OperationAttridute)Operationdo.expression_r(r);

          double a=oa.setNumberA(9);

          double b=oa.setNumberB(2);

          System.out.println(oa.getResult(a,b));  

   }

}

//主程序

这样,只需要输入运算符号,通过多态,返回父类的方式实现了计算器的结果。

代码调试中的问题和解决过程

  • xx1问题
  • xx1解决方案
  • xx2问题
  • xx2解决方案
  • ...

代码托管

  • 代码提交过程截图:

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

上周考试错题总结

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 10/10 1/4 10/10
第二周 90/100 1/5 12/22
第三周 120/320 1/6 16/38
第四周 180/500 1/7 14/52

参考资料

20155327 2016-2017-3 《Java程序设计》第4周学习总结的更多相关文章

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

    20155327 2017-2018-2 <Java程序设计>第一周学习总结 教材学习内容总结 三大平台: 1.Java SE:JVM,JRE,JDK,java语言 JVM:Java虚拟机 ...

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

    20155327 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 浏览教材,根据自己的理解每章提出一个问题 1.JAVA SE中JVM,JRE与JDK分别是什 ...

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

    20155304 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC ...

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

    20155330 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛 ...

  5. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  6. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  7. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  8. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  9. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  10. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

随机推荐

  1. 021.6 IO流 练习

    #######################################################################################获取指定目录下所有的.ja ...

  2. jenkins连接提示错误urllib.error.HTTPError: HTTP Error 403

    昨天在执行python连接Jenkins获取编译失败日志失败时,出现错误,具体报错如下,主要是在连接问题上的问题,做了一个请求 就提示错误 原因在于Jenkins的权限,或者访问页面的url需要进行登 ...

  3. (六)Linux下的压缩命令

    ======================================================================================== .zip格式的压缩和解 ...

  4. mongo数据库导入导出数据

    一.Mongodb导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件.可以通过参数指定导出的数据项,也可以根 ...

  5. Input and Output-The input is all the sources of action for your app

    Programs take input and produce output. The output is the result of doing something with the input. ...

  6. background-clip 实现字体渐变效果

    background-clip 实现字体渐变效果 (一)类似KTV字幕效果 @-webkit-keyframes loop{ 0%{background-position: -800px 0;} 10 ...

  7. Apache2.4.34 + php 7.28 + MySQL8.0.12 安装及配置

    服务端的学习 Apache2.4.34 的安装及配置 1.基本安装 最新的 Apache 已经不提供 Windows 的安装版本,所以我们这里使用的是解压版 -下载地址:https://www.apa ...

  8. log4j与logback包冲突原因及解决,不可忽视的Warning

    场景 一个简单的spring-boot程序,需要用kafka做消息队列,于是在maven中引入kafka依赖,一切看似没问题,在启动时,打印出Warning信息: SLF4J: Class path ...

  9. html中的meta元素及viewport属性值

    <meta name="viewport" content="width=device-width , initial-scale=1.0, maximum-sca ...

  10. Oracle 日志挖掘(LogMiner)使用

    Logminer依赖于2个包:DBMS_LOGMNR和DBMS_LOGMNR_D,Oracle 11g默认已安装 Logminer 基本使用步骤 <1>. Specify a LogMin ...