Java_Day05学习

Object类被子类经常重写的方法

方法说明
toString()返回当前对象本身的有关信息,按字符串对象返回
equals()比较两个对象是否是同一个对象,是则返回****true
hashCode()返回该对象的哈希代码值
getClass()获取当前对象所属的类信息,返回Class对象

Object类

Object类的 equals() 方法
比较两个对象是否是同一个对象,是则返回true
    
    
instanceof
	用于判断一个引用类型所引用的对象是否是一个类的实例
	可以用 instanceof 判断一个类是否实现了某个接口,也可以用它来判断一个实例对象是否属于一个类。instanceof 的语法格式为:
	eg:
	if (a instanceof Cat) { // 猫做的事情
            Cat c = (Cat) a;
            c.work();
    对象 instanceof(或接口)
它的返回值是布尔型的,或真(true)、或假(false)

多态

定义:多态就是指一个类实例的相同方法在不同情形有不同表现形式。
    //同一个引用类型,使用不同的实例而执行不同操作
	eg:
            //父类的声明   对象   =    new     子类的对象;
            Person_homework test = new China_People();
            //父类和子类中都存在的方法 最终执行的是子类的方法
            test.work();

优点:
	//频繁修改代码,代码可扩展性、可维护性差
    

多态就是同一个接口,使用不同的实例而执行不同操作
     
多态的三个条件:
    继承的存在(继承是多态的基础,没有继承就没有多态);
    子类重写父类的方法(多态下调用子类重写的方法);
    父类引用变量指向子类对象(子类到父类的类型转换)。
    
子类转换成父类时的规则:
    将一个父类的引用指向一个子类的对象,称为向上转型(upcasting),自动进行类型转换。
    
    
        
        
        
        
        
  总结:
一、多态
1、定义:
	1)生活中:同一事物,在不同环境下,表现出不同的形态
	2)程序中:同一引用类型,传入不同的实例,会得到不同结果
2、多态的实现步骤:
	1)子类继承父类
	2)子类重写父类的方法
	3)父类引用,传入子类实例
3、多态的两种表现形式
	1)父类作为方法的参数出现
	2)父类作为方法的返回值出现
4、引用类型之间转换
	1)向上转型:直接转,即  父类  父对象=new 子类();
	2)向下转型:强制转,即  子类  子对象=(父类)父对象;强制转换易引发ClassCastException,因此转换之前需判断类型是否匹配
		if(obj instanceof)则进行转换
	3)原因:子  is  a  父;  父 has 子
5、多态的优点:提高代码的可扩展性
6、父类引用指向子类实例的注意事项
	1)父类引用指向父类实例:父类 父对象=new 父类();可访问父类的允许访问成员
	2)子类引用指向子类实例:子类 子对象=new 子类();可访问父类和子类的允许访问成员
	3)父类引用指向子类实例:父类 父对象=new 子类();可以访问父类允许访问的成员;不允许访问子类特有成员;但如果子类重写了父类方法,则调用的是子类重写后的方法
	
    
    
    
    
    
    

多态的例子

                        public class TestAnimalDemo {
                            public static void main(String[] args) {
                                // 向上转型
                                Animal a = new Cat(); 
                                a.eat(); // 调用的是 Cat 的 eat
                                
                                
                                
                                show(new Cat()); // 以 Cat 对象调用 show 方法
                                show(new Dog()); // 以 Dog 对象调用 show 方法
                                Cat c = (Cat) a; // 向下转型
                                c.work(); // 调用的是 Cat 的 work
                            }
                            /**
                            *
                            */
                            public static void show(Animal a) {
                                a.eat();
                                // 类型判断
                                if (a instanceof Cat) { // 猫做的事情
                                    Cat c = (Cat) a;
                                    c.work();
                                } else if (a instanceof Dog) { // 狗做的事情
                                    Dog c = (Dog) a;
                                    c.work();
                                }
                            }
                        }
                        abstract class Animal {
                            abstract void eat();
                        }
                        class Cat extends Animal {
                            public void eat() {
                                System.out.println("吃鱼");
                            }
                            public void work() {
                                System.out.println("抓老鼠");
                            }
                        }
                        class Dog extends Animal {
                            public void eat() {
                                System.out.println("吃骨头");
                            }
                            public void work() {
                                System.out.println("看家");
                            }
                        }


