面向对象8

面向对象8

main()方法的剖析

public static void main(String args[]){}

1、理解1:看做是一个普通的静态方法 理解2:看做是程序的入口,格式是固定的。

2、与控制台交互

如何从键盘获取数据?

方式1:使用Scanner 方式2:使用main()的形参进行传值。

代码块

回顾:类中可以声明的结构:属性、方法、构造器;代码块(或初始化块)、内部类

  1. 代码块(或初始化块)的作用: 用来初始化类或对象的信息(即初始化类或对象的成员变量)

  2. 代码块的修饰: 只能使用static进行修饰。

  3. 代码块的分类: 静态代码块:使用static修饰 非静态代码块:没有使用static修饰

  4. 具体使用: 4.1 静态代码块:

    随着类的加载而执行 由于类的加载只会执行一次,进而静态代码块的执行,也只会执行一次 作用:用来初始化类的信息 内部可以声明变量、调用属性或方法、编写输出语句等操作。 静态代码块的执行要先于非静态代码块的执行 如果声明有多个静态代码块,则按照声明的先后顺序执行 静态代码块内部只能调用静态的结构(即静态的属性、方法),不能调用非静态的结构(即非静态的属性、方法)

4.2 非静态代码块: > 随着对象的创建而执行 > 每创建当前类的一个实例,就会执行一次非静态代码块 > 作用:用来初始化对象的信息 > 内部可以声明变量、调用属性或方法、编写输出语句等操作。 > 如果声明有多个非静态代码块,则按照声明的先后顺序执行 > 非静态代码块内部可以调用静态的结构(即静态的属性、方法),也可以调用非静态的结构(即非静态的属性、方法)

属性赋值过程

  1. 可以给类的非静态的属性(即实例变量)赋值的位置有: ① 默认初始化

    ② 显式初始化 或 ⑤ 代码块中初始化

    ③ 构造器中初始化

    ④ 有了对象以后,通过"对象.属性"或"对象.方法"的方法进行赋值

  1. 执行的先后顺序: ① - ②/⑤ - ③ - ④

  2. 关于字节码文件中的<init>的简单说明:(通过插件jclasslibbytecode viewer查看)

<init>方法在字节码文件中可以看到。每个<init>方法都对应着一个类的构造器。(类中声明了几个构造器就会有几个<init>) 编写的代码中的构造器在编译以后就会以<init>方法的方式呈现 <init>方法内部的代码包含了实例变量的显示赋值、代码块中的赋值和构造器中的代码。 <init>方法用来初始化当前创建的对象的信息的。

  1. 给实例变量赋值的位置很多,开发中如何选?

显示赋值:比较适合于每个对象的属性值相同的场景

构造器中赋值:比较适合于每个对象的属性值不相同的场景

final关键字的使用

  1. final的理解:最终的

  2. final可以用来修饰的结构:类、方法、变量

  3. 具体说明:

    3.1 final修饰类:表示此类不能被继承。 比如:String、StringBuffer、StringBuilder类

    3.2 final修饰方法:表示此方法不能被重写 比如:Object类中的getClass()

    3.3 final修饰变量:既可以修饰成员变量,也可以修饰局部变量。 此时的"变量"其实就变成了"常量",意味着一旦赋值,就不可更改。

    3.3.1 final修饰成员变量: 有哪些位置可以给成员变量赋值? > 显式赋值 > 代码块中赋值 > 构造器中赋值

    3.3.2 final修饰局部变量:一旦赋值就不能修改 > 方法内声明的局部变量:在调用局部变量前,一定需要赋值。而且一旦赋值,就不可更改 > 方法的形参:在调用此方法时,给形参进行赋值。而且一旦赋值,就不可更改

  4. final与static搭配:修饰成员变量时,此成员变量称为:全局常量。 比如:Math的PI

抽象类与抽象方法

  1. abstract的概念:抽象的

  1. abstract可以用来修饰:类、方法

  2. 具体的使用:

