zoukankan      html  css  js  c++  java
  • 20155327 2016-2017-3 《Java程序设计》第4周学习总结

    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

    参考资料

  • 相关阅读:
    Java之JVM调优案例分析与实战(4)
    Qt浅谈之四十九俄罗斯方块(代码来自网络)
    自作聪明的开发
    Visual Studio 连接 SQL Server 的connectionStringz和
    删除反复行SQL举例
    一起学android之怎样设置TextView中不同字段的字体颜色(22)
    A008-drawable资源
    android 自己定义组件随着手指自己主动画圆
    一个简单的HTML5摇一摇实例
    关于事件的传递机制。
  • 原文地址:https://www.cnblogs.com/l97----/p/6583061.html
Copyright © 2011-2022 走看看