当前位置: 首页 > article >正文

(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类

目录

1. Object类

 1.1 equals

1.2 toString()

2.final关键字

3.注解

4. 设计模式

 4.1 单例模式

4.1.1 饿汉式

4.1.3 饿汉式 VS 懒汉式

5. 抽象类&抽象方法

6. 接口

7.内部类 

7.1 成员内部类

7.2 静态内部类

7.3 方法内部类

7.4 匿名内部类


1. Object类

 1.1 equals

重写Object 的equals方法,两种实现方式

 

1.2 toString()

 

2.final关键字

 

 

3.注解

4. 设计模式

设计模式是基于场景的解决方案

 4.1 单例模式

 

4.1.1 饿汉式

代码实现:

package org.example;/***   01   饿汉式 : 创建对象实例的时候直接初始化**   典型的空间换时间,类加载的的时候  ==>静态实例对象完成初始化操作*/
public class SingletonOne {// 1. 创建类中的私有构造private SingletonOne(){}// 2. 创建改类型的私有静态实例   (创建并实例化)private static SingletonOne instance = new SingletonOne();// 3. 创建公有静态方法返回静态实例对象public static SingletonOne getInstance(){return instance;}
}

测试结果:

import org.example.SingletonOne;public class test {public static void main(String[] args) {
//        SingletonOne one = new SingletonOne();SingletonOne one = SingletonOne.getInstance();SingletonOne two = SingletonOne.getInstance();System.out.println(one);  //org.example.SingletonOne@4554617cSystem.out.println(two);  //org.example.SingletonOne@4554617cSystem.out.println(one == two);      //trueSystem.out.println(one.equals(two));   //true}
}

4.1.2 懒汉式

package org.example;/*** 02 懒汉式** 类内实例对象创建时并不初始化,直到第一次调用get方法时,才完成初始化操作* 用时间换取空间的一种编码模式*/
public class SingletonTwo {// 01 创建私有构造方法private SingletonTwo(){}// 02 创建开放的静态方法提供实例对象public static SingletonTwo instance = null;// 03. 创建开放的实例方法提供实例对象public static SingletonTwo getInstance(){if(instance == null){instance = new SingletonTwo();}return instance;}
}

测试

import org.example.SingletonOne;
import org.example.SingletonTwo;public class test {public static void main(String[] args) {System.out.println("=====================");SingletonTwo one1 = SingletonTwo.getInstance();SingletonTwo two1 = SingletonTwo.getInstance();System.out.println(one1);   //org.example.SingletonTwo@74a14482System.out.println(two1);   //org.example.SingletonTwo@74a14482System.out.println(one1 == two1);  //true}
}
4.1.3 饿汉式 VS 懒汉式

5. 抽象类&抽象方法

/*** 抽象类: 这个类不允许被实例化了,可以通过向上转型,转向子类实例*/
public abstract class Animal {
//    public void eat(){
//        System.out.println("动物都需要吃东西");
//    }// 抽象方法没有方法体// 子类继承父类也必须重写父类的抽象方法,否则也需要将子类定义为抽象类// static、final、private   不能与abstract并存public abstract void eat();
}

6. 接口

定义接口

public interface INet {/*** 接口中抽象方法可以不写abstract关键字** 默认访问修饰符 public** ==> 当类实现接口时,需要实现接口中的所有抽象方法,否则需要将该类设置为抽象类*/void network();// 接口中可以包含常量, 默认public、 static、 finalint TEMP = 20;// default:默认方法 可以带方法体         jdk1.8后新增的// 可以在实现类中重写,并可以通过接口的引用调用default void connection(){System.out.println("我是接口中的默认链接");}//静态方法也可以待方法体                 jdk1.8后新增的// 不可以在实现类中重写, 可以通过接口名调用static void stop(){System.out.println("我是接口中的静态方法");}
}

实现接口

package com.vb.tel;public class SmartPhoto implements INet{
//    public static final int TEMP = 30;public int TEMP = 30;public void call(){System.out.println("Calling SmartPhoto");}public void network(){System.out.println("Networking SmartPhoto");}@Overridepublic void connection() {//调用接口中的默认方法INet.super.connection();System.out.println("Connection SmartPhoto");}
}

测试类

public class PhoneTest {public static void main(String[] args) {FourthPhone phone4 = new FourthPhone();phone4.game();            //可以玩游戏phone4.getBrand();phone4.call();            //手机可以拨打电话System.out.println("================");IPhoto ip = new FourthPhone();ip.photo();                     //拍照ip = new Camera();ip.photo();                   //相机可以拍照System.out.println("================");System.out.println(INet.TEMP);   //20INet net = new SmartPhoto();System.out.println(net.TEMP);    //20net.connection();//我是接口中的默认链接//Connection SmartPhoto// 接口中的静态方法需要通过接口名来调用INet.stop();               //我是接口中的静态方法}
}

7.内部类 

7.1 成员内部类

        内部类中最常见的,也称为普通内部类

内部类

package com.vb.people;// 外部类
public class Person {public int age;public void eat(){System.out.println("People eat");}// 获取内部类的方法public Heart getHeart(){new Heart().temp = 25;return new Heart();}//成员内部类/*** 1. 内部类在外部使用时,无法直接实例化* 选哟借助外部类信息才能完成实例化* 2. 内部类可以直接方法外部类的成员;如果出现同名属性,优先访问内部类中定义的* 3. 可以通过使用外部类.this.成员的方式,访问外部类中同名的信息* 4. 外部类访问内部类的信息,需要通过内部类实例,无法直接方问* 5. 内部类编译后.class文件明明: 外部类$内部类.class*///注: 不加public的话只能在同胞中调用public class Heart {int age = 13;int temp = 22;public String beat(){eat();return Person.this.age+"心脏在跳动";}}
}

测试类

package com.vb.people;public class PeopleTest {public static void main(String[] args) {Person vb = new Person();vb.age = 25;// 同包下访问内部类
//        Heart heart = new Heart();    //不可行//获取内部类对象实例:  ==>//方式1:  ==> new 外部类.new 内部类Person.Heart myHeart = new Person().new Heart();System.out.println(myHeart.beat());   //0心脏在跳动// 方式2: 通过外部类对象获取内部类实例   ==> 外部类对象.new 内部类Person.Heart heart1 = vb.new Heart();System.out.println(heart1.beat());    //25心脏在跳动// 方式3: 通过外部类对象 获取方法   ==> 外部类对象.获取方法heart1 = vb.getHeart();System.out.println(heart1.beat());    //25心脏在跳动}
}

7.2 静态内部类

        静态内部类对象可以不依赖于外部类对象,直接创建

// 外部类
public class Person {public int age;//    public static void eat(){public void eat(){System.out.println("People eat");}// 获取内部类的方法public Heart getHeart(){new Heart().temp = 25;return new Heart();}//02 静态内部类/*** 1. 静态内部类中,只能访问外部类的静态成员,如果需要调用非静态成员,可以通过对象实例* 2. 创建静态内部类对象实例时,不依赖于外部类对象* 3. 可以通过(外部类.内部类.静态成员)的方式,访问内部类中的静态成员* 4. 当内部类访问外部类中的静态属性,则可以通过(外部类.属性)的方式;*    若需要访问外部类中的静态属性,则可以通过外部类.属性的方式;*    若需要访问外部类中的非静态属性,则可以通过 new 外部类().属性  的方式*/public static class Heart {public static int age = 13;int temp = 22;public static void say(){System.out.println("say hello");}public String beat(){new Person().eat();return new Person().age+"心脏在跳动";}}
}

测试类

public class PeopleTest {public static void main(String[] args) {Person vb = new Person();//获取静态内部类对象实例Person.Heart myHeart = new Person.Heart();System.out.println(myHeart.beat());//People eat//0心脏在跳动Person.Heart.say();             //say helloSystem.out.println(Person.Heart.age);    //13}
}

7.3 方法内部类

        方法内部类是定义在外部方法中的内部类,也称局部内部类

注:方法内不能定义静态成员

// 外部类
public class Person {public int age;public void eat(){System.out.println("People eat");}//03 方法内部类public Object getHeart(){/***  1. 定义在方法内部,作用范围也在方法内*  2. 和方法内部成员使用规则一样,class前面不可以添加public等修饰符 & static*  3. 类中不能包含静态成员*  4. 类中可以包含final\ abstract 修饰的成员*/
//       abstract class Heart {class Heart {public final int age = 13;int temp = 22;public final void say(){System.out.println("say hello");}//            public abstract void eat();public String beat(){new Person().eat();return new Person().age+"心脏在跳动";}}return new Heart().beat();}

测试

public class PeopleTest {public static void main(String[] args) {Person vb = new Person();vb.age = 25;//03 方法内部类System.out.println(vb.getHeart());//People eat//0心脏在跳动}
}

7.4 匿名内部类

将类的定义与类的创建,放在一起完成

(1)普通方案 & 多态重载方式实现

Person.java

package com.vb.anonymous;public abstract class Person {private String name;public Person(){}public String getName() {return name;}public void setName(String name) {this.name = name;}public abstract void read();
}

Man.java

package com.vb.anonymous;public class Man extends Person{@Overridepublic void read() {System.out.println("Man read");}
}

Woman.java

package com.vb.anonymous;public class Woman extends Person {@Overridepublic void read() {System.out.println("Woman read");}
}

Test

public class PersonTest {// 需求: 根据传入不同的人的类型, 调用对应的方法// 方案1:
//    public void getRead(Man man){
//        man.read();
//    }
//    public void getRead(Woman woman){
//        woman.read();
//    }// 方案 2  多态=>方法的重载public void getRead(Person person){person.read();}public static void main(String[] args) {PersonTest test = new PersonTest();Man man = new Man();Woman woman = new Woman();test.getRead(man);       //Man readtest.getRead(woman);     //Woman read}}

(2)匿名内部类实现

public class PersonTest {// 需求: 根据传入不同的人的类型, 调用对应的方法public void getRead(Person person){person.read();}public static void main(String[] args) {PersonTest test = new PersonTest();// 方案3: 匿名内部类/*** 1. 匿名内部类没有类型名称\ 实例对象名称* 2. 编译后的文件命名: 外部类$数字.class* 3. 无法使用访问修饰符& static &abstract* 4. 无法编写构造方法* 5. 无法出现静态成员* 6. 可以实现接口,也可以继承父类,但不可兼得* 实例对象的同时,完成对于对象内容的编写* 适用于: 只用到类的一个实例的场景*        在类的定义后马航用到*        给类的命名并不会导致代码更容易被理解*/test.getRead(new Person() {@Overridepublic void read() {System.out.println("man read");        //man read}});test.getRead(new Person(){@Overridepublic void read(){System.out.println("woman read");      //woman read}});}
}

相关文章:

(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类

目录 1. Object类 1.1 equals 1.2 toString() 2.final关键字 3.注解 4. 设计模式 4.1 单例模式 4.1.1 饿汉式 4.1.3 饿汉式 VS 懒汉式 5. 抽象类&抽象方法 6. 接口 7.内部类 7.1 成员内部类 7.2 静态内部类 7.3 方法内部类 7.4 匿名内…...

在服务器上安装AlphaFold2遇到的问题(3)_cat: /usr/include/cudnn_version.h: 没有那个文件或目录

[rootlocalhost ~]# cat /usr/include/cudnn_version.h cat: /usr/include/cudnn_version.h: 没有那个文件或目录这个错误表明系统找不到 cudnn_version.h 头文件,说明 cuDNN 的开发文件(头文件)没有正确安装。以下是完整的解决方案&#xff…...

实验-实现向量点积-RISC-V(计算机组成原理)

目录 一、实验内容 二、实验步骤 三、源代码 四、实现效果 五、实验环境 六、实验小结与思考 一、实验内容 首先,我们用一个简单的“向量点积”运算作为热身。你将拿到一个不完整的汇编代码“task2-向量点积”,我们的目标是按照C语言描述的功能&a…...

5.16本日总结

一、英语 背诵list30,复习list1 二、数学 学习14讲部分内容,订正30讲13讲题目 三、408 学习计网5.3知识点,完成5.1,5.2题目并订正 四、总结 高数对于基本定义概念类题目掌握不好,做题时往往不会下手&#xff0c…...

描述性统计工具 - AxureMost 落葵网

描述性统计工具是用于汇总和分析数据,以更好地了解数据特征的工具1。以下是一些常见的描述性统计工具简介: 描述性统计工具 Excel 基本统计函数:提供了丰富的函数用于计算描述性统计量。例如,AVERAGE 函数用于计算平均值&#xf…...

【AI学习】AI大模型技术发展研究月报的生成提示词

AI大模型技术发展研究月报生成提示词 请输出AI大模型技术发展研究月报,要求如下: —————————— 任务目标 在今天({{today}})往前连续 30 天内,检索已正式公开发表的、与AI大模型(参数量 ≥10B&am…...

麒麟桌面系统文件保险箱快捷访问指南:让重要文件夹一键直达桌面!

往期文章链接:统信操作系统自定义快捷键配置音量调节功能指南 Hello,大家好啊,今天给大家带来一篇麒麟桌面操作系统上配置文件保险箱内文件夹桌面快捷方式的文章,欢迎大家分享点赞,点个在看和关注吧!在日常…...

LearnOpenGL --- 你好三角形

你好&#xff0c;三角形的课后练习题 文章目录 你好&#xff0c;三角形的课后练习题一、创建相同的两个三角形&#xff0c;但对它们的数据使用不同的VAO和VBO 一、创建相同的两个三角形&#xff0c;但对它们的数据使用不同的VAO和VBO #include <glad/glad.h> #include &…...

从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区

目录 前言 一、从硬件角度理解"Linux下一切皆文件" 从理解硬件是种“文件”到其他系统资源的抽象 二、缓冲区 1.缓冲区介绍 2.缓冲区的刷新策略 3.用户级缓冲区 这个用户级缓冲区在哪呢&#xff1f; 解释关于fork再加重定向“>”后数据会打印两份的原因 4.内核缓冲…...

【第76例】IPD流程实战:华为业务流程架构BPA进化的4个阶段

目录 简介 第一个阶段,业务流程架构BPA1.0 第二个阶段,业务流程架构BPA2.0 BPA3.0、4.0 作者简介 简介 不管业务是复杂还是简单,企业内外的所有事情、所有业务都最终会归于流程。 甚至是大家经常说的所谓的各种方法论,具体的落脚点还是在流程上。 比如把大象放进冰…...

游戏站的几种形式

游戏站点的主要形式&#xff1a;单品游戏站、游戏盒子站与单类型游戏盒子站 随着互联网的普及和游戏产业的快速发展&#xff0c;游戏站点作为玩家获取游戏资源和信息的重要平台&#xff0c;呈现出多种形式。本文将分析三种常见的游戏站点形式&#xff1a;单品游戏站、游戏盒子站…...

OpenCV 图像透视变换详解

在计算机视觉领域&#xff0c;图像的视角问题常常会影响后续的分析与处理。例如&#xff0c;从倾斜角度拍摄的文档、带有畸变的场景图像等&#xff0c;都需要通过特定的方法进行矫正。OpenCV 作为计算机视觉领域的重要库&#xff0c;提供了强大的图像透视变换功能&#xff0c;能…...

AI日报 - 2024年5月16日

&#x1f31f; 今日概览 (60秒速览) ▎&#x1f916; 大模型前沿 | OpenAI推出GPT-4.1及mini版&#xff0c;专为编码优化&#xff1b;Google DeepMind发布AlphaEvolve&#xff0c;Gemini驱动算法发现。 GPT-4.1提升编码效率与指令遵循&#xff0c;AlphaEvolve在矩阵乘法、数学问…...

Ubuntu 更改 Nginx 版本

将 1.25 降为 1.18 先卸载干净 # 1. 完全卸载当前Nginx sudo apt purge nginx nginx-common nginx-core# 2. 清理残留配置 sudo apt autoremove sudo rm -rf /etc/apt/sources.list.d/nginx*.list修改仓库地址 # 添加仓库&#xff08;通用稳定版仓库&#xff09; codename$(…...

Python requests GET 报错:ChunkedEncodingError

问题 在实际项目中遇到的这样一个问题&#xff1a;通过Python GET从服务器请求url列表&#xff0c;因为是公司内部数据&#xff0c;知道大概多少条数据&#xff0c;所以直接一次请求500条。平稳运行了一段时间之后&#xff0c;突然某天这个GET请求报错了… response request…...

RabbitMQ是什么?应用场景有哪些?

RabbitMQ 是一款开源的消息代理中间件,基于 AMQP(高级消息队列协议)实现,用于在分布式系统中进行异步通信和消息传递。它通过将消息的发送者和接收者解耦,提高了系统的可扩展性、可靠性和灵活性。 核心特点 多协议支持:不仅支持 AMQP,还兼容 STOMP、MQTT 等多种消息协议…...

打造智能化军工软件工厂,破解版本管理难题

在数字化浪潮席卷全球的当下&#xff0c;军工行业正经历着前所未有的软件工业化转型。作为这一进程的核心支撑&#xff0c;软件工厂模式正在重塑军工领域的研发体系。然而&#xff0c;传统版本管理方式已难以适应现代军工软件研发的复杂需求&#xff0c;成为制约行业发展的关键…...

SpringbBoot nginx代理获取用户真实IP

为了演示多级代理场景&#xff0c;我们分配了以下服务器资源&#xff1a; 10.1.9.98&#xff1a;充当客户端10.0.3.137&#xff1a;一级代理10.0.4.105&#xff1a;二级代理10.0.4.129&#xff1a;三级代理10.0.4.120&#xff1a;服务器端 各级代理配置 以下是各级代理的基本配…...

allure报告自定义logo和名称

根据pytest框架&#xff0c;做自动化测试的时候&#xff0c;选择的是allure测试报告&#xff0c;这个报告是目前所有报告中功能最强大最好用的测试报告之一 我们在使用这个测试报告的时候&#xff0c;怎么样去把allure的logo和名称替换成自己公司或者自己的logo呢&#xff1f;…...

鸿蒙OSUniApp 实现的地图定位与导航功能#三方框架 #Uniapp

UniApp 实现的地图定位与导航功能 随着移动互联网的发展&#xff0c;地图定位与导航功能已成为众多应用的标配。本文将详细介绍如何在 UniApp 框架下实现地图定位与导航功能&#xff0c;并探讨如何适配鸿蒙系统&#xff0c;助力开发者打造更加流畅的地图体验。 前言 最近在做一…...

【AI论文】对抗性后期训练快速文本到音频生成

摘要&#xff1a;文本到音频系统虽然性能不断提高&#xff0c;但在推理时速度很慢&#xff0c;因此对于许多创意应用来说&#xff0c;它们的延迟是不切实际的。 我们提出了对抗相对对比&#xff08;ARC&#xff09;后训练&#xff0c;这是第一个不基于蒸馏的扩散/流模型的对抗加…...

Android 中 显示 PDF 文件内容(AndroidPdfViewer 库)

PDFView 是一个用于在 Android 应用中显示 PDF 文档的库。它提供了丰富的功能和灵活的配置选项&#xff0c;使得开发者能够轻松地在应用中嵌入 PDF 阅读器。 一、 添加依赖 在模块的 build.gradle 文件中添加以下依赖&#xff1a; // pdfimplementation("com.github.bar…...

Linux 软件包|服务管理

rpm 指令备注rpm -qa查看已安装软件&#xff0c;可以结合grep过滤查找rpm -e firefox卸载firefoxrpm -ivh firefox-115.12.0-1.el7.centos.i686.rpm安装gcc&#xff08;只能离线安装&#xff09; yum 能够从指定的服务器自动下载 RPM 包并且安装 指令备注yum list列出所有可…...

测试工程师如何学会Kubernetes(k8s)容器知识

Kubernetes(K8s)作为云原生时代的关键技术之一&#xff0c;对于运维工程师、开发工程师以及测试工程师来说&#xff0c;都是一门需要掌握的重要技术。作为一名软件测试工程师&#xff0c;学习Kubernetes是一个有助于提升自动化测试、容器化测试以及云原生应用测试能力的重要过程…...

遥感图像露天矿区检测数据集VOC+YOLO格式1542张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;1542 标注数量(xml文件个数)&#xff1a;1542 标注数量(txt文件个数)&#xff1a;1542 …...

每日Prompt:迷你 3D 建筑

提示词 3D Q版迷你风格&#xff0c;一个充满奇趣的迷你星巴克咖啡馆&#xff0c;外观就像一个巨大的外带咖啡杯&#xff0c;还有盖子和吸管。建筑共两层&#xff0c;大大的玻璃窗清晰地展示出内部温馨而精致的设计&#xff1a;木质的家具、温暖的灯光以及忙碌的咖啡师们。街道…...

解决 Sarspace 处理陆探一号辐射定标地理编码出现条纹问题:DEM 下载篇

在使用 Sarspace 处理陆探一号辐射定标地理编码时&#xff0c;结果出现条纹现象&#xff0c;经排查确定是 DEM&#xff08;数字高程模型&#xff09;下载存在问题。以下为利用自动下载功能解决该问题的过程。 问题排查 陆探一号数据处理中&#xff0c;条纹现象的出现往往与多种…...

el-breadcrumb 面包屑第一项后面怎么写没有分隔符

<el-breadcrumb separator"/"><el-breadcrumb-item>当前位置&#xff1a;</el-breadcrumb-item><el-breadcrumb-item :to"{ path: / }">首页</el-breadcrumb-item><el-breadcrumb-item><a href"/">活…...

Free2AI解锁教育新可能:LLM+RAG 技术驱动智能学习的关键路径

一、引言​ 在科技飞速发展的当下,人工智能技术正深刻地改变着各个领域,教育领域也不例外。大型语言模型(LLM)和检索增强生成(RAG)技术的兴起,为教育与智能学习带来了前所未有的机遇。LLM 凭借其强大的语言理解和生成能力,能够与用户进行自然流畅的对话,仿佛一位知识…...

MYSQL 高可用

目录 一 什么是MYSQL高可用 1.1 什么是MySQL高可用 1.2方案组成 1.3 优势 2.1 案例环境 二 案例实施 1.安装mysql数据库 &#xff08;1 基础环境 &#xff08;2二进制安装进行bash (3 设置配置文件 MYSQL 的配置文件跟上面编译安装的配置文件类似 &#xff08;4. 配…...