【第一阶段:java基础】第8章:面向对象编程高级-1(P333-P393)static、main、代码块、单例设计模式

news2025/8/6 4:07:18

本系列博客是韩顺平老师java基础课的课程笔记,B站:课程链接,吐血推荐的一套全网最细java教程,获益匪浅!

韩顺平P333-P393

  • 类变量和类方法
    • 类变量/静态变量
    • 类方法/静态方法
  • 理解main方法语法
  • 代码块
    • 注意事项
    • 好处
    • 细节
  • 单例设计模式
    • 饿汉式
    • 懒汉式
    • 饿汉式VS懒汉式

类变量和类方法

类变量/静态变量

  • 基本介绍:静态变量被同一个类的所有对象共享,在类加载的时候就生成了
  • 内存布局:在jdk8以前,静态变量存放在方法区,jdk8以及jdk8以后,放在堆中
  • 语法:访问修饰符 static 数据类型 变量名; 或者 static 访问修饰符 数据类型 变量名
  • 访问方法:可以通过类名.类变量名 或者是对象名.类变量名来访问 (前提是满足访问修饰符的访问权限和范围)
  • 细节:静态变量是类加载的时候就创建的,所以即使没有创建对象实例,也可以通过类名.类对象名来访问
  • 在这里插入图片描述

类方法/静态方法

  • 语法:访问修饰符 static 返回类型 方法名() {} 或者把static放在最前面

  • 访问方法:可以通过类名.类变量名 或者是对象名.类变量名来访问 (前提是满足访问修饰符的访问权限和范围)

  • 经典使用场景:当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,这样我们不需要创建对象就可以使用了,提高开发效率(比如说工具类方法:打印一维数组,冒泡排序等)

  • 细节(静态方法与普通方法的关系)

    • 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
    • 类方法可以通过类名调用,普通方法只能通过对象名调用
    • 类方法中不允许使用和对象有关的关键字,比如this和super,普通方法可以
    • 类方法中只能访问静态成员(变量和方法),普通方法都可以访问
  • 练习题

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

理解main方法语法

  • public static void main(String[] args)

  • main方法是java虚拟机在调用,所以它的访问权限必须是public

  • java虚拟机在执行main()方法时不必创建对象,所以它的方法必须是static

  • 该方法接受String类型的数组参数,该数组中保存执行java命令时,传递给所运行的类的参数

  • args是在java执行程序时通过命令行传入的 (java Hello tom jack smith)

  • 在这里插入图片描述

  • main方法中,可以直接调用main 方法所在类的静态方法和静态属性;但是不能直接访问该类中的非静态成员,必须创建一个该类的实例对象后,才能通过这个对象去访问非静态成员

代码块

  • 代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包围起来
  • 但和方法不同,没有方法名,返回和参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时,或创建对象时隐式调用
  • 语法:[修饰符]{代码};

注意事项

  • 修饰符可选,要写的话只能写static
  • 代码块分为两类,用static修饰的是静态代码块,没有static修饰的就时普通代码块
  • 逻辑语句可以为任何逻辑语句(输入 输出 方法调用 循环 判断等)
  • ;号可以写上也可以忽略

好处

  • 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化的操

  • 如果多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性

  • 在这里插入图片描述

  • 代码块的调用优先于构造器

细节

  • 类在什么时候被加载?

    • 创建对象实例时 new
    • 创建子类对象实例,父类会被加载
    • 使用类的静态成员时
    • 在这里插入图片描述
  • 普通代码块与静态代码块的调用

    • 静态代码块随着类的加载而执行,但是只会执行一次
    • 在这里插入图片描述
  • 总结

    • 静态代码块在类加载时调用,类只会被加载一次
    • 普通代码块在类创建时调用,创建一次就会被调用一次
    • 普通代码块,每创建一个对象就执行一次(隐式调用),和类的加载没有关系,所以如果只是使用类的静态成员,普通代码块并不会被执行。【可以将普通代码块当做构造器的补充,调用了构造器就会调用普通代码块】
  • 创建一个对象时,在一个类中的调用顺序是

      1. 调用静态代码块和静态属性初始化:两者的优先级是一样的,如果存在多个静态代码块和静态属性初始化,则按照他们的定义顺序调用
      1. 普通代码块和普通属性初始化:两者的优先级是一样的,如果存在多个普通代码块与呕普通属性初始化,则按照他们的定义顺序调用
      1. 调用构造器
    • 在这里插入图片描述
  • 构造器中隐含了本类普通代码块的调用

    • 构造器在最前面隐含了两个步骤:(1)super() (2)调用普通代码块
    • 静态相关的代码块和属性初始化,在类加载时,就执行完毕了。
      在这里插入图片描述
  • 创建一个子类对象时,(静态)代码块,(静态)属性初始化,以及构造器的调用顺序

      1. 父类的静态代码块和静态属性
      1. 子类的静态代码块和静态属性
      1. 父类的普通代码块和普通属性初始化
      1. 父类的构造器
      1. 子类的普通代码块和普通属性初始化
      1. 子类的构造方法
    • 静态代码块只能直接调用静态成员,普通代码块可以调用任意成员
  • 练习题

  • 在这里插入图片描述

