Day005 20210218-20210221
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"。
子类继承:
- 重写抽象方法,子类不是抽象类。
- 不重写抽象方法,子类必须还是抽象类。
抽象类可以没有抽象方法,但是有抽象方法的类一定要是抽象类。
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
- 快捷键fn + alt + insert;
- 快捷键ctrl + alt + T;
Day005 20210218-20210221相关推荐
- GitCode 2021-02-21 升级公告
GitCode 升级公告(2021-02-21) GitCode 计划于 2021年2月20日晚11点30 至 2021年2月21日 5点 进行系统维护升级,特此公告. 系统升级维护期间,所有项目代码 ...
- 2021-02-21 Python Easyocr 图片文字识别
Python Easyocr 图片文字识别 前段时间做了车牌识别相关的内容分享,参看: 车牌识别(1)-车牌数据集生成 车牌识别(2)-搭建车牌识别模型 今天给大家分享一个简单的OCR文本识别工具:e ...
- 2021-02-21 代码不规范,运维两行泪 代码规范
代码不规范,运维两行泪 编程江湖中一直盛传着一个段子,那就是要问程序员最讨厌哪 4 件事?那必须是:写注释.写文档.别人不写注释.别人不写文档. 动手写代码前尽量做到心中有数,思考清楚代码框架结构.现 ...
- 科大星云诗社动态20210218
[诗人背后的故事•上官婉儿--倾世之才] 那日,怀有身孕的上官夫人对公公上官仪说她做了一个梦,梦中一个金甲巨人将一把称交在她手上,说:持此可量天下. 当朝宰相上官仪沉吟良久,衰老的脸上逐渐露出光芒,他 ...
- 科大星云诗社动态20210221
[每日一诗] 定风波·南海归赠王定国侍人寓娘 苏轼 序:王定国歌儿曰柔奴,姓宇文氏,眉目娟丽,善应对,家世住京师.定国南迁归,余问柔:"广南风土, 应是不好?"柔对曰:" ...
- 20210218:力扣第228周周赛(下)
力扣第228周周赛(下) 题目 思路与算法 代码实现 写在最后 题目 袋子里最少数目的球 一个图中连通三元组的最小度数 思路与算法 经典二分搜索题目,套模板,主要搞清楚如何检查遍历的每一个数是否符合不 ...
- ApacheCN 计算机视觉译文集 20210218 更新
新增了六个教程: OpenCV3 安卓应用编程 零.前言 一.设置 OpenCV 二.使用相机帧 三.应用图像效果 四.识别和跟踪图像 五.将图像跟踪与 3D 渲染相结合 六.通过 JNI 混合 Ja ...
- Day005 - 循环练习与列表基础
列表基础 前提概念 容器 - 一个容器型数据可以同时保存多个其他的数据: 元素 - 容器中每一个独立的数据: 列表 - List 列表时容器型数据类型(序列),[]作为容器的标志,里面的多个元素用逗号 ...
- Java 学习笔记 Day005 (补day5 的练习题)
昨天一直在练习一些经典的题目,没有时间呀.突然发现时间好宝贵,时间都不够用. 以下练习题的解法纯属个人见解.如有问题,还请指出! /*1.循环录入学生的成绩,计算平均分,学生的个数不定,当输入的分数小 ...
- [code] PTA 胡凡算法笔记 DAY005
文章目录 题目 B1018 题目 A1042 小结 周五刷了一个小时结果只刷了一题多一点,时间也有点晚了,blog就没更新.然后周六继续周五没完成的,看了一下逻辑有点混乱没继续. 题目 B1018 题 ...
最新文章
- 是vans_你知道VANS有哪些好鞋不贵系列?
- 总结一下silverlight文章,然后死等10月10日的正式版
- 棋牌游戏服务器架构: 总体设计
- 学习微信公众号oauth2.0
- think in java - 第一章 学习笔记
- OpenShift 4 - 在离线环境中用 oc-mirror 获取 OpenShift 和 Opeartor 的相关镜像
- 自学c语言后的感受,一路走来,浅谈c语言的学习感想
- 当无边框窗口被子窗口遮挡导致难以调节窗口大小时,可通过处理 NCHITTEST 消息重新支持调节窗口大小
- win7计算机属性资源管理器停止工作,Win7系统Windows资源管理器已停止工作怎么解决?...
- 第一次搭建ftp遇见的蹩脚的问题
- 高考加油的c语言程序,2020祝高三高考加油的句子 高考加油一句话
- Android 画闹钟
- 算法 64式 7、搜索算法整理_第1部分_1到15题
- html中 主标题与副标题,主标题和副标题的范例(论文正副标题格式样板)
- 抖音小店还能做吗?如何解决拍单问题?
- 嗨,我亲爱的朋友们!心存感恩1
- spring中读不到配置文件问题
- 外贸ERP系统的操作有什么特点?中小企业适合选择吗?
- 亚马逊推出的「距离助手」,好像孙悟空给唐僧画的圈圈啊!
- ajax+json自动提示Demo
热门文章
- Keil5二步解决中文乱码,注释乱码问题
- 启动vue项目的时候报错提示To install it, you can run: npm install --save core-js/modules/es.regexp.dot
- 监控mysql连接池信息_druid-带监控功能的数据库连接池
- sc config tlntsvr start=_全新四川方言剧【卓别林SC方言版】来啦!
- python全局变量一般没有缩进_python全局变量与局部变量
- 计算机无法检测更新失败怎么办,Win10电脑更新失败提示你的设备中缺少重要的安全和质量修复如何解决...
- android 的接口回调,android 接口 接口回调
- Python与模块--01sys
- 对网上盛传的两千万泄漏数据的简单分析
- Linux 建立ftp站点