java面向对象(七)

2023-09-20 20:59:58


提示:以下是本篇文章正文内容,下面案例可供参考

一、单例设计模式是什么?

1.概念

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例。

2.如何实现

1.饿汉式

class Bank{
	//1.私有化类的构造器
	private Bank(){
	}
	//2.内部创建类的对象
	//4.要求此对象也必须声明为静态的
	private static Bank instance = new Bank();

	//3.提供公共的静态的方法,返回类的对象
	public static Bank getInstance(){
		return instance;
	}
	
}

2.懒汉式

class Order{
	//1.私有化类的构造器
	private Order(){

	}
	//2.声明当前类对象,没有初始化
	//4.此对象也必须声明为static的
	private static Order instance = null;

	//3.声明public 、static 的返回当前类对象的方法
	public static Order getInstance(){
		if(instance == null){
			instance = new Order();
		}
		return instance;
	}


}

3.区分饿汉式和懒汉式

饿汉式:
坏处:对象加载时间过长。
好处:饿汉式是线程安全的。
懒汉式
好处:延迟对象的创建
坏处:线程不安全。

二、main()方法的使用

1.使用说明

1.main()方法作为程序的入口
2.main()方法也是一个普通的静态方法
3.main()方法可以作为我们与控制台交互的方式。(之前: 使用Scanner)

三、类的成员之四:代码块(或初始化块)

1.概念

1.代码块的作用:用来初始化类、对象
2.代码块如果有修饰的话,只能使用static.
3.静态代码块 vS非静态代码块

2.静态代码块

内部可以有输出语句
随着类的加载而执行,而且只执行一次
作用:初始化类的信息
如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
静态代码块的执行要优先于非静态代码块的执行
静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构

3.非静态代码块

内部可以有输出语句
随着对象的创建而执行
每创建一个对象,就执行一次非静态代码块
作用,可以在创建对象时,对对象的属性等进行初始化
如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
非静态代码块内可以调用静态的属性、静态的方法,或非静态的属性、非静态的方法

四、final关键字

1.fina1可以用来修饰的结构:类、方法、变量
2. final 用来修饰一个类:此类不能被其他类所继承。
比如: String类、System类、StringBuffer类
3. final 用来修饰方法,表明此方法不可以被重写
比如: Object类中getClass();
4…final 用来修饰变量:此时的“变量"就称为是一个常量
4.1 final修饰属性:可以考虑赋值的位置有:显式初始化、代码块中初始化、构造器中初始化
4.2 final修饰局部变量
尤其是使用final修饰形参时,表明此形参是一个常量。当我们调用此方法时,给常量形参赋一个实参。一旦调用以后,就只能在方法体内使用此形参,但不能进行重新赋值。

五、多态性的补充

1.若子类重写了父类方法,就意味着子类里定义的方法彻底覆盖了父类里的同名方法系统将不可能把父类里的方法转移到子类中,编译看左边,运行看右边
2.对于实例变量(属性)则不存在这样的现象,即使子类里定义了与父类完全相同的实例变量,这个实例变量依然不可能覆盖父类中定义的实例变量,编译运行都看左边

六、类变量和实例变量的内存解析

在这里插入图片描述

七、static声明的属性被所有对象所共享


public class CircleTest{
	public static void main(String[] arr]{
		Sysout("c1的id:" + c1.getId());
		Sysout("c2的id:" + c2.getId());

		Sysout("创建的圆的个数为:"+Circle.getTotal());
	}


}

class Circle{
	private double radius;
	private int id;
	public Circle(){
		id = init ++;
		total++;
	}

	private static int total ;  //记录创建的圆的个数
	private static int init = 1001;  //static声明的属性被所有对象所共享

	public int getId(){
		return this.id;
	}

	public int getTotal(){
		return this.total;
	}


}

更多推荐

华为OD机考算法题:分积木

目录题目部分解读与分析代码实现题目部分题目分积木难度难题目说明Solo和koko是两兄弟,妈妈给了他们一大堆积木,每块积木上都有自己的重量。现在他们想要将这些积木分成两堆。哥哥Solo负责分配,弟弟koko要求两个人获得的积木总重量“相等”(根据Koko的逻辑),个数可以不同,不然就会哭,但koko只会先将两个数转成二