4.1 abstract修饰类: > 此类称为抽象类 > 抽象类不能实例化。 > 抽象类中是包含构造器的,因为子类对象实例化时,需要直接或间接的调用到父类的构造器。 > 抽象类中可以没有抽象方法。反之,抽象方法所在的类,一定是抽象类。

4.2 abstract修饰方法: > 此方法即为抽象方法 > 抽象方法只有方法的声明,没有方法体。 > 抽象方法其功能是确定的(通过方法的声明即可确定),只是不知道如何具体实现(体现为没有方法体) > 子类必须重写父类中的所有的抽象方法之后,方可实例化。否则,此子类仍然是一个抽象类。

  1. abstract不能使用的场景: 5.1 abstract 不能修饰哪些结构? 属性、构造器、代码块等。

5.2 abstract 不能与哪些关键字共用?(自洽)

不能用abstract修饰私有方法、静态方法、final的方法、final的类。

私有方法不能重写 避免静态方法使用类进行调用 final的方法不能被重写 final修饰的类不能有子类

接口的使用

  1. 接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

  2. 定义接口的关键字:interface

  3. 接口内部结构的说明:

    可以声明: 属性:必须使用public static final修饰 方法:jdk8之前:声明抽象方法,修饰为public abstract jdk8:声明静态方法、默认方法 jdk9:声明私有方法

    不可以声明:构造器、代码块等

  1. 接口与类的关系 :实现关系

  2. 格式:class A extends SuperA implements B,C{}

A相较于SuperA来讲,叫做子类 A相较于B,C来讲,叫做实现类。

  1. 满足此关系之后,说明:

类可以实现多个接口。 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。 类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。

  1. 接口与接口的关系:继承关系,且可以多继承

  1. 接口的多态性: 接口名 变量名 = new 实现类对象;

  1. 面试题:区分抽象类和接口

共性:都可以声明抽象方法 都不能实例化

不同:① 抽象类一定有构造器。接口没有构造器 ② 类与类之间继承关系,类与接口之间是实现关系,接口与接口之间是多继承关系

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

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

相关文章

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

ELK之使用Filebeat插件收集日志到Logstash

对于Springboot项目接入ELK非常方便&#xff0c;对于非maven&#xff0c;非Spring项目来说就比较复杂&#xff0c;这个时候我们就可以使用Filebeat插件还完成日志的收集发送工作。 Filebeat介绍 Filebeat是用于转发和收集数据的轻量级工具&#xff0c;Filebeat可以监视指定的…

内存泄露与解决

什么是内存泄漏 内存泄漏指任何对象在您不再拥有或需要它之后仍然存在 哪些操作会造成内存泄漏&#xff1f; 1、垃圾回收器定期扫描对象&#xff0c;并计算引用了每个对象的其他对象的数量。如果一个对象的 引用数量为 0&#xff08;没有其他对象引用过该对象&#xff09;&…

通过串口中断的方式进行ASR-01S模块与STM32通信(问题与解决)

前言&#xff1a; 最近在做一个智能家居的项目&#xff0c;需要实现语音控制的功能&#xff0c;于是我选用了ASR-01S模块与STM32通信&#xff0c;这个模块最大的好处在于有配套的编程软件和语音库&#xff0c;不用自己训练且编程简单&#xff08;少儿编程的程度&#xff09;。…

LEETCODE LCS 03. 主题空间

题目描述如上&#xff0c;这个题主要运用了DFS的思想&#xff0c;同时走过的路径标记为6&#xff0c;即可在后续的遍历中过滤掉重复的元素&#xff0c;其他则类似边界条件的判断和题目条件的判断&#xff0c;求最大值&#xff0c;只需要一次遍历中累加对比每一次得即可。 模板&…

数据结构与算法-树-二分搜索树(一)

二分搜索树 今天我们尝试构建一颗二分搜索树&#xff0c;很多同学只有理论&#xff0c;并没有对树有其编码实践。通过一步步的实现一颗二分搜索树&#xff0c;加深对数据结构树的理解。 二分搜索树&#xff0c;又名二分排序树&#xff0c;有人也叫它二分查找树。 特点 二分搜索…

