Day 005 20210218-20210221

面向对象和异常处理太绕了,之后或许得回看。不过好在内容不多。

面向对象OOP(Object-Oriented Programming)

类与对象

  • 类:一种抽象得数据类型,如:动物、猫、狗。。。
  • 对象:抽象概念的具体实例,如:甲、乙、丙。。。

使用new创建对象。

构造器

  • 名字与类名相同。
  • 无返回值、返回值类型,但同时也没有"void"。
  • 分为无参构造器有参构造器
  • 无参构造器默认定义。但当存在有参构造器时必须定义无参构造器。

无参构造器

public class Demo01{public Demo01(){// 语句}
}

有参构造器

public class Demo01{public Demo01(int a, String name){// 语句}
}

快捷键

alt + insert,即(fn + alt + delete)。选择constructor。

三大特性

  • 封装
  • 继承
  • 多态

封装

高内聚,低耦合。

属性私有,get/set。

public class Demo02{private int a;private String name;private double b;public int getA(){return this.a;}public void setA(int a){this.a = a;}public String getName(){return this.name;}public void setName(String name){this.name = name;}public double getB(){return this.b;}public void setB(double b){this.b = b;}
}import Demo02;public class Test{public static void main(String[] args){Demo02 demo02 = new Demo02();// System.out.println("demo02.a"); // 报错。System.out.println(demo02.getA()); // 0demo02.setA(1);System.out.println(demo02.getA()); // 1}
}

封装有利于程序的安全性。

继承

java只有单继承,没有多继承,但有多重继承。

子类"is a"父类,猫是动物,狗是动物,人是动物。

继承,依赖,组合,聚合。

子类继承父类的除private外全部方法和属性。

子类extends父类

public class Animal{}public class Dog extends Animal{}
Object类

Object类是所有类的父类。

super
// 父类:
public class Parent{protected String name = "cat01";
}// 子类:
public class Son extends Parent{private String name = "cat02";public void test(String name){System.out.println(name);System.out.println(this.name);System.out.println(super.name); // super访问父类属性}
}// 试验类
import Son;public class Test{public static void main(String[] args){Son son = new Son("cat03");son.test();/*cat03cat02cat01*/}
}

在无参构造器中,子类的无参构造器默认首行super();语句调用父类属性和方法。

super();位于无参构造器内部语句的第一行;

this();位于无参构造器内部语句的第一行;

因此,一个无参构造器中无法同时含有super();语句和this();语句

方法重写

子类继承父类方法,但如果子类方法和父类方法内容不同,在父类的引用指向子类时,子类重写了父类的方法,执行子类的方法。

Father father = new Child();
代码:
public class Animal{public int weight;public int age;public void shout(){System.out.println("shout");}
}public class Cat extends Animal{public void shout(){System.out.println("Meow!");}public void roll(){System.out.println("roll");}
}import Animal;
import Cat;public class Test{public static void main(String[] args){Animal animal = new Cat();animal.shout(); // Meow!//animal.roll(); // 报错!}
}
原因分析:
Animal x = new Cat();

我有许多动物(Animal类型)。

现在创建一个名为x的动物(x动物),且它本身是一只猫(Cat类型)。

但是我不知道x动物是一只猫,我只知道x动物是一只动物。

动物都会shout,但是只有猫会roll。

我想要看我创建的x动物到底会什么。

于是我只能让x动物shout,而不能让x动物roll。

而这个x动物本身是一只猫。

所以x动物shout结果为Meow!,x动物没有roll。

故输出Meow!。

修饰符范围:
// public > protected > default(不写修饰符时默认为default) >private

多态

一个父类方法因为多个子类的重写而展现出多样性。

instanceof关键词

规则

Father a = new Son();

如果

类B是Father类直接或间接的一个子类(包括相同类);

Son类是类B直接或间接的一个子类(包括相同类),则

a instanceof B == true; // 黑猫是猫吗? true

如果

类B是Father类直接或间接的一个子类(包括相同类);

Son类不是类B直接或间接的一个子类(包括相同类),则

a instanceof B == false; // 黄狗是猫吗? false

如果

类B不是Father类直接或间接的一个子类(包括相同类),则

// a instanceof B 报错 // 玫瑰花是猫吗? 报错

示例

import Parent;
import Son1;public class Test{Object obj = new Son1();System.out.println(obj instanceof Son1); // trueSystem.out.println(obj instanceof Son2); // falseSystem.out.println(obj instanceof Parent); // trueSystem.out.println(obj instanceof Object); // trueSystem.out.println(obj instanceof String); // falseParent parent = new Son1();System.out.println(parent instanceof Son1); // trueSystem.out.println(parent instanceof Son2); // falseSystem.out.println(parent instanceof Parent); // trueSystem.out.println(parent instanceof Object); // trueSystem.out.println(parent instanceof String); // 报错
}

类型转换

  • 由子类至父类直接转换,但会丢失子类独有的方法;
Parent parent = new Son(); // 子类有独有的方法son();
// parent.son(); 报错
  • 由父类至子类强制转换,但会丢失精度。
((Son) parent).son();

static关键词

静态类,静态方法,静态代码块,静态导入包。。。

{// 匿名代码块System.out.print(1);
}static {// 静态代码块 最早加载,只加载一次。System.out.print(2);
}public Animal{// 构造方法System.out.print(3);
}public static void main(String[] args){Animal animal1 = new Animal(); // 213Animal animal2 = new Animal(); // 13
}

抽象类

abstract修饰符

无方法语句。

不能被"new"。

子类继承:

  1. 重写抽象方法,子类不是抽象类。
  2. 不重写抽象方法,子类必须还是抽象类。

抽象类可以没有抽象方法,但是有抽象方法的类一定要是抽象类。

public abstract class Father{ // 抽象类public abstract void test(); // 抽象方法
}public class Son{@Overridepublic void test(){System.out.println("Test");}
}import Son;public class Test{public static void main(String[] args){Son son = new Son();son.test(); // Test}
}

接口

interface关键词

接口方法均为抽象方法

implements连接

创建接口

public interface Animal{void shout();
}public interface Master{void roll();
}

类连接接口

可以连接多个接口,实现多继承。

需要重写接口中的方法

public class Cat implements Animal, Master{@Override // 快捷键fn + alt + insertpublic void shout(){System.out.println("Meow!");}@Overridepublic void roll(){System.out.println("roll~roll~~");}
}

运行主程序

import Cat;public class Test{public static void main(String[] args){Cat cat = new Cat();cat.shout(); // Meow!cat.roll(); // roll~roll~~}
}

内部类

成员内部类

静态内部类

局部内部类

匿名内部类

new Cat().shout(); // Meow!
new Cat().roll(); // roll~roll~~

异常和错误

三大种类

检查性异常

程序员无法预见,如:

用户输入导致异常(1/0 = ?),文件路径异常。

运行时异常

程序员可以避免,如:

public int a(){return b();
}public int b(){return a();
}

错误Error

无法在程序中检测到,常导致程序崩溃。如:

栈溢出。

抛出和捕获异常

try, catch, finally, throw, throws关键词

快捷键:选中想要用try监控的语句ctrl + alt + T,选择。

catch

在catch的过程中,只会执行最先符合的那一个,因此要把范围较小的放在前面,范围较大的放在后面,而范围最大的Throwable则放在最后(如果有Throwable的话)。

public class Test{public void cal(){System.out.println(a/b);}public static void main(String[] args){int a = 1;int b = 0;try{ // try监控的范围new Test().cal();}catch (Error e){System.out.println("变量b不能为零。");}catch (Exception e){// 语句}catch (Throwable t){// 语句}finally{ // 结束语句,可不写。System.out.println("finally");}}
}

throw

主动抛出异常,在上一级捕捉。

public class Test{public void test(int a, int b) throws ArithmeticException{ // 此处为throwsif(b == 0){throw ArithmeticException(); // 此处为throw}}public static void main(String[] args){try{new Test().test(1,0);}catch (ArithmeticException e){e.printStackTrace(); // 打印异常情况}}
}

自定义异常

Tips

  1. 快捷键fn + alt + insert;
  2. 快捷键ctrl + alt + T;

Day005 20210218-20210221相关推荐

  1. GitCode 2021-02-21 升级公告

    GitCode 升级公告(2021-02-21) GitCode 计划于 2021年2月20日晚11点30 至 2021年2月21日 5点 进行系统维护升级,特此公告. 系统升级维护期间,所有项目代码 ...

  2. 2021-02-21 Python Easyocr 图片文字识别

    Python Easyocr 图片文字识别 前段时间做了车牌识别相关的内容分享,参看: 车牌识别(1)-车牌数据集生成 车牌识别(2)-搭建车牌识别模型 今天给大家分享一个简单的OCR文本识别工具:e ...

  3. 2021-02-21 代码不规范,运维两行泪 代码规范

    代码不规范,运维两行泪 编程江湖中一直盛传着一个段子,那就是要问程序员最讨厌哪 4 件事?那必须是:写注释.写文档.别人不写注释.别人不写文档. 动手写代码前尽量做到心中有数,思考清楚代码框架结构.现 ...

  4. 科大星云诗社动态20210218

    [诗人背后的故事•上官婉儿--倾世之才] 那日,怀有身孕的上官夫人对公公上官仪说她做了一个梦,梦中一个金甲巨人将一把称交在她手上,说:持此可量天下. 当朝宰相上官仪沉吟良久,衰老的脸上逐渐露出光芒,他 ...

  5. 科大星云诗社动态20210221

    [每日一诗] 定风波·南海归赠王定国侍人寓娘 苏轼 序:王定国歌儿曰柔奴,姓宇文氏,眉目娟丽,善应对,家世住京师.定国南迁归,余问柔:"广南风土, 应是不好?"柔对曰:" ...

  6. 20210218:力扣第228周周赛(下)

    力扣第228周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 袋子里最少数目的球 一个图中连通三元组的最小度数 思路与算法 经典二分搜索题目,套模板,主要搞清楚如何检查遍历的每一个数是否符合不 ...

  7. ApacheCN 计算机视觉译文集 20210218 更新

    新增了六个教程: OpenCV3 安卓应用编程 零.前言 一.设置 OpenCV 二.使用相机帧 三.应用图像效果 四.识别和跟踪图像 五.将图像跟踪与 3D 渲染相结合 六.通过 JNI 混合 Ja ...

  8. Day005 - 循环练习与列表基础

    列表基础 前提概念 容器 - 一个容器型数据可以同时保存多个其他的数据: 元素 - 容器中每一个独立的数据: 列表 - List 列表时容器型数据类型(序列),[]作为容器的标志,里面的多个元素用逗号 ...

  9. Java 学习笔记 Day005 (补day5 的练习题)

    昨天一直在练习一些经典的题目,没有时间呀.突然发现时间好宝贵,时间都不够用. 以下练习题的解法纯属个人见解.如有问题,还请指出! /*1.循环录入学生的成绩,计算平均分,学生的个数不定,当输入的分数小 ...

  10. [code] PTA 胡凡算法笔记 DAY005

    文章目录 题目 B1018 题目 A1042 小结 周五刷了一个小时结果只刷了一题多一点,时间也有点晚了,blog就没更新.然后周六继续周五没完成的,看了一下逻辑有点混乱没继续. 题目 B1018 题 ...

最新文章

  1. 是vans_你知道VANS有哪些好鞋不贵系列?
  2. 总结一下silverlight文章,然后死等10月10日的正式版
  3. 棋牌游戏服务器架构: 总体设计
  4. 学习微信公众号oauth2.0
  5. think in java - 第一章 学习笔记
  6. OpenShift 4 - 在离线环境中用 oc-mirror 获取 OpenShift 和 Opeartor 的相关镜像
  7. 自学c语言后的感受,一路走来,浅谈c语言的学习感想
  8. 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
  9. win7计算机属性资源管理器停止工作,Win7系统Windows资源管理器已停止工作怎么解决?...
  10. 第一次搭建ftp遇见的蹩脚的问题
  11. 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
  12. Android 画闹钟
  13. 算法 64式 7、搜索算法整理_第1部分_1到15题
  14. html中 主标题与副标题,主标题和副标题的范例(论文正副标题格式样板)
  15. 抖音小店还能做吗?如何解决拍单问题?
  16. 嗨,我亲爱的朋友们!心存感恩1
  17. spring中读不到配置文件问题
  18. 外贸ERP系统的操作有什么特点?中小企业适合选择吗?
  19. 亚马逊推出的「距离助手」,好像孙悟空给唐僧画的圈圈啊!
  20. ajax+json自动提示Demo

热门文章

  1. Keil5二步解决中文乱码,注释乱码问题
  2. 启动vue项目的时候报错提示To install it, you can run: npm install --save core-js/modules/es.regexp.dot
  3. 监控mysql连接池信息_druid-带监控功能的数据库连接池
  4. sc config tlntsvr start=_全新四川方言剧【卓别林SC方言版】来啦!
  5. python全局变量一般没有缩进_python全局变量与局部变量
  6. 计算机无法检测更新失败怎么办,Win10电脑更新失败提示你的设备中缺少重要的安全和质量修复如何解决...
  7. android 的接口回调,android 接口 接口回调
  8. Python与模块--01sys
  9. 对网上盛传的两千万泄漏数据的简单分析
  10. Linux 建立ftp站点