JAVA进阶--static、工具类、单例、继承--2022年8月28日

news/2024/4/20 0:50:58/文章来源:https://www.cnblogs.com/Flower--Dance/p/16633868.html

第一节  static静态关键字

  1、成员变量的分类和访问分别是什么样的?

    静态成员变量(有static修饰,属于类,加载一次,可以被共享访问

      访问格式:类名.变量名(推荐

           对象名.变量名(不推荐)

    实例成员变量(无static修饰,属于对象

      访问格式:对象名.变量名

  2、两种成员变量各自在什么情况下定义?

    静态成员变量:表示在线人数等需要被共享的信息

    实例成员变量:属于每个对象,且每个对象的信息不同时(如name,age,money等)

  3、static修饰成员变量的内存原理

     程序运行开始,方法区加载class文件和main方法的同时,堆内存开辟一块空间,加载class静态变量区,存储静态成员变量

 

   4、成员方法的分类和访问分别是什么样的?

    静态成员方法(有static修饰,属于类和对象共享

      访问格式:类名.静态成员方法

           对象名.静态成员方法(不推荐)

    实例成员方法(无static修饰,属于对象

      访问格式:对象名.实例成员方法

  5、每种成员方法的使用场景是怎么样的?

    静态成员方法:如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明静态方法

    实例成员方法:表示对象自己的行为的,且方法中需要直接访问实例成员变量的,则该方法必须申明成实例方法

  6、static修饰成员方法的内存机制

    程序运行,类和静态方法优先加载到方法区,如果后面有new对象的话,实例成员方法会加载进方法区,堆内存里的对象的方法的引用会指向方法区里加载好的实例方法,这个实例方法是归属于对象的。

 

  7、static访问注意事项(面试,笔试题会遇到)

    静态方法只能访问静态成员,不能直接访问实例成员

    实例方法可以访问静态成员,也可以访问实例成员

    静态方法中不可以出现this关键字

第二节 static应用知识:

  1、工具类是什么,有什么好处

    工具类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用

    好处是:一是调用方便,二是提高代码复用(一次编写,处处可用,提高代码的重用性)

  2、工具类有什么要求?

    建议工具类的构造器私有化处理,即不让别人创建工具类对象,直接使用类名.静态方法形式调用,这样不占内存,还显得专业化。

  3、代码块是什么?

    代码块是类的5大成分之一(成员变量,构造器,方法,代码块,内部类),定义在类中方法外。

    在java类下,单独使用{}括起来的代码被称为代码块

  4、代码块可以分为哪几类?

    静态代码块

      格式:static{}

      特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次

      使用场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用。

    实例代码块(构造代码块)

      格式:{}

      特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并且会在构造器执行前执行(super在{}前执行,爸爸永远是爸爸)

      使用场景:初始化实例资源

  5、静态代码块的作用是什么?

    如果要在启动系统时对静态资源进行初始化,则建议使用静态代码块完成数据的初始化操作。

    以斗地主为例

package com.itMao.d1;import java.util.ArrayList;public class staticDemoTest {/***需求:斗地主,在启动游戏房间的时候,应该提前准备好54张牌,后续才可以直接使用这些牌数据*//***1、定义一个静态集合,这样这个集合只加载一个,因为当前房间只需要一副牌*/public static ArrayList<String> cards = new ArrayList<>();/*** 2、在程序真正运行main方法前,把54张牌放进去,后续游戏可以直接使用*/static {//3、正式做牌,当到集合中去//a、定义一个数组存储全部点数,因为类型,个数都确定String[] sizes = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};//b、定义一个数组存储全部花色,因为类型,个数都确定String[] colors = {"红桃","黑桃","方片","梅花"};//c、遍历点数for (int i = 0; i < sizes.length; i++) {//d、遍历花色for (int j = 0; j < colors.length; j++) {cards.add(sizes[i]+colors[j]);}}//e、单独加入大小王cards.add("小王");cards.add("大王");}public static void main(String[] args){System.out.println("新牌加载完毕"+cards);}
}

 

第三节  单例设计模式

  1、单例模式是什么

    可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只创建一个对象

    单例模式有很多:饿汉单例,懒汉单例。。。。。。。

 

  2、饿汉单例的实现步骤(在用类获取对象时,已经提前创建好了对象)

    定义一个类,构造器私有化

    定义一个静态变量存储该类的对象

package com.itMao.d1.d4_static_singleInstance;public class SingleInstance {//2、定义一个静态成员变量存储该类的对象,只加载一次,只此一个public static SingleInstance instance = new SingleInstance();//1、构造器私有化private SingleInstance(){}
}

  3、懒汉单例的实现步骤(在真正需要该对象的时候,才去创建一个对象,即延迟加载对象)

    定义一个类,把构造器私有化

    定义一个静态变量存储一个对象,不可以直接new,这样就变成了饿汉单例,同时这个变量要私有化

    提供一个返回单例对象的方法

package com.itMao.d1.d4_static_singleInstance;public class SingleInstance2 {/*** 2、定义一个静态变量负责存储一个对象*    只加载一次,只有一份*    最好私有化,不然其他类在调用的时候会返回null*/private static SingleInstance2 instance;/*** 3、提供一个返回该类对象的方法*/public static SingleInstance2 getInstance(){if(instance == null){instance = new SingleInstance2();}return instance;}/*** 1、构造器私有化*/private SingleInstance2(){}
}

  4、饿汉单例和懒汉单例的优缺点

    饿汉单例:速度快,但是占内存

    懒汉单例:速度慢,但是不占内存

    因为饿汉单例只要一加载类,这个对象就new出来了,而懒汉单例只有在调用方法的时候才会new对象。

第四节 继承

  1、什么是继承?继承的好处是啥?

     继承就是java允许我们用extends关键字,让一个类和另一个类建立起一种父子关系

    提高代码复用性,减少代码冗余,增强类的功能扩展性

  2、继承的格式

     子类 extends 父类

  3、继承后子类的特点?

    子类继承父类后,子类可以得到父类的属性和行为,子类可以使用

    java中子类更强大

  4、创建子类对象的内存机制

    创建子类对象后,对外是一个对象,但是内部是分成两个空间的

 

 

   5、继承需要满足什么样的设计规范

    子类们相同特征(共性属性,共性方法)放在父类中定义

    子类独有的属性和行为应该定义在子类自己里面

  6、继承有哪些特点?

    子类可以继承父类的属性和行为,但是子类不能继承父类的构造器

    java是单继承i模式:一个类只能继承一个直接父类

    java不支持多继承、但是支持多层继承

    java中所有的类都是object类的子类

  7、在子类方法中访问成员(成员变量、成员方法)满足:

    就近原则,先在子类范围里面找,子类没有找父类,父类没有就报错

  8、如果子父类中出现了重名的成员,此时如果一定要在子类中使用父类的怎么办?

    格式:super.父类成员变量/父类成员方法

  9、方法重写是什么样的

    子类写一个与父类申明一样的方法覆盖父类的方法

  10、方法重写建议加上哪个注解,有什么好处?

    @Override注解可以校验重写是否正确,同时可读性好

  11、重写方法有哪些基本要求

    重写方法的名称和形参列表应该与被重写方法一致

    私有方法不能被重写

    静态成员方法不能被重写

    子类重写父类方法是,访问权限必须大于或者等于父类被重写的方法的权限

  12、子类继承父类后构造器的特点

    子类中所有的构造器默认都会先访问父类中无参的构造器,在执行自己

    因为子类在初始化的时候,有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据

    子类初始化之前,一定要调用父类构造器先完成父类数据空间的初始化

  13、怎么调用父类构造器的

    子类构造器的第一行语句默认都是super(),不写也存在的。

  14、super调用父类构造器的作用是什么?

    通过调用父类有参数构造器来初始化继承自父类的数据

  15、如果父类中没有无参数构造器,只有有参构造器,会出现什么现象?

    会报错,因为子类默认是调用父类无参构造器的

  16、如何解决

    子类构造器中可以通过书写super(),手动调用父类的有参数构造器

    或者父类一定要写无参构造器

  17、this和super详情

     

 

 

  18、this(....)和super(....)使用注意点

    子类通过this(..)去调用本类的其他构造器,本类其他构造器会通过super去手动调用父类的构造器,最终还是会调用父类构造器的

    注意:this(...)super(...)都只能放在构造器的第一行,所以二者不能共存在同一个构造器中

 

 

 

 

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

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

相关文章

QA特辑 | 看了这场直播,我找到了设备指纹“从不说谎”的原因

除了身份证外,设备指纹可能是唯一一个可以证明你是谁的方法。 究其原因,就在于设备指纹的唯一性和稳定性。 8月 25 日下午 15 点,顶象技术总监杜威就设备指纹的唯一性和稳定性的核心算法展开分享。直播过程中,我们也收到了一系列关于设备指纹唯一性稳定性核心算法的疑问,现…

YBTOJ [树状数组] 二进制

哇咔咔,此乃真好题!这种东西当然要抢个榜首辣qaq。 Solution 首先不带 \(+x\) 的做法,相信大家都会,维护一下全局二进制每一位 \(1\) 的个数,把 \(y\) 二进制拆分一下,就知道答案了。 这个 \(+x\) 真滴很恶心啊! 考虑这样一个事实,非常滴实用: 对于一个 \(x\) \(and\)…

科普达人丨一图看懂安全组

建议收藏安全组是一种虚拟防火墙,通过安全组规则控制 ECS 实例出/入方向的流量,保障云服务器的安全。本文将通过介绍安全组的工作原理、功能、默认安全组和规则,以及快速上手使用安全组的操作等方面的介绍,您对于安全组有一个全面的了解,帮助您更好、更安全地开展业务上云…

京东云PostgreSQL在GIS场景的应用分享

在地图或地理信息有关的场景里,地址关键词的检索尤其重要。比如打开百度地图,想要查询某个位置的信息“北京市海淀区清华东路17号中国农业大学”,往往我们输入的是关键词“中国农业大学”而不是精确到街道的详细地址信息。在地图或地理信息有关的场景里,地址关键词的检索尤…

超全的正则表达式速查手册

一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$ 零和非零开头的数字:^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 正…

HCIA学习笔记二十六:手工负载分担模式二层链路聚合

一、链路聚合的应用场景• 链路聚合一般部署在核心结点,以便提升整个网络的数据吞吐量。 二、链路聚合• 链路聚合能够提高链路带宽,增强网络可用性,支持负载分担。 三、链路聚合模式• 手工负载分担模式下所有活动接口都参与数据的转发,分担负载流量。 • LACP模式支持链路…

Kotlin的空检查

我们在使用Java语言时,经常会出现空指针异常NullPointerException。Kotlin基于过往语言设计的经验对这一问题进行了改良,把运行时可能出现的null问题,以编译时错误的方式,提前在编译期强迫我们重视起来,而不是等到运行时报错,防患于未然,提高我们程序的健壮性。 Kotlin语…

智慧城市建设的三个阶段

今天的中国城市,正在疾步向前拥抱智慧时代,我国是全球智慧城市建设最为积极的国家之一。近年来,随着政策红利进一步释放与资金的大量投入,智慧城市产业也将迎来新的发展高潮。智慧城市建设步入快车道时代!据不完全统计,中国智慧城市的发展数量已经超过500个,居世界之最。…

2021年 西南石油大学超算与并行计算团队南充校区分队 第二届招新赛题解

2021年SWPU(南充)超算团队招新赛总体难度并不是很大,大部分题目考察的是基本的编程能力,题目中涉及到了一些并行计算相关的名词和知识,选手在参加比赛的同时,既能够展示自己的实力,也可以学习到相关的一些知识。下面是本次招新赛的题目A.简单输出 题目描述:题目要求:输出…

Java并发编程总结

——《Java多线程编程实战指南》学习及其他参考博客总结 串行、并行、并发 (1)串行:顺序执行多个任务,一个时刻只有一个任务在执行 (2)并行:多个CPU(核)同一时间多个任务,一个时刻有多个任务在执行 (3)并发:单个CPU(核)同一时间间隔内交替执行多个任务,一个时刻只有一…

学习随笔——洛谷题目P1636解答

摘要:欧拉图的应用。 题目原地址如下:https://www.luogu.com.cn/problem/P1636 题目截图如下: 一笔画问题,考察欧拉回路的定义,即所有节点的入度出度的和都为偶数即可满足欧拉回路的性质。我们为方便分析可加入一条线,发现加入一条边后会改变两个点的度数和,只需寻找奇数…

Spring的自动化装配

在Spring中,对象无需自己查找和创建与其所关联的其他对象。相反,容易负责把需要相互协作的对象引用赋予各个对象。例如,一个订单管理的组件需要信用卡认证组件,但它不需要自己创建信用卡认证组件。订单管理组件只需要表明自己两手空空,容器就会主动赋予它一个信用卡认证组…

jQuery使用ajax

1.导入jQuery的js库2.jQuery发送单一的get请求$.get(url:接口地址,data:{id:1,name:2,......}function(res){// res是服务器返回的数据} ) 3.jQuery发送单一的post请求$.post(url:接口地址,data:{id:1,name:哈哈哈,......}function(res){// res是服务器返回的数据} ) 4.jQuery发…

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法

服务器TIME_WAIT和CLOSE_WAIT详解和解决办法 - 悟寰轩-叶秋 - 博客园 https://www.cnblogs.com/sunxucool/p/3449068.html 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/article/details/6615051 里头的分析过程有提到,…

引入VUE的方式(8种)

第一类: 1、本地引入 把vue的js文件下载下来引入 2、CDN引入 把vue.js网址引入 3、把vue.js文件放在项目文件夹src中引入项目 然后webpack打包4、编辑器直接生成cdn的方式第二类: 5、自己构建vue的脚手架/* 1.新建项目 alipay 2.初始化配置文件:npm init -y 3.下载依赖:npm…

PipeCAD-捕捉选项

PipeCAD-捕捉选项PipeCAD-捕捉选项 eryar@163.com Key Words. PipeCAD, 三维管道设计软件,三维工厂设计软件,三维配管软件 1 概述 在PipeCAD交互设计过程中,有些建模操作需要在模型中捕捉点来进行定位。通过捕捉点可以快速、准确建模。一般的CAD软件中都有捕捉功能,为了给用…

CentOS 安装Nginx并部署vue项目

安装 yum install nginx配置nginx设置开机启动 systemctl enable nginx启动服务 systemctl start nginx停止服务 systemctl stop nginx重启服务 systemctl restart nginx修改配置后热重载 systemctl reload nginxnginx常用目录路径 説明/etc/nginx/ 保存Nginx设置文件的目录/et…

多示例学习

在机器学习中,多示例学习(Multiple Instance Learning 简称 MIL)是由监督型学习算法演变出的一种方法,定义“包”为多个示例的集合,具有广泛的应用。学习者不是接收一组单独标记的实例,而是接收一组带标签的包,每个包拥有多个实例。在多实例二进制分类的简单情况下,如果包…

在一些常见用例中修复详尽的deps警告

反应开发 在一些常见用例中修复详尽的deps警告在里面 上一篇文章 ,我们查看了正确使用 useEffect 钩子需要采用的正确心智模型。在本文中,让我们看看如何调整这种思维模型来解决一些常见的用例。这也将帮助您避免详尽的部门警告。 在 mount 上做某事 首先,我认为这个想法本身…

js实现幻灯片

使用原生js实现轮播图 html代码<div class="slide"><ul><li style="display: block;"><img src="1.jpg"></li><li><img src="2.jpg"></li><li><img src="3.jpg"&…