输出:
    

                    吃鱼
                    抓老鼠
                    吃骨头
                    看家
                    吃鱼
                    抓老鼠

抽象类

1.定义:Java也可以创建一种类专门用来当作父类,这种类称为“抽象类”;
//抽象类的作用有点类似“模版”,其目的是要设计者依据它的格式来修改并创建新的类。但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。
    eg:
	abstract class 类名称 // 定义抽象类
{
    声明数据成员;
    
    访问权限 返回值的数据类型 方法名称(参数...//定义一般方法
    {
        ...
    }
    
    abstract 返回值的数据类型 方法名称(参数...;
    //定义抽象方法,在抽象方法里,没有定义方法体
}
//但可以创建一个引用变量,其类型是一个抽象类,指向非抽象的子类实例
//普通类可以被实例化

2.规则:
    //抽象类和抽象方法都必须用abstract关键字来修饰;
    //抽象类不能被实例化,也就是不能用new关键字去产生对象;
    //抽象方法只需声明,而不需实现;
    //含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才		能被实例化,否则这个子类还是个抽象类。


2.抽象方法VS普通方法
有无方法体
    
    
    
3.抽象类与抽象方法的使用
    //抽象类中可以没有抽象方法,但包含了抽象方法的类必须被定义为抽象类
    //如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
    //没有抽象构造方法,也没有抽象静态方法
    //抽象类中可以有非抽象的构造方法,创建子类的实例时可能调用
    
    
    
    

接口

public interfaceMyInterface {public void foo()//其他方法}

1.接口的特性
	//接口不可以被实例化
	//实现类必须实现接口的所有方法
    //实现类可以实现多个接口 implements、多个接口使用逗号隔开
    //接口中的变量都是静态常量(public static final)
2.面向接口编程
    程序设计时:
    	关心实现类有何能力,而不关心实现细节
    	面向接口的约定而不考虑接口的具体实现

异常

1.定义:
	异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
2.Java的异常处理的5个关键字:trycatchfinallythrowthrows
	try() :执行可能产生异常的代码,放到这个模块
	catch() 发生异常时,捕获异常,丢给E
	finally() 无论是否发生异常,代码总能执行
	throw()手动抛出异常
	throws()抛出的各种异常声明方法可能要抛出各种异常
        

printStackTrace()的堆栈跟踪功能显示出程序运行到当前类的执行流程
        可以打印出异常堆栈信息
        //异常类型 InputMismatchException
         java.util.InputMismatchException
        //哪一个方法(main)中抛出了异常,出现异常的位置 Test3.java:15
         at cn.jbit.exception.Test3.main(Test3.java:15)
getMessage()返回异常信息描述字符串,是printStackTrace()输出信息的一部分
        
        
eg:
package com.dx.test04;
import java.util.Scanner;
public class Java01 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int a = input.nextInt();
        if (a > 10) {
            try {
                //1、将所有的可能出现的异常代码放到try
                System.out.println("创建流对象"); //出现异常前的都会被执行并输出
                System.out.println(10 / 0);
                System.out.println("写文件");
            } catch (Exception e) {    //若 catch (异常类型ex)  异常类型不匹配,程序中断
                // 2捕捉异常 ->异常处理(只有出现异常了,才会执行catch)
                 e.printStackTrace();     //打印出现的异常情况
                System.out.println("出现异常啦.....");
                return XXX; //如果有return 要先执行finally 再返回catch执行return
            } finally {
                //不管有异常还是没有异常,finally代码一定会被执行
                //唯一不执行的情况,catch没抓到异常 ,直接报错,中断程序了,退出Java虚拟机
                 System.out.println("释放流");
            }
        }else{
            System.out.println("我也不知道干啥...");
        }
        System.out.println("不能影响我去玩....");
    }
}
打印结果:
    
