20145239杜文超 《Java程序设计》第4周学习总结

20145239 《Java程序设计》第4周学习总结

教材学习内容总结

第六章:

继承:避免多个类间重复定义共同行为。即当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。我们也把单独抽取出来的那个类称为父类,其他的多个类称为子类。

继承的关键字:extends

比如书上的例子:Role就是一个父类,是SwordsMan和Magician都具有的基础属性,这里要注意,我们说的继承是一种is-a的关系,SwordsMan继承了Role,所以说SwordsMan is a Role。

public class Role{

    private String name;
    private int level;
    private int blood;

    public int getBlood()
    {
        return blood;
    }
    public void setBlood(int blood)
    {
        this.blood = blood;
    }
    public int getLevel()
    {
        return level;
    }
    public void setLevel(int level)
    {
        this.level = level;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }

}

  剑士继承了Role的所有属性并拥有自己独特的属性:

public class SwordsMan extends Role
{
    public void fight()
    {
        System.out.println("剑士攻击");
    }
}

  最后的代码:

public class RPG
{
    public static void main (String[] args)
    {
        demoSwordsMan();
        demoMagician();
    }
    static void demoSwordsMan()
    {
        SwordsMan swordsMan = new SwordsMan();
        swordsMan.setName("Justin");
        swordsMan.setLevel(1);
        swordsMan.setBlood(200);
        System.out.printf("剑士:(%s,%d,%d)%n",swordsMan.getName(),
                swordsMan.getLevel(),swordsMan.getBlood());
    }
    static void demoMagician()
    {
        Magician magician = new Magician();
        magician.setName("Moinca");
        magician.setLevel(1);
        magician.setBlood(100);
        System.out.printf("魔法师:(%s,%d,%d)%n",magician.getName(),
                magician.getLevel(),magician.getBlood());

    }
}

  *tip:java中还支持多层继承:

class A{}
class B extends A{}
class C extends B{}

  就好比子-父-爷的关系。

多态:多态从字面上的解释就是某一类事物的多种存在形态,以抽象讲法解释就是使用单一接口操作多种类型的对象。 如果角色的数量较多,只要他们继承的都是同一个类(Role)就可以用多态的方法来代替重载的方式,提高了程序的可维护性。

public class RPG2
{
    public static void main (String[] args)
    {
        SwordsMan swordsMan = new SwordsMan();
        swordsMan.setName("Justin");
        swordsMan.setLevel(1);
        swordsMan.setBlood(200);

        Magician magician = new Magician();
        magician.setName("Moinca");
        magician.setLevel(1);
        magician.setBlood(100);

        showBlood(swordsMan);   //SwordsMan是一种Role
        showBlood(magician);
    }
    static void showBlood(Role role)   //声明为Role类型
    {
        System.out.printf("%s 血量 %d%n",role.getName(), role.getBlood());
    }
}

  

抽象方法:如果某方法区块中没有任何程序代码操作,可以使用abstract标示该方法。

抽象类:类中若有方法没有操作,并且标示为abstract,表示这个类定义不完整,因此也就不能用来生成实例。Java中规定内含抽象方法的类,一定要在class前标示abstract,表示这是一个定义不完整的抽象类。

 public abstract class GuessGame {
        public void go() {
            int number=(int)(Math.random()*10);
            int guess;
            do {
                print("输入数字:");
                guess=nextInt();
            }while(guess!=number);
            println("猜中了");
        }

        public void println(String text) {
            print(text+"\n");
        }

        public abstract void print(String text);
        public abstract int nextInt();
    }

  

import java.util.Scanner;

    public class ConsoleGame extends GuessGame {
        private Scanner scanner=new Scanner(System.in);

        @Override
        public void print(String text) {
            System.out.print(text);
        }

        @Override
        public void println(String text) {
            System.out.println(text);
        }

        @Override
        public int nextInt() {
            return scanner.nextInt();
        }
    }
public class Guess {
        public static void main(String[] args){
            GuessGame game=new ConsoleGame();
            game.go();
        }
    }

  

继承语法细节:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。

垃圾收集:创建对象会占据内存,如果程序执行流程中已无法再使用某个对象,该对象就只是耗内存的垃圾。 JVM有垃圾收集机制,收集到的垃圾对象所占据的内存空间,会被垃圾收集器释放。

垃圾对象:执行流程中,无法通过变量参考的对象。

第七章:

接口:要重点理解和继承的区别,Java的接口支持多重继承,操作接口表示“拥有行为”,但不是“是一种”的关系。

接口中定义的方法的两种处理方式:1.操作接口中定义的方法。2.再度将该方法标示为abstract。

public abstract class Fish implements Swimmer{
        protected String name;
        public Fish(String name){
            this.name=name;
        }
        public String getName()
        {
            return name;
        }
        @Override
        public abstract void swim();
    }

接口关键字:implements

运行实例:

