java面对对象高级

1.类变量和类方法

1.1static变量
(1)类变量:
也叫静态变量/静态属性,所有对象共享并且所有对象访问的值是相同的

static变量是同一个类所有对象共享的
static类变量,在类加载的时候就生成了

(2)定义语法:
一种:访问修饰符 static 数据类型 变量名;
static 访问修饰符 数据类型 变量名;

(3)访问方式:
类名.类变量名(推荐)
(4)使用细节
加上static称为类变量/静态变量,否则称为实例变量/普通变量/非静态变量;
它们的区别在于类变量是该类所有对象共享的,而实例变量是所有对象都可以共享的。
1.2 类方法
(1)也叫静态方法;

(2)定义语法:
一种:访问修饰符 static 数据类型 方法名(){};(推荐!)
另一种:stati c 访问修饰符 数据类型 方法名(){};
(3)访问方式:
类名.类变量名(推荐)
(4)特殊细节:

当方法不涉及任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率;例如Math类,Arrays类等,可以直接用类名去调用类的静态方法;

(5)使用细节:

类方法中不能使用this,super等和对象有关的关键字/参数;
类方法/静态方法只能访问静态类和静态方法;
普通方法既可以访问静态,也可以访问普通的 ;

2.main()方法

1.1main()方法由java虚拟机调用,所以要public并且要static;

2.2由于main()属于静态方法,所以它满足上述类变量和类方法的所有规则

3.代码块

3.1代码块的定义

3.2代码块的应用

在这里插入图片描述
(1)不管调用哪个构造器,创建对象时,都会先调用代码块的内容,再生成 构造器;即代码块调用的顺序优先于构造器 !

3.3代码块注意事项

(1) Static静态代码块在这里插入图片描述

那么类什么时候被加载?(这个重要,要背下来)在这里插入图片描述

注:
DD dd=new DD();
DD dd1=new DD();
这种连续生成实例的情况下,类只会 被加载一次,因此static代码块也只会被执行一次;

(2)普通代码块
在这里插入图片描述
(3)在创建一个对象时,在一个类中的调用顺序如下:在这里插入图片描述
(4)为什么构造器在生成对象时最后才调用
在这里插入图片描述
在调用构造器时,会先调用一个super()方法,去找到父类的构造器,初始化完父类构造器后,还要再调用普通代码块;

(5) 创建一个子类时,静态属性、代码块;普通属性、代码块;构造方法的调用顺序为:
注意:不须考虑静态方法,因为静态方法只有在对象或类调用时才会执行
在这里插入图片描述
(6)静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员;

4.单例设计模式

4.1 饿汉式

public class singleCase01 {public static void main(String[] args) {GirlFriend fd=GirlFriend.getFriend();System.out.println(fd);}
}class GirlFriend{private String name;//饿汉式//1.将构造器私有化//2.在类的内部直接创建//3.提供一个公共的static方法,返回friend对象private static GirlFriend friend = new GirlFriend("小红");private GirlFriend(String name) {this.name = name;}public static GirlFriend getFriend() {return friend;}@Overridepublic String toString() {return "GirlFriend{" +"name='" + name + '\'' +'}';}
}

4.2 懒汉式

public class singleCase02 {public static void main(String[] args) {GirlFriend2 fd=GirlFriend2.getFriend();System.out.println(fd);}
}class GirlFriend2{private String name;private static GirlFriend2 friend;public GirlFriend2(String name) {this.name = name;}public static GirlFriend2 getFriend() {if (friend == null) {friend=new GirlFriend2("小红");}return friend;}@Overridepublic String toString() {return "GirlFriend2{" +"name='" + name + '\'' +'}';}
}

5.java_final的基本使用

5.1基本情形

在这里插入图片描述

5.2 使用细节

(1)final变量在定义时必须赋值,赋值位置可以在定义语句、在构造器或者在代码块中;
(2)但如果final修饰的属性为静态属性,则只能在定义语句和静态代码块两处赋值;
在这里插入图片描述
感觉一般把final放在了访问修饰符的后面叭;

在这里插入图片描述

(3)final int x; ————final关键字不能被修改

6.抽象类

6.1 定义

在这里插入图片描述
在这里插入图片描述

一般来说,抽象类会被其子类继承并实现具体方法;
*注:抽象方法不能有方法体;抽象类不能被实例
化;抽象类可以没有抽象方法,但抽象方法一定要在抽象类中 *
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

7.接口

7.1定 义

在这里插入图片描述
注:
(1)在接口中,可以直接省略abstract关键字;
(2)一个类implement一个接口时,它需要重写该接口的所有抽象方法;

7.1 使用注意事项

在这里插入图片描述在这里插入图片描述

class A implement interface1说明class已经执行接口的属性了,拥有和接口一样的访问权限;

7.2接口vs继承