单例设计模式

  • 设计模式(23种):设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。

  • 单例模式: 采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法

饿汉式

  1. 构造器私有化(防止直接new对象)
  2. 类的内部创建一个静态对象(因为需要在静态方法中返回对象,所以这个对象是静态的)
  3. 向外暴露一个静态的公共方法
  • 之所以叫做饿汉式是因为,随着类的加载会提早创建对象。很可能会造成创建了对象但是没有使用,造成浪费
  • 在这里插入图片描述

懒汉式

  1. 构造器私有化
  2. 定义一个static的静态属性对象
  3. 提供一个public的static方法,可以返回对象
  • 懒汉式只有在用户调用getInstance时才会创建对象,多次调用返回的是同一个对象
  • 在这里插入图片描述

饿汉式VS懒汉式

  • 两者主要的区别在于创建对象的时机不同,饿汉式是在类加载的时候创建对象实例,而懒汉式是在使用时才创建
  • 饿汉式不存在线程安全问题,懒汉式存在线程安全问题
  • 饿汉式存在浪费资源的可能
  • 在javaSE标准类中,java,lang,Runtime就是经典的单例模式

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

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

相关文章

Java接口

什么是接口? 在Java中,接口可以看成是多个类的公共规范,是一种引用数据类型。 使用关键字interface来定义接口 interface IRunning {void run(); }在创建接口时,接口的命名一般以大写字母I开头,接口的命名一般使用形…

【数据结构】栈和队列

文章目录栈和队列栈栈的概念及结构栈的实现初始化栈入栈出栈获取栈顶元素获取栈中有效元素个数判断栈是否为空销毁栈括号匹配问题队列队列的概念及结构队列的实现初始化队列队尾入队列对头出队列获取队头元素获取队尾元素销毁队列判断队列是否为空栈和队列 栈 栈的概念及结构…

带你初识微服务

博客主页:踏风彡的博客 博主介绍:一枚在学习的大学生,希望在这里和各位一起学习。 所属专栏:SpringCloud 文章创作不易,期待各位朋友的互动,有什么学习问题都可在评论区留言或者私信我,我会尽我…

同花顺_代码解析_技术指标_L