接口语法细节:

  • 使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final。为了方便,也可以省略public static final。
  • 接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。
  • enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。

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

在阅读教材的时候,我发现了一个不懂的关键字:@Override。在敲代码的时候出现了如下错误:

我随后在博客园中的一个帖子里找到了答案:

“@Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记。

使用该标记是为了增强程序在编译时候的检查,如果该方法并不是一个覆盖父类的方法,在编译时编译器就会报告错误。”

具体可以点击这篇帖子。http://www.cnblogs.com/hnrainll/archive/2011/10/17/2215138.html

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

第七章教材里的许多代码只是单纯的类,并不能执行。我在IDEA里敲完代码以后发现无法run,还以为代码有问题,其实仔细一看才发现这些代码都是没有main函数的,所以不能运行。

本周代码托管截图

其他(感悟、思考等,可选)

讲真java学习的难度越来越大了,我感觉非常吃力。可能是上周四五章的内容还不够扎实,下周的学习任务就来了,其实看视频加上看书加上敲代码加上写博客任务量还是非常繁重的。可能是我还没有完全适应这种自主学习的模式。本周的内容我印象最深刻的就是继承和接口的区别,书上的例子很生动,鱼会游泳,鲨鱼是鱼、小丑鱼是鱼,所以它们是继承关系,但人也会游泳,但人和鱼就没有继承关系,但人和鱼之间的这种联系就可以用接口表示。虽然理解了这一点,但我还不能联想到区别这两种定义方法在具体程序中究竟能有多大的利处。总之,要继续学习的或者说要补的知识还很多,希望我可以坚持下去,不要最后无奈沦为混完课程的人。人间正道是沧桑啊!

学习进度条

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 100/100 1/2 12/15  
第二周 200/300 1/2 15/15  
第三周 300/300 1/2 20/20  
第四周 500/500 1/2 25/25  

参考资料

时间: 2024-11-29 03:03:55

20145239杜文超 《Java程序设计》第4周学习总结的相关文章

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20145239杜文超 《信息安全系统设计基础》课程总结

20145239杜文超 <信息安全系统设计基础>课程总结 每周作业链接汇总 第0周作业: 简要内容:安装VirtualBox,安装Ubuntu,预习Linux基础入门. 二维码: 第一周作业: 简要内容:了解Linux操作系统,掌握核心的linux命令. 二维码: 第二周作业: 简要内容:熟悉Linux系统的开发环境.vi的基本操作.gcc编译器的基本原理.gcc编译器的常用选项.如何使用gdb调试技术. 二维码: 第三周作业: 简要内容:理解"信息=位+上下文". 二维码

20145239 杜文超 实验四 Android开发基础

20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Android Studio安装 实验步骤 安装 JDK 并配置 JDK 环境变量 依次使用计算机->系统属性->高级系统设置->高级->环境变量,然后新建一个JAVA_HOME变量,令它为计算机中安装JDK的位置: 安装Andriod Studio并配置 1.双击运行Andri

20145239杜文超《网络对抗》- 信息搜集与漏洞扫描

20145239杜文超<网络对抗>- 信息搜集与漏洞扫描 基础问题回答 (1)哪些组织负责DNS,IP的管理? 美国政府授权ICANN统一管理全球根服务器,负责全球的域名根服务器.DNS和IP地址管理,全球根域名服务器绝大多数在欧洲和北美(全球13台,用A~M编号),中国仅拥有镜像服务器(备份). 全球一共有5个地区性注册机构:ARIN主要负责北美地区业务,RIPE主要负责欧洲地区业务,APNIC主要负责亚太地区业务,LACNIC主要负责拉丁美洲美洲业务,AfriNIC负责非洲地区业务. (2

20145239杜文超《网络对抗技术》- 恶意代码分析

20145239杜文超<网络对抗技术>- 恶意代码分析 实验后回答问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. (1)使用计划任务schtasks指令动态监控系统运行 (2)使用sysmon工具动态监控系统运行 2.如果已经确定是某个程序或进程有问题,你有什么工具可以进一步得到它的哪些信息. (1)使用systracer工具进行快照分析注册表信息.文件行为等信息的变化 (2)把程序放在vir

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145201 《Java程序设计》第一周学习总结(修改)

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145238-荆玉茗 《Java程序设计》第一周学习总结

20145238 <Java程序设计>第一周学习总结 教材学习内容总结 Java三大平台:由于java领域的应用越来越广,根据不同级别的应用开发区分了不同的应用版本,后正式更名为Java SE,Java EE,Java ME. Java SE主要分为四个部分:JVM,JRE,JDK和JAVA语言. 了解JCP与JSR.RI.TCK的关系:JSR必须经过JCP投票通过才能成为最终的标准文件,JSR成为最终文件后对其成果做出免费且开发原始码的参考实现,称为RI,由TCK作为技术兼容测试工具箱. 了