可以理解为:实现接口是对java单继承机制的一种补充
在这里插入图片描述
在这里插入图片描述

7.3 接口多态

(1)可以用A instanceof <类>来判断A的运行类型是否为特定类;

7.4接口的多态传递

(1)接口类型的变量可以指向实现了该接口的类的对象实例; 
(2)接口继承就能实现多态传递;

在这里插入图片描述

7.5 至今类的迭代

在这里插入图片描述

8.内部类

类的五大成员:属性,方法,构造器,代码块,内部类

8.1内部类定义在这里插入图片描述

8.2内部类分类(4种)

在这里插入图片描述
(1)局部内部类
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)匿名内部类(重要!!!)

基于接口的匿名内部类举例
在这里插入图片描述
在这里插入图片描述

基于类的匿名内部类
在这里插入图片描述

匿名内部类的使用注意事项
在这里插入图片描述
在这里插入图片描述

匿名内部类的常用实践举例

public class innerClassExercise {public static void main(String[] args) {Phone phone = new Phone();phone.alarmclock(new Bell(){public void ring(){System.out.println("懒猪起床了");}});phone.alarmclock(new Bell(){public void ring(){System.out.println("小伙伴上课了。。。。");}});}}interface Bell{public void ring();
}class Phone{public void alarmclock(Bell bell){bell.ring();}
}

(3)成员内部类
在这里插入图片描述

外部类要使用成员内部类的方法:
在这里插入图片描述
外部其他类要使用成员内部类时

public void getInner08Instance(){return new Inner08;
}

在这里插入图片描述
(4)静态内部类
在这里插入图片描述

外部其他类访问静态内部类
在这里插入图片描述
在这里插入图片描述
当外部类和静态内部类中的属性重名时,可以直接使用:外部类名.成员去访问;(因为本身静态属性就不要实例对象,所以this存在没有意义,this它代表的是实例对象)

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

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

相关文章

MySQL基础篇 - SQL

01 SQL通用语法 02 SQL分类 03 DDL语句 04 DML语句 05 DQL语句(单表查询) 05_01 学习总览 05_02 基本查询 05_03 条件查询 【应用实例】&#xff1a; 05_04 聚合函数 05_05 分组查询 05_06 排序查询 05_07 分页查询 【boss题目】&#xff1a; 05_08 执行顺序 06 DCL语句 【概…

国家标准和团体标准有什么区别?

国家标准和团体标准的区别主要体现在以下几个方面&#xff1a; 1. 制定标准的主体不同&#xff1a;国家标准是由国家机构通过并公开发布的标准&#xff1b;团体标准是由学会、协会、商会、联合会、产业技术联盟等社会团体协调相关市场主体共同制…

Libtorrent 安装、编译与使用(附 Boost 的编译与使用)

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 所用设备系统与软件Part.II 准备工作Chap.I 编译 Boost 库Chap.II 下载必需文件Part.III 编译与使用 LibtorrentChap.I 运行 Example 和 TestChap.II 使用库文件ReferencePart.I Introduction libtorrent 是 BitTorrent 协…

Unity场景内画车道线(根据五阶曲线系数)

之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位&#xff0c;根据点位来进行构建。 由于AI识别出来的点位不线性&#xff0c;画出来的车道线经常是歪七扭八&#xff0c;所以使用五阶曲线系数进行构建。 使用在线图形计算器进行测试构建&#xff0c;公式…

开源鸿蒙OpenHarmony系统修改屏幕旋转方法 深圳触觉智能RK3566开发板

本文提供OpenHarmony4.0系统竖屏修改为旋转时的操作方法&#xff0c;在此为大家介绍了两种方法&#xff01;第一种方式是将修改过的文件重新编译后烧录至开发板中实现屏幕旋转&#xff0c;第二种方式则是通过覆盖原文件的方式实现屏幕旋转。 1、源码下载 首先进入触觉智能官网…

Prompt输出限制怎么写?用CCoT限制输出长度的推理,大幅提高LLM准确性

图片由修猫创作 一项由意大利比萨的著名高等教育和研究机构圣安娜高等学校Sania Nayab等人进行的研究为这个问题提供了一个创新的解决方案- Constrained Chain-of-Thought (CCoT)提示技术。这项研究不仅提出了控制LLM输出长度的新方法&#xff0c;还开发了一套评估LLM输出简洁…

新闻文本分类识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+TensorFlow+Django网页界面

一、介绍 文本分类识别系统。本系统使用Python作为主要开发语言&#xff0c;首先收集了10种中文文本数据集&#xff08;“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”&#xff09;&#xff0c;然…

推荐一个免费的学习ROS机器人的大模型

可以帮你快速写推文 聚合古月居资源&#xff0c;帮你推荐古月居学习路径 学习古月居产品?古月知道绝对是你的好帮手&#xff01; 无聊想唠嗑&#xff1f;和古月知道一起唠嗑吧&#xff01; 想学点别的&#xff0c;但是古月居没找到对应的文章怎么办&#xff1f; 还有很多很多&…