本文通过对同花顺中现成代码进行解析,用以了解同花顺相关策略设计的思想 目录 LH_LYDG LH_猎鹰歼狐 LHBLX LHSJ LHTZ LHXJ LH猎狐雷达 LOF净值 LWR LH_LYDG 猎鹰渡关(检测大盘顶部) 指标用法: (1&#xff…

进程间的信号

目录 一.信号入门 1.1概念 1.2信号发送与记录 1.3信号的处理方式 二.产生信号的方式 2.1通过终端按键产生 2.2通过系统函数向进程发信号 2.3由软件条件产生信号 2.4由硬件异常产生信号 三.阻塞信号 3.1信号相关概念 3.2信号在内核的表示 3.3sigset_t: 3.4…

工具及方法 - 使用Total Commander来查找重名文件

我只是一个Total Commander的轻度使用者,主要使用的是打开多个窗口,可以方便的以标签形式切换。 还有,这个软件是免费的,只是免费版打开时多一步,要输入个数字验证。 今天在使用一个SDK时,要包含进很多头文…

论文阅读笔记《Locality Preserving Matching》

核心思想 该文提出一种基于局部保持的特征匹配方法(LPM)。其核心思想是对于一个正确匹配点,其邻域范围内的其他匹配点与对应目标点之间的变换关系,应该和正确的匹配点保持一致,而错误匹配点,则应该有较大的…

第一章《初学者问题大集合》第6节:IntelliJ IDEA的下载与安装

当完成了Java开发环境之后,各位读者就可以开始编写第一个Java程序了。可是应该在哪里写程序呢?早期的开发者们都是用纯文本编辑工具编写Java程序,并且在命令行窗口中编译和运行Java程序。时至今日,我们早已远离了那个程序开发的“…

CentOs程序环境准备

1. MySQL的安装启动 选择指定操作系统指定版本的mysql进行下载 MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/mysql/5.7.html#downloads 选择复制下载链接 回到终端,执行此命令下载 wget https://dev.mysql.com/get/Downloads/MyS…

举个栗子~Tableau 技巧(244):用和弦图(Chord diagram)呈现数据关系

关于和弦图 和弦图(Chord diagram)常用来表示数据之间的相互关系。数据点沿着圆圈分布,通过点和点之间相互连接的弧线来呈现相互之间的关系。和弦图从视觉上来说比较美观,数据呈现又很直观,所以深受数据粉喜爱。 之前…

【Linux初阶】Linux调试器-gdb使用 | gdb的 l/b/info/d/r/n/s/bt/finish/p/(un)display/q

🌟hello,各位读者大大们你们好呀🌟 🍭🍭系列专栏:【Linux初阶】 ✒️✒️本篇内容:gdb使用相关背景知识,gdb的使用(打断点、查断点、消断点、调试运行、查看对应变量&…

【python拼图游戏】图片自选,来挑战一下自己的极限吧~

嗨害大家好鸭!我是小熊猫❤ 拼图的画面多以自然风光、建筑物以及一些为人所熟识的图案的为题材。 城堡和山峦是两类传统的主题, 不过任何图画和影像都可以用做拼图的素材。 有一些公司还提供将私人摄影作品制成拼图的服务。 今天我小熊猫就给带来py…

FFmpeg5.1 解码rtsp 并用OpenCV 播放

RTSP 连接过程如下图 看下实际过程中FFmpeg 的日志情况: [tcp 0000014CC3256D40] No default whitelist set [tcp 0000014CC3256D40] Original list of addresses: [tcp 0000014CC3256D40] Address ::1 port 8554 [tcp 0000014CC3256D40] Address 127.0.0.1 po…

使用BP神经网络、RBF神经网络以及PSO优化的RBF神经网络对数据进行预测(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

Keysight是德科技E5061B网络分析仪-安泰测试

E5061B ENA系列网络分析仪从5Hz 至3GHz提供了广泛的频率范围。它不仅支持一般的射频应用(例如滤波器或放大器测量等),还支持低频应用(例如直流至直流转换器环路增益测量)。因此,它是所有实验台上进行网络分析的最重要工具。 拥有E5061B,您就…

Selenium4 新特性

一、Selenium4 简介 Selenium是一个综合性项目,包含一系列的工具和库,支持Web浏览器的各种自动化操作: 软件测试爬虫领域RPA领域优点: 开源:https://github.com/SeleniumHQ兼容性: Chrome、FireFox、Edeg、IE、Opera、Safari支持多种编程语言:Java、Python、C#、Ruby、…

Charles抓包web、手机、小程序配置

一、下载地址 二、web抓包 Charles Web抓包,启动Charles会自动与浏览器设置成代理,不需要进行过多的设置。接下来就是通过浏览器发送网络请求,Charles就会直接抓取到这些信息和响应信息。 1、抓取HTTPS协议 Charles配置 点击顶部菜单栏【He…

双功能螯合剂p-NCS-Bz-DFO,1222468-90-7,p-SCN-Bn-Deferoxamine特点分析

●外观以及性质: p-SCN-Bn-Deferoxamine属于双功能螯合剂,西安凯新生物科技有限公司是各种修饰性PEG供应商,提供各种品质优良PEG衍生物,分子量从1000-40000不等,纯度≥95%,发货速度快。 ●中文名&#xff…

Web学习笔记-React

笔记内容转载自AcWing的Web应用课讲义,课程链接:AcWing Web应用课。 CONTENTS1. React配置环境2. ES6语法补充3. Components1. React配置环境 React官网:React。 React是一个声明式,高效且灵活的用于构建用户界面的JavaScript库…

凡事预则立,不预则缺货!2022年底了核芯物联蓝牙AOA定位基站GA25缺货!GA10缺货!GA60也缺货!

凡事预则立,不预则缺货!2022年底了核芯物联蓝牙AOA定位基站GA25缺货!GA10缺货!GA60也缺货! 核芯物联岳毅恒 ​ 深圳核芯物联科技有限公司 战略合作拓展总监 凡事预则立,不预则缺货!202222年底…