最强AI换脸工具Rope使用教程,Rope整合包下载【全网最全安装步骤】

Rope的汉化整合包&#xff08;包含模型&#xff09;以及下面教程所涉及到的所有安装包我都打包好了&#xff0c;需要的小伙伴可以关注文章底部公众号&#xff0c;回复关键词【rope】获取。 AI换脸软件简介必读 Rope 是一个免费开源的 AI 换脸软件&#xff0c;它具有图形化界面…

Centos启用rc-local服务

Centos启用rc-local服务 简介问题分析解决方法启动并查看状态 简介 大多时候我们可以在/etc/rc.d/rc.local中写一些命令来实现随着服务器的启动(重启)运行自己的程序或服务&#xff0c;但是配置后无法启动&#xff0c;查看了下rc-local.service服务状态显示未启动。 [rootmas…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

如何创建用户流(User Flow):分步指南

原文作者&#xff1a;Camren Browne&#xff0c;CareerFoundry 翻译&#xff1a;数字营销工兵 (sources: 图片来源于网络&#xff09; 用户流(User Flow)是当今用户体验行业中最有用但被误解的工具之一。资深设计师经常避开它们&#xff0c;而初级设计师则很难抓住它们。 事…

炸裂!全球首个AI程序员!

近年来&#xff0c;人工智能&#xff08;AI&#xff09;在多个领域取得了显著进展&#xff0c;不断拓展其能力边界。一个引人注目的突破是全球首个AI程序员——Devin的诞生。 这一创新不仅展示了AI技术的快速进步&#xff0c;而且对软件开发领域和未来的工作场景产生了深远的影…

关于ffmpeg height not divisible by 2的错误

在我们线上视频生产过程中&#xff0c;我们用ffmpeg对视频做了resize&#xff0c;讲原有的分辨率resize到1280p&#xff0c;使用了参数 -vf "scale1280:-1"&#xff0c;作用是将原始视频宽度缩放成1280&#xff0c;-1是指高度等比例缩放。 之前一直运行的好好的&…

网络基础知识-操作系统作用+进程管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 本章知识和计算机…

Twitter代运营服务商哪家好?CloudNEO为您提供全链解决方案

在当今社交媒体盛行的时代&#xff0c;Twitter作为全球最知名的社交平台之一&#xff0c;已成为企业推广品牌、吸引客户和增加曝光的重要渠道。然而&#xff0c;如何有效地利用Twitter进行品牌推广和营销&#xff0c;成为许多企业面临的挑战。在这个背景下&#xff0c;选择一家…

ES6:可迭代对象(Iterable object)

一、概念 可迭代对象是数组的泛化&#xff0c;是定义了内置迭代器方法 Symbol.iterator 的对象。是可以在for..of 循环中使用的对象。 二、迭代器&#xff08;iterator&#xff09; 为了让对象可以迭代&#xff0c;我们需要给对象添加一个迭代器--Symbol.iterator。 迭代器…

HarmonyOS(鸿蒙)不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

OpenvSwitch VXLAN 隧道实验

OpenvSwitch VXLAN 隧道实验 最近在了解 openstack 网络&#xff0c;下面基于ubuntu虚拟机安装OpenvSwitch&#xff0c;测试vxlan的基本配置。 节点信息&#xff1a; 主机名IP地址OS网卡node1192.168.95.11Ubuntu 22.04ens33node2192.168.95.12Ubuntu 22.04ens33 网卡信息&…

通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9 //1、创建用于连接…

28.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据推测结果用提示框的形式显示

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;27.数据推测功能…

Pytorch NLP入门3:用嵌入表示单词

初次编辑时间&#xff1a;2024/3/17&#xff1b;最后编辑时间&#xff1a;2024/3/17 本栏目链接&#xff1a;https://blog.csdn.net/qq_33345365/category_12597850.html 本人的其他栏目&#xff1a; pytorch 基础的栏目链接&#xff1a;https://blog.csdn.net/qq_33345365/…