【MyBatis 源码拆解系列】MyBatis 运行原理 - MyBatis 中的代理模式

欢迎关注公众号 【11来了】 &#xff0c;持续 MyBatis 源码系列内容&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址&#xff1a;点击查看文章导读&#xff01; 感谢你的关注&#xff…

图变换器:为图数据增强神经网络架构

人工智能咨询培训老师叶梓 转载标明出处 当面对图数据时&#xff0c;尤其是那些拓扑结构重要的图&#xff0c;传统的 Transformer 架构并未能充分利用图的连接性特征&#xff0c;导致性能受限。为了解决这一问题&#xff0c;新加坡南洋理工大学的研究人员提出了一种新的神经网…

数字私家侦探必备工具

在当今快节奏的数字环境中&#xff0c;技术是法医调查的关键组成部分&#xff0c;因为它将传统技术转化为复杂的数字操作。数字私家侦探的出现给侦查方式带来了显著的变化。这些专家收集、检查和储存数字证据 使用尖端技术&#xff0c;这对于解决涉及电子数据的问题至关重要。用…

Vue.js与Flask/Django全栈开发实战:从零搭建前后端分离的高效Web应用,打造现代化全栈开发体验!

将Vue.js与Flask或Django等后端框架配合使用&#xff0c;可以构建一个全栈的Web应用。以下是一个简要的指南&#xff0c;介绍如何将Vue.js与Flask或Django结合使用。 1. 准备工作 确保你已经安装了Node.js、npm&#xff08;或yarn&#xff09;以及Python和相应的包管理工具&am…

JAVA开源项目 学科竞赛管理系统 计算机毕业设计

本文项目编号 T 047 &#xff0c;文末自助获取源码 \color{red}{T047&#xff0c;文末自助获取源码} T047&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

CSS 实现文本溢出省略号显示,含单行与多行文本溢出

&#x1f680; 个人简介&#xff1a;某大型国企资深软件研发工程师&#xff0c;信息系统项目管理师、CSDN优质创作者、阿里云专家博主&#xff0c;华为云云享专家&#xff0c;分享前端后端相关技术与工作常见问题~ &#x1f49f; 作 者&#xff1a;码喽的自我修养&#x1f9…

CNS-WRFID-01地标卡读写器|写卡器DEMO软件读、写操作说明

CNS-WRFID-01地标卡读写器|写卡器是一款高频读写设备&#xff0c;支持ISO15693协议芯片卡&#xff0c;地标标签读写&#xff0c;支持兴颂系列抗金属|非抗金属RFID标签&#xff0c;如&#xff1a;CNS-CRFID-01、CNS-CRFID-02、CNS-CRFID-03、CNS-CRFID-04、CNS-CRFID-05、CNS-CR…

任意长度并行前缀和 扫描算法 《PMPP》笔记

下面的算法针对于任意长度输入 对于大数据集&#xff0c;首先将输入分为几段&#xff0c;每一段放进共享内存并用一个线程块处理&#xff0c;比如一个线程块使用1024个线程的话&#xff0c;每个块最多能处理2048个元素。 在前面代码中&#xff0c;一个块最后的执行结果保存到了…

网站建设中,JavaScript为什么现在可以做后台了?

JavaScript&#xff0c;作为一种最初为浏览器端脚本设计的语言&#xff0c;已经逐渐发展成为可以在服务器端运行的强大工具。以下是JavaScript可以做后台开发的原因分析&#xff1a; Node.js的崛起 事件驱动与非阻塞I/O&#xff1a;Node.js的事件驱动和非阻塞I/O模型使得JavaSc…

【YOLOv10改进[SPPF]】使用 FocalModulation替换SPPF(模型结构变化小+涨点) + 含全部代码和详细修改方式

本文将进行在YOLOv10中使用FocalModulation改进v10 的实践,助力YOLOv10目标检测效果,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后的参数对比如下: 目录 前言 一 FocalModulation 二 使用FocalModulation改进v10的实践 1 整体修改 ① 添加F…

js实现两个轴直线插补圆弧插补

效果图 源代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Multi-Axis Motion with Canvas</title><style>body {margin: 0;}#controls {position: absolute;top: 10px;right: 10px;…

货车无钥匙一键启动越来越“智能”,怎么做到的?

货车一键启动系统是一种智能化的汽车启动方式&#xff0c;通过一个按钮即可实现车辆的启动和熄火。这种系统通常包括‌无钥匙进入、一键启动、‌自动升窗、‌智能防盗等功能&#xff0c;大大简化了传统钥匙启动的繁琐步骤。 货车一键启动系统具有多种功能&#xff0c;包括&…