    创建流对象
    出现异常啦.....
    释放流
    不能影响我去玩....
    java.lang.ArithmeticException: / by zero
        at com.dx.test04.Java01.main(Java01.java:11)

在这里插入图片描述

多重catch块

//引发多种类型的异常
   排列catch语句的顺序:
    	先子类后父类
    	发生异常时按顺序逐个匹配
		只执行第一个与异常类型匹配的catch语句
    
    
tips:
    //try-catch-finally结构中try语句块是必须的,catch、finally语句块均可选,但两者至少出现之一
	//try-catch块中存在return语句,是否还执行finally块? 如果执行,说出执行顺序
    //try-catch-finally块中,finally块唯一不执行的情况是什么?

声明异常

throw 自动抛出异常
public void myMethod() throw IOException, SQLException {
    // 方法体
}
    
throws 手动抛出异常
public void myMethod() throws IOException, SQLException {
    // 方法体
}
    
如果在一个方法体中抛出了异常,如何通知调用者?
	throws声明某个方法可能抛出的各种异常,多个异常用逗号隔开
//方式1:调用者处理异常
//方式2:调用者继续声明异常 ⚫main()方法声明的异常由Java虚拟机处理
    
    
throwthrows区别

在这里插入图片描述

//如果一个值为null,不能.属性和方法,一旦.就抛出空指针异常

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/883873.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何进行“服务器内部错误”的诊断 | OceanBase诊断案例

本文作者:任仲禹,爱可生数据库高级工程师,擅长故障分析和性能优化。 的OMS迁移工具具备丰富的功能。但在实际运维场景中,我们可能会遇到各种问题,其中“服务器内部错误”便是一个较为棘手的问题,因为界面上…

Mysql之索引优化

指定索引 当一个字段上既有单列索引,又有复合索引时,我们可以通过以下的SQL提示来要求该SQL语句执行时采用哪个索引: use index(索引名称):建议使用该索引,只是建议,底层mysql会根据实际效率来考虑是否使用…

通用运维基础

一 网络基础 知识点:网络交换1.1 VLAN1.2VxLAN2.网络路由3.网络常用命令目标:1. 了解网络的基本概念 2. 掌握常用的网络排错命令 1、网络交换 1.1 网络虚拟化 什么是网络虚拟化 网络虚拟化是指虚拟网络节点之间的连接并不使用物理线缆连接,而是依靠特定的虚拟化链路相连…

HDFS分布式文件系统01-HDFS架构与SHELL操作

HDFS分布式文件系统 学习目标第一课时知识点1-文件系统的分类单机文件系统网络文件系统分布式文件系统 知识点2-HDFS架构知识点3-HDFS的特点知识点4-HDFS的文件读写流程知识点5-HDFS的健壮性 第二课时知识点1-HDFS的Shell介绍HDFS Shell的语法格式如下。HDFS Shell客户端命令中…

蜂窝物联网全网通sim卡切网技术方案软硬件实现教程(设备根据基站信号质量自动切网)

01 物联网系统中为什么要使用三合一卡 三合一卡为用户解决了单一运营商网络无法全覆盖的缺陷,避免再次采购的经济成本以及时间成本和因没有信号设备停止工作造成的损失,保证仅需一次采购并提高设备工作效率和入网活跃度。例如下面地区的设备&#xff0…

WPS中让两列数据合并的方法

有这样一个需求,就是把A列数据和B列数据进行合并(空单元格略过)具体实现效果如图下: 该如何操作呢? 首先在新的一列第一个单元格中输入公式"A1&B1" 然后回车,就出现了两列单元格数据合并的效…

APScheduler、Django实现定时任务,以及任务动态操作

环境:Windows 11、python 3.12.3、Django 4.2.11、 APScheduler 3.10.4 背景:工作需要使用且用法较为复杂,各种功能基本都使用了 事件:20240920 说明:记录,方便后期自己查找 1、搭建基础环境 文件结构图…

node.js从入门到快速开发一个简易的web服务器

浏览器中JavaScript学习路径: JavaScript基础语法浏览器内置API(DOMBOM)第三方库(jQuery,art-template等) Node.js的学习路径 JavaScript基础语法Node.js内置API模块(fs、path、http等)第三方API模块(express、mysql等) Node.js安装 通过Node.js 来运行Javascript 代码&am…

ElasticSearch的安装与使用

ElasticSearch的安装与使用 docker安装 docker进行安装Elasticsearch 1.拉取镜像 docker pull elasticsearch:7.6.22.创建实例 mkdir -p /docker/elasticsearch/config mkdir -p /docker/elasticsearch/data echo "http.host: 0.0.0.0" >> /docker/elastic…

C语言课程设计题目四:实验设备管理系统设计

序号系统设计题目进度1职工信息管理系统设计已完成,在本专栏2图书信息管理系统设计已完成,在本专栏3图书管理系统设计已完成,在本专栏4实验设备管理系统设计已完成,在本专栏5西文下拉菜单的设计链接6学生信息管理系统设计链接7学生…

c++9月20日

1.思维导图 2.顺序表 头文件 #ifndef RECTANGLE_H #define RECTANGLE_H#include <iostream>using namespace std;using datatype int ;//类型重定义class Seqlist { private://私有权限datatype *ptr; //指向堆区申请空间的起始地址int size;//堆区空间的长度int len …

汽车一键启动开关

‌ 一键启动点火开关是汽车上的一个重要功能&#xff0c;它替代了传统的机械钥匙&#xff0c;实现了简约的打火和熄火操作‌。移动管家一键启动点火开关的详细介绍&#xff1a; 汽车一键启动按钮12V24V通用超薄型汽车一键启动按键发动机启动按钮点火开关。超薄&#xff0c;…

软件测试学习笔记丨curl命令发送请求

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32332 一、简介 cURL是一个通过URL传输数据的&#xff0c;功能强大的命令行工具。cURL可以与Chrome Devtool工具配合使用&#xff0c;把浏览器发送的真实请求还原出来&#xff0c;附带认证信…

嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)

