Java_Day05学习

news2024/11/15 18:02:30

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.coloradmin.cn/o/2161381.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统

要使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统,您可以按以下步骤进行。这个系统将利用 Loki 作为日志存储和聚合系统,Loki4j 作为 Java 的日志插件,Grafana 用于日志的可视化。 1.工具介绍&…

中兴数通产品厉害了,获得CC EAL3+认证!

不知道朋友们最近听说没有,中兴的数通产品是真争气,有25款成功通过了国际信息技术安全评估通用准则CC的EAL 3级别认证。中兴一直是通讯行业的领先企业,这次CC EAL 3级别认证覆盖了多款主流设备型号,证明了它在网络安全领域的实力确…

TraceId在线程池及@Async异步线程中如何传递

何时使用线程池 提起线程池相信大家都不陌生,什么情况下会考虑使用线程池呢?我总结了一下大概是这么几种情况 第一种情况:程序中有任务需要异步执行。这样不可避免的要分配线程去执行,如果这个异步任务执行的频次很低&#xff0…

模拟实现 string 类的一些常用函数

目录 构造函数 析构函数 拷贝构造 赋值重载 迭代器( begin() 和 end() ) 运算符重载流插入( operator << ( ) ) size() capacity() 运算符重载operator[ ] clear() reserve ( ) push_back ( ) append ( ) 运算符重载 operator ( ) insert ( ) erase ( )…

IO相关流

IO流 一、C语言的输入与输出1、介绍2、输入输出缓冲区&#xff08;1&#xff09;介绍&#xff08;2&#xff09;示意图 二、流1、介绍2、主要特点 三、CIO流1、介绍2、示意图 四、iostream1、介绍2、基本概念3、注意 五、类型转换1、operator bool&#xff08;1&#xff09;介绍…

计算机毕业设计非遗项目网站 登录注册搜索 评论留言资讯 前后台管理/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

遗项目网站需求&#xff0c;以下是一个基于Spring Boot、Java Web、J2EE技术栈&#xff0c;使用MySQL数据库&#xff0c;并结合Vue实现前后端分离的简要设计方案&#xff1a; 系统功能概述 ‌用户登录与注册‌&#xff1a;实现用户的注册、登录功能&#xff0c;确保用户信息的…

【Python】PyCharm: 强大的 Python 开发环境

⭕️宇宙起点 &#x1f4e2; 引言&#x1f3ac; 什么是 PyCharm&#xff1f;&#x1f528; PyCharm 的核心特性1. 智能代码编辑2. 调试和测试3. 项目和代码结构导航4. 集成 AI 助手5. 远程开发6. 集成数据库7. 科学工具8. 版本控制集成9. Web 开发 &#x1f4e6; 安装 PyCharm&…

【NLP】daydayup 词向量训练模型word2vec

词嵌入算法 word2vec word2vec是一种高效训练词向量的模型&#xff0c;基本出发点是上下文相似的两个词。它们的词向量也应该相似。一般分为CBOW&#xff08;Continuous Bag-of-Words&#xff09;与 Skip-Gram CBOW 词袋模型&#xff0c;使用中心词周围的词来预测中心词&…

《微信小程序实战(4) · 地图导航功能》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

seL4 Mapping(三)

官网链接: Mapping Mapping 这节课程主要是介绍seL4的虚存管理。 虚存 Virtual memory 除了用于操作硬件分页结构的内核原语之外&#xff0c;seL4不提供虚拟内存管理。用户必须为创建中间级分页结构&#xff0c;映射页面以及取消映射页面提供服务。 用户可以随意的定义他们…

Python图表显示添加中文

import re import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties# 动态加载字体文件 font_path /usr/local/sunlogin/res/font/wqy-zenhei.ttc # 替换为实际字体路径 my_font FontProperties(fnamefont_path)# 定义日志…

Go语言基础学习01-Liunx下Go开发环境配置;源码组织方式;go build/install/get详解

目录 Linux环境下配置安装VScode并配置Go语言开发环境Go语言源码的组织方式Go语言源码安装后的结果Go程序构建和安装的过程go build扩展go get 命令详解 之前学习过Go语言&#xff0c;学习的时候没有记录笔记&#xff0c;最近找了个极客时间的Go语言36讲&#xff0c;打算时间学…

影响RPA流程稳定运行的若干因素|实在RPA研究

RPA发展现状 当前&#xff0c;中国正处于实现高质量发展、数字化转型升级的关键时期。RPA作为数字化转型的一项重要工具&#xff0c;已经开始在许多领域发挥积极作用。 RPA&#xff08;Robotic Process Automation 机器人流程自动化&#xff09;是一种通过软件机器人自动执行…

stm32 keil有一些别人的工程在你这打开为什么会乱码?如何解决的

因为别人编辑代码使用的编辑器和你的不一样&#xff0c;要更正可以调一下自己的翻译器编码格式 也可以直接换掉文件的格式&#xff0c; 用记事本打开文件&#xff0c;然后点会另存为&#xff0c;下面有个编码格式选择&#xff0c;换成你自己的就行

Neko一个在Docker环境下的虚拟浏览器

Neko是一个在 Docker 中运行并使用 WebRTC 技术的自托管虚拟浏览器。Neko 是一个强大的工具&#xff0c;可让您在虚拟环境中运行功能齐全的浏览器&#xff0c;使您能够从任何地方安全、私密地访问互联网。使用 Neko&#xff0c;您可以像在常规浏览器上一样浏览 Web、运行应用程…

Python接口测试实践—参数化测试、数据驱动测试和断言的使用

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 在Python接口测试实践中&#xff0c;参数化测试、数据驱动测试和断言是常用的技术手段。 参数化测试 参数化测试是指将测试用例中的某些部分&#xff08;如输入数…

蓝桥杯算法之暴力

暴力 1.十进制数转换成罗马数字 2.判断给出的罗马数字是否正确 小知识 %&#xff08;模除&#xff09;&#xff1a; % 符号用作模除&#xff08;或取模&#xff09;运算符。模除运算是一种数学运算&#xff0c;它返回两个数相除的余数。 具体来说&#xff0c;如果 a 和 b 是…

初识 C++ ( 1 )

引言&#xff1a;大家都说c是c的升级语言。我不懂这句话的含义后来看过解释才懂。 一、面向过程语言和面向对象语言 我们都知道C语言是面向过程语言&#xff0c;而C是面向对象语言&#xff0c;说C和C的区别&#xff0c;也就是在比较面向过程和面向对象的区别。 1.面向过程和面向…

自然语言处理实战项目:从理论到实现

一、引言 自然语言处理&#xff08;NLP&#xff09;是计算机科学、人工智能和语言学交叉的领域&#xff0c;旨在让计算机能够理解、处理和生成人类语言。随着互联网的飞速发展&#xff0c;大量的文本数据被产生&#xff0c;这为自然语言处理技术的发展提供了丰富的素材&#xf…

【动态规划】(五)动态规划——子序列问题

动态规划——子序列问题 子序列问题☆ 最长递增子序列&#xff08;离散&#xff09;最长连续递增序列&#xff08;连续&#xff09;最大子序和&#xff08;连续&#xff09;最长重复子数组&#xff08;连续&#xff09;☆ 最长公共子序列&#xff08;离散-编辑距离过渡&#xf…