Linux 系统目录结构 & 终端

系统目录结构Linux或Unix操作系统中,所有文件和目录呈一个以根节点为始的倒置的树状结构。文件系统的最顶层是根目录,用/来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此,就构成了一个庞大的文件系统。在命令窗口下输入命令:ls/,显示根目录下的文件:树状目录结构:目录解

从零开始搭建成绩查询系统

在当前的数字化时代,教育行业借助技术手段不断推动教学效果的提升。作为教师,搭建一个专属的成绩查询系统可以更好地管理学生成绩,并即时向家长反馈。本文将详细介绍如何从零开始搭建一个成绩查询系统,以提升教学管理的便捷性和效率。当然,对于非技术型的教师来说,使用现成工具是个更快速实用的选择。易查分等工具被许多教师用来制作查分网

(VS报错)已在 xxxxx.exe 中执行断点指令(__debugbreak()语句或类似调用)-解决方法&&C++创建对象四种方式

上述报错困扰了我好几天,在网上搜了一天,到最后还是没有解决问题试过通过项目属性->C/C+±>代码生成->启用增强指令集->选择AVX,这种方法也没用但问题出现在创建对象时内存分配问题上方法一:如果是这样创建对象,并且写了析构函数会报错,把析构函数删去之后程序就能正常运行了。方法二:创建对象的方式改为这样,程序也可以正

第九章(2):长短期记忆网络(Long short-term memory, LSTM)与pytorch示例(简单字符级语言模型训练器)

第九章(2):长短期记忆网络(Longshort-termmemory,LSTM)与pytorch示例(简单字符级语言模型训练器)作者:安静到无声个人主页作者简介:人工智能和硬件设计博士生、CSDN与阿里云开发者博客专家,多项比赛获奖者,发表SCI论文多篇。Thanks♪(・ω・)ノ如果觉得文章不错或能帮助到你学习,可

Python计算机二级知识点整理

1.当一个进程在运行过程中释放了系统资源后要调用唤醒进程原语唤醒进程原语是把进程从等待队列里移出到就绪队列并设置进程为就绪状态,当一个进程在运行过程中释放了系统资源后进入就绪状态,调用唤醒进程原语。2.3.4.在希尔排序法中,每经过一次数据交换后能消除多个逆序在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数

机械寿命预测(基于NASA C-MAPSS数据的剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)

1.效果视频:机械寿命预测(NASA涡轮风扇发动机剩余使用寿命RUL预测,Python代码,CNN_LSTM模型,有详细中文注释)_哔哩哔哩_bilibili环境库版本:2.数据来源:https://www.nasa.gov/intelligent-systems-division数据文件夹数据介绍:当前基于机器学习的

计算机是如何工作的下篇

操作系统(OperatingSystem)操作系统是一组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等.操作系统由两个基本功能:对下,要管理硬件设备.对上,要给软件提供稳定的运行环境.因此,操作系统是软件硬件用户之

【C#】Redis在net core下使用教程

系列文章文章目录系列文章前言一、Redis简介1.1Redis优势1.2Redis与其他key-value存储有什么不同?二、Redis安装步骤2.1下载链接2.2安装测试三、Redis修改帐户密码四、Redis写成Windows服务五、.netcore-使用CSRedisCore操作redis前言官方教程:https

【Azure】构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure中的零信任体系结构(本文重点)4.1基础知识点(必须了解)(一)Azure中零信任的指导原则(二)Azure中调整为零信任4.2Azure中的零信任体系结构(六层防御)4.3AzureClou

STM32H7 Azure RTOS

STM32H7是意法半导体(STMicroelectronics)推出的一款高性能微控制器系列,基于ArmCortex-M7内核。它具有丰富的外设和高性能计算能力,适用于各种应用领域。AzureRTOS(原名ThreadX)是一款实时操作系统(RTOS),是AzureIoT解决方案的一部分。它是一个可裁剪、可扩展的嵌入

热文推荐