前言&#xff1a; 本文是基于B站草履虫编写的平衡车相关内容&#xff0c;包括模块和基础知识&#xff0c;结合代码进行讲解&#xff0c;将知识进行汇总 &#xff08;由于本篇内容较长&#xff0c;请结合目录使用) 注&#xff1a;基于开源精神&#xff0c;本文仅供学习参考 目…

如何用ChatGPT制作一款手机游戏应用

有没有想过自己做一款手机游戏&#xff0c;并生成apk手机应用呢&#xff1f;有了人工智能&#xff0c;这一切就成为可能。今天&#xff0c;我们就使用ChatGPT来创建一个简单的井字棋游戏&#xff08;Tic-Tac-Toe&#xff09;&#xff0c;其实这个过程非常轻松且高效。 通过Cha…

windows 使用PortAudio 对电脑进行录音

PortAudio 采用回调方式&#xff0c;这样可以一帧一帧的处理 头文件&#xff1a; #ifndef __CAPTURE_AUDIO__ #define __CAPTURE_AUDIO__#include <functional> #include <windows.h> #include "portaudio.h"#define SAMPLE_RATE 44100class CaptureAu…

大数据毕业设计选题推荐-国潮男装微博评论数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇…

JavaSE——lombok、juint单元测试、断言

一、lombok的使用 默认jvm不解析第三方注解&#xff0c;需要手动开启 链式调用 二、juint单元测试 下载juint包 public class TestDemo {// 在每一个单元测试方法执行之前执行Beforepublic void before() {// 例如可以在before部分创建IO流System.out.println("befor…

89个H5小游戏源码

下载地址&#xff1a;https://download.csdn.net/download/w2sft/89791650 亲测可用&#xff0c;代码完整&#xff0c;都是htmljs&#xff0c;保存到本地即可。 游戏截图&#xff1a;

【AI创作组】工程方向的硕士研究生学习Matlab的路径

1. MATLAB软件概述 1.1 MATLAB发展历程 MATLAB自20世纪70年代诞生以来,已经经历了多次重要的版本更新和功能扩展。 初始版本:MATLAB的前身只是一个简单的交互式矩阵计算器,由Cleve B. Moler博士在1970年代初期开发,目的是为了方便学生和研究人员使用线性代数软件包LINPAC…