昨日内容回顾

  1. 多态:多种状态,多态的前提条件是继承或者是实现

  2. 面向接口编程

    • 降低耦合度
    • 接口是最低标准,接口可以多重继承
    • 接口中的所有方法都是抽象方法
    • 抽象类中可以没有抽象方法
  3. 匿名内部类对象

    将对类的继承,方法重写,对象的创建集成到一行代码中区。

作业解析

  1. 使用接口进行如下程序设计

    个人电脑(PC)具有PCI插槽,可以插入PCI卡。显卡、声卡、语音卡都可以作为PCI卡插入PCI插槽中

    PC,PCI,slot,VideoCard,SoundCard, VoiceCard

     interface PCI{
    public void pci();
    } class VideoCard implements PCI{
    public void pci(){
    System.out.println("This is a videoCard");
    }
    } class SoundCard implements PCI{
    public void pci(){
    System.out.println("This is a soundCard");
    } class VoiceCard implements PCI{
    public void pci(){
    System.out.println("This is a voiceCard");
    } class PC{
    public void slot(PCI pci){
    pci.pci();
    }
    } class PCIDemo{
    public static void main(String[] args){
    PC pc = new PC();
    pc.slot(new VideoCard());
    pc.slot(new SoundCard());
    pc.slot(new VoiceCard());
    }
    }
  2. 高富帅

    Height

    Rich

    Handsome

    Girl boyFriend(HRH h)

    用匿名内部类实现

     interface Height{
    public void high();
    } interface Rich{
    public void rich();
    } interface Handsome{
    public void handsome();
    } interface HRH extends Height,Rich,Handsome{
    } class Girl{
    public void boyFriend(HRH h){
    h.high();
    h.rich();
    h.handsome();
    }
    } class NoNameDemo{
    public static void main(String[] args){
    Girl girl = new Girl();
    girl.boyFriend(new HRH(){
    public void high(){
    System.out.println("很高");
    }
    public void handsome(){
    System.out.println(“很帅”);
    }
    public void rich(){
    System.out.println(“很有钱”);
    }
    });
    }
    }
  3. 使用适配器模式实现窗口的事件处理程序

    窗口可以响应最大化事件、最小化事件、大小改变事件、恢复事件、移动事件、关闭事件

    通过适配器对大小改变事件、移动事件和关闭进行默认处理,窗口只关心最大化和最小化事件即可。

    Window

    WindowListener{max min resize restore move close}

     interface WindowListener{
    public void max();
    public void min();
    public void resize();
    public void restore();
    public void move();
    public void close();
    } abstract class WindowListenerAdapter implements WindowListener{
    public void resize(){
    }
    public void restore(){
    }
    public void move(){
    }
    public void close(){
    }
    } class Window{
    WindowListener listener;
    public void setListener(WindowListener listener){
    this.listener = listener;
    } public void max(){
    listener.max();
    } public void min(){
    listener.min();
    }
    } class AdapterDemo(){
    public static void main(String[] args){
    Window window = new Window();
    window.setListener(new WindowListenerAdapter(){
    public void max(){
    System.out.println("窗口最大化");
    }
    public void max(){
    System.out.println("窗口最小化");
    }
    });
    window.max();
    window.min();
    }
    }
  4. 使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),

    其中含有click() / dbclick() / keyUp() / keyDown()等方法。

    ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。

    Button类中添加addListener(ButtonListener l)方法。

     interface ButtonListener{
    public void click();
    public void dbclick();
    public void keyUp();
    public void keyDown();
    } abstract class ButtonAdapter implements ButtonListener {
    public void keyUp(){
    }
    public void keyDown(){
    }
    } class Button{
    private ButtonListener l;
    public void addListener(ButtonListener l){
    this.l = l;
    }
    public void click(){
    l.click();
    }
    public void dbclick(){
    l.dbclick();
    }
    } class AdapterDemo(){
    public static void main(String[] args){
    Button button = new Button();
    Button.addListener(new ButtonAdapter(){
    public void click(){
    System.out.println("单击了按钮");
    }
    public void dbclick(){
    System.out.println("双击了按钮");
    }
    });
    button.click();
    button.dbclick();
    }
    }
  5. 阐述什么是多态。

    为什么函数可以覆盖,而属性不能覆盖?

    答:对象的多种状态,对继承来说,用父类引用子类的对象;对接口来说,用接口引用实现类的对象。根据javabean原则,公有方法可以被继承,因此可以被子类覆盖,而属性是私有财产,不能被子类覆盖。

异常

  1. Throwable 的两个子类Exception 和 Error

     java.lang.Object
    |
    |---java.lang.Throwable
    |
    |---java.lang.Error
    |---java.lang.Exception
  2. 使用throw关键字抛出异常对象:throw new XxxException(...);

  3. throws关键字用于声明方法抛出了异常

    public void function(...) throws XxxException,YyyException{

    ...

    }

  4. Exception的处理方式

    • try-catch-finally

        try{
      ...
      }
      catch(Throwable e){
      }
      finally{
      }

      可以有多个catch语句,catch的顺序需要注意,子类异常需要先行catch,否则代码不可达,编译也无法通过。

    • 在方法上给出抛出异常的声明

  5. RuntimeException在方法定义时可以不进行抛出声明,也不使用try-catch-finally 进行捕获

  6. 方法覆盖时,不可以追加新的异常抛出声明,但是可以抛出所覆盖的方法声明的异常的子类

package

  1. 包,类似于文件夹,组织管理类的结构

    www.sina.com

    www.baidu.com

    com.sina.weibo

  2. 完整类名:包名 + . + 类名, 比如com.xkzhai.java.PackageDemo

    路径:com\xkzhai\java\PackageDemo.class

  3. 编译含有包名的类

     javac -d classes xxx.java //-d指定存放类文件的位置,同时生成对应的文件夹目录树
    javac -cp classes;classes2; -d . xxx.java // -cp 指定贬编译程序时需要搜索的类的类路径顺序
  4. 运行含有包名的类

    运行java程序,需要指定类的完整类名

     java -cp classes com.xkzhai.java.PackageDemo
  5. 引入包中的类,使用import关键字

  6. 含有包名的类,需要使用public 修饰,否则无法在其他包中访问

dos命令

  1. tree /F //输出目录树
  2. rmdir /S/Q //递归删除文件夹,不提示

权限修饰符

  1. public

  2. protected

  3. default

  4. private

public protected default private
同类 v v v v
同包 v v v
子类 v v
不同包 v

jar

  1. jar: java archiver, java归档文件

    打包java库文件

  2. 对java的类文件进行归档

     //将foo目录下的所有文件进行归档,生成xxx.jar
    jar cvf xxx.jar -C foo/ .
    //归档时,指定入口点,会在清单文件中添加Mai-Class属性
    jar cvfe xxx.jar a.a1.a11.a111.A -C foo/ . //e指定入口点
  3. 通过jar文件执行程序

     java -cp xxx.jar a.a1.a11.a111.A
    java -cp xxx.jar;classes;...;. a.a1.a11.a111.A
    //使用java -jar参数来运行程序
    java -jar xxx.jar //需要在归档时指定入口点

作业

  1. 利用白富美接口案例,土豪征婚使用匿名内部类对象实现。

  2. 定义三角形类Trianle,里面包含三个int类型属性,分别表示三条边的长度,

    构造三角形对象时,任意两边之和是否大于第三边,如若不成立,抛出自定义异常。

  3. Person类中增加birthday属性,对setBirthday(int ,int , int )方法进行异常处理,

    要求年有效、月有效、日有效、年月日指定的具体日期有效,对不同情况分别抛出不同的异常。

    year:>1970, month:1-12, day:1-31

  4. 将类定义到指定的包下。com.xkzhai,编译之后,打成jar文件。

  5. 相互之间使用jar包,放置cp下,对class进行重用。

  6. 设计程序,考查修饰符。public -> protected -> default -> private(选做题)

  7. 编写ArrayTool,把冒泡排序,选择排序,二分法查找,空心三角形等打成jar包。

  8. 预习多线程。

Java基础7-异常;jar包的更多相关文章

  1. Java基础笔记-异常总结,包

    异常:是对问题的描述,将问题进行对象封装, 异常的体系: Throwable: 1.Error 2.Exception 1.RuntimeException 异常体系的特点: 异常体系中的所有类以及建 ...

  2. Java基础-Eclipse第三方安装包管理工具之Maven

    Java基础-Eclipse第三方安装包管理工具之Maven 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 玩过Linux的小伙伴应该都知道yum吧,我们只要把搭建好的yum仓库配 ...

  3. Redis(Windows安装方法与Java调用实例 & 配置文件参数说明 & Java使用Redis所用Jar包 & Redis与Memcached区别 & redis-cli.exe命令及示例)

    Windows下Redis的安装使用 0.前言 因为是初次使用,所以是在windows下进行安装和使用,参考了几篇博客,下面整理一下 1.安装Redis 官方网站:http://redis.io/ 官 ...

  4. 【转载】JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案

    JAVA SpringBoot 项目打成jar包供第三方引用自动配置(Spring发现)解决方案 本文为转载,原文地址为:https://www.cnblogs.com/adversary/p/103 ...

  5. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  6. Java学习-039-源码 jar 包的二次开发扩展实例(源码修改)

    最近在使用已有的一些 jar 包时,发现有些 jar 包中的一些方法无法满足自己的一些需求,例如返回固定的格式,字符串处理等等,因而需要对原有 jar 文件中对应的 class 文件进行二次开发扩展, ...

  7. 使用 DJ Java Decompiler 将整个jar包反编译成源文件

    使用 DJ Java Decompiler 将整个jar包反编译成源文件 所使用的软件是 DJ Java Decompiler 3.9. 下面是一个有用的参考文档,说明如何批量编译 http://ww ...

  8. java中最常用jar包的用途说明

    java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实 ...

  9. Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参

    Java项目导出为jar包+导出第三方jar包+使用命令行调用+传参 一.打包 情况1:不需要向程序传参数,并且程序没有使用第三方jar包 Eclipse上导出jar: 然后选择一个java文件作为入 ...

随机推荐

  1. springboot整合mybatis的多数据源解决办法

    最近项目有一个非解决不可的问题,我们的项目中的用户表是用的自己库的数据,但是这些数据都是从一个已有库中迁过来的,所以用户信息都是在那个项目里面维护,自然而然我们项目不提供用户注册功能,这就有个问题,如 ...

  2. 偶现bug如何处理?

    请先允许我对此类bug进行吐槽,相信做测试的同学都碰见过这种bug! 我们在测试过程中经常会碰见一类很头疼的bug,就是偶现性的bug,所谓偶现性,是相对于必现而言,这类bug有些可以有重现路径,但是 ...

  3. iOS开发基础-UITableView控件简单介绍

     UITableView 继承自 UIScrollView ,用于实现表格数据展示,支持垂直滚动.  UITableView 需要一个数据源来显示数据,并向数据源查询一共有多少行数据以及每一行显示什么 ...

  4. Git命令集

    安装 Window https://gitforwindows.org/ MAC http://sourceforge.net/projects/git-osx-installer/ git conf ...

  5. 初识:java虚拟机的内存划分

    什么是内存? 内存是计算机中的重要原件,临时存储区域,作用是运行程序.我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存.Java虚拟机要运行程序 ...

  6. JVM内存区域详解

    本文分为两部分:一是JVM内存区域的讲解:二是常见的内存溢出异常分析. 1.JVM内存区域 java虚拟机在执行java程序的过程中会把它管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途, ...

  7. Linux 系统中五笔输入法有些字打不出来(已解决)

    最近在使用CentOS7 桌面版本,在用五笔打字时,有些字打不出来,比如“覆盖”.但是在WIN下能打出来. 从网上查找原因,原来是需要改成GBK字符集.方法如下: 修改文件 vim /usr/shar ...

  8. Python——pickle模块(永久存储)

    一.作用 讲字典.列表.字符串等对象进行持久化,存储到磁盘上,方便以后使用. 二.dump()方法 pickle.dump(对象,文件,[使用协议]) 作用:将要持久化的数据“对象”,保存到“文件中” ...

  9. 使用ffmpeg视频切片并加密

    想达到的目的:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件: 电脑环境 Fedora,已经安装了最新的ffmpeg: ...

  10. 【51NOD1847】奇怪的数学题 min_25筛

    题目描述 记\(sgcd(i,j)\)为\(i,j\)的次大公约数. 给你\(n\),求 \[ \sum_{i=1}^n\sum_{j=1}^n{sgcd(i,j)}^k \] 对\(2^{32}\) ...