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. 通用型正方教务(通杀各版本)存在注入(不需登陆)+获得webshell+提权内网漫游

    某个接口页面存在oracle盲注,可以获得当前用户数据库,dump教师用户表,分析密文加密特征(前人研究成果+基友助攻),破译加密的密码.前台管理员登陆,后台文件上传基于黑名单原理,过滤u完全,上传特 ...

  2. 深入剖析php执行原理(2):函数的编译

    本文只探讨纯粹的函数,并不包含方法.对于方法,会放到类.对象中一起研究. 想讲清楚在zend vm中,函数如何被正确的编译成op指令.如何发生参数传递.如何模拟调用栈.如何切换作用域等等,的确是一个很 ...

  3. java内部类之成员内部类

    内部类概念:顾名思义,就是将一个类定义在另一个个类内部.内部的类称之为内部类 . 内部类的主要特点:1.内部类可以很好的实现隐藏,可以使用protected.private修饰符.2.内部类可以直接访 ...

  4. java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive

    问题:使用Spring时,报错:java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive问题原因: 少了as ...

  5. Odoo中Application与modules的区别

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9278681.html 一:Application(应用) application一般是针对大功能的模块,如提供 ...

  6. Kali-linux控制Meterpreter

    Meterpreter是Metasploit框架中的一个杀手锏,通常作为利用漏洞后的攻击载荷所使用,攻击载荷在触发漏洞后能够返回给用户一个控制通道.当使用Armitage.MSFCLI或MSFCONS ...

  7. HTTP 错误 401.0 - Unauthorized 的解决方案

    1.安装vs2015后,以前做的项目中Forms身份验证,竟然不能使用了 2.打开当前项目属性,将windows身份验证属性改为启用 3.vs2015生成的mvc项目中,webconfig缺失auth ...

  8. python3之安装mysql问题

    python3是不能通过pip install mysql或pipinstall mysqldb这样的形式来安装mysql. 只能 pip install PyMySQL 至于如何在文件中引用? 答曰 ...

  9. Linux TCP server 只能接受一个 TCP 连接

    #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <str ...

  10. 大话Linux内核中锁机制之信号量、读写信号量

    大话Linux内核中锁机制之信号量.读写信号量 在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实 ...