Java面向对象进阶之static

news2024/11/26 15:28:58

目录

  • static静态关键字
    • static:修饰成员变量,内存机制
      • static是什么、修饰成员变量的方法
        • 总结
      • static修饰成员变量的内存原理
    • static:修饰成员方法、内存机制
      • static修饰成员方法的基本用法
        • 总结
      • static修饰成员方法的内存原理
    • static的注意事项
  • static应用知识:工具类
    • 总结
    • 练习
  • static应用知识:代码块
    • 代码块的分类、作用
    • 静态代码块的应用案例
      • 总结
  • static应用知识:单例设计模式
    • 设计模式、单例模式介绍、恶汉单例模式
      • 总结
    • 懒汉单例模式
      • 总结

static静态关键字

static:修饰成员变量,内存机制

static是什么、修饰成员变量的方法

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

package com.zixin.d1_static;

public class User {

    public static int onlineNumber = 161;

    private String name;
    private int age;

    public static void main(String[] args) {
        System.out.println(User.onlineNumber);

        User u =new User();
        u.name="张三";
        u.age=21;
        System.out.println(u.name);
        System.out.println(u.age);

        u.onlineNumber++;
        System.out.println(u.onlineNumber);

        User u2 =new User();
        u2.name="张三2";
        u2.age=22;
        System.out.println(u2.name);
        System.out.println(u2.age);

        u.onlineNumber++;
        System.out.println(u.onlineNumber);
        System.out.println(User.onlineNumber);
        System.out.println(onlineNumber);

    }
}

总结

在这里插入图片描述

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

在这里插入图片描述

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

static修饰成员方法的基本用法

在这里插入图片描述

package com.zixin.d1_static;

public class Student {

    private String name;

    public static int getMax(int age1,int age2){
        return age1 > age2 ? age1 :age2;
    }

    public void study(){
        System.out.println(name +"在好好学习,天天向上");
    }

    public static void main(String[] args) {
        System.out.println(Student.getMax(10,3));

        System.out.println(getMax(10,32));

        Student s = new Student();
        s.name = "猪八戒";
        s.study();

        System.out.println(s.getMax(13,14));
    }
}

在这里插入图片描述

总结

在这里插入图片描述

static修饰成员方法的内存原理

在这里插入图片描述

static的注意事项

在这里插入图片描述

package com.zixin.d1_static;

public class Test3 {

    public static int onlineNumber = 10;
    public static void test2(){
        System.out.println("=====test2=====");
    }

    private String name;
    public void run(){
        System.out.println(name+"跑得快~");
    }
    public void go(){
        System.out.println(Test3.onlineNumber);
        System.out.println(onlineNumber);
        test2();
        System.out.println(name);
        run();
    }

    public static void test(){
        System.out.println(Test3.onlineNumber);
        System.out.println(onlineNumber);
        test2();
//        System.out.println(name);
//        run();

    }

    public static void main(String[] args) {

    }
}

static应用知识:工具类

在这里插入图片描述

package com.zixin.d2_static_util;

import java.util.Random;

public class zixinUtil {
    public static String createVerifyCode(int n){
        String code = "";
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random r =new Random();
        for(int i =0;i<n;i++){
            int index = r.nextInt(data.length());
            code +=data.charAt(index);
        }
        return code;

    }
}

package com.zixin.d2_static_util;

import java.util.Random;

public class Login {
    public static void main(String[] args) {
        System.out.println(zixinUtil.createVerifyCode(6));
    }
}

在这里插入图片描述

package com.zixin.d2_static_util;

import java.util.Random;

public class zixinUtil {

    private zixinUtil(){

    }
    public static String createVerifyCode(int n){
        String code = "";
        String data = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        Random r =new Random();
        for(int i =0;i<n;i++){
            int index = r.nextInt(data.length());
            code +=data.charAt(index);
        }
        return code;

    }
}

总结

1.工具类是什么,有什么好处?

  • 内部都是一些静态方法,每个方法完成一个功能
  • 一次编写,处处可用,提高代码的重用性。
    2.工具类有什么要求?
  • 建议工具类的构造器私有化处理。
  • 工具类不需要创建对象。

练习

在这里插入图片描述

package com.zixin.d2_static_util;

public class ArrayUtil {

    private ArrayUtil(){

    }

    public static String toString(int[] arr){

        if(arr == null){
            return null;
        }

        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            result += (i == arr.length-1 ? arr[i] : arr[i] +",");
        }
        result +="]";
        return result;
    }
}

package com.zixin.d2_static_util;

public class TestDemo2 {
    public static void main(String[] args) {
        int [] arr = null;
        int [] arr1 = {};
        int [] arr2 ={12,23,44,88};

        System.out.println(ArrayUtil.toString(arr));
        System.out.println(ArrayUtil.toString(arr1));
        System.out.println(ArrayUtil.toString(arr2));
    }
}

static应用知识:代码块

代码块的分类、作用

在这里插入图片描述

package com.zixin.d3_static_code;

public class StaticDemo1 {

    public static String schoolName;

    static {
        System.out.println("------静态代码块被触发执行了------");
        schoolName = "黑马";
    }

    public static void main(String[] args) {
        System.out.println("------main方法执行------");
        System.out.println(schoolName);
    }
}

package com.zixin.d3_static_code;

public class StaticDemo2 {

    private String name;
    public StaticDemo2(){
        System.out.println("===无参构造器被触发执行===");

    }

    {
        name = "张三";
        System.out.println("===实例代码块被触发执行===");
    }

    public static void main(String[] args) {
        StaticDemo2 s1 = new StaticDemo2();
        System.out.println(s1.name);

        StaticDemo2 s2 = new StaticDemo2();
        System.out.println(s2.name);
    }
}

静态代码块的应用案例

在这里插入图片描述

package com.zixin.d3_static_code;

import java.util.ArrayList;

public class StatucTest3 {

    public static ArrayList<String> cards = new ArrayList<>();

    static {
        String[] sizes ={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        String [] colors ={"♥","♠","♦","♣"};

        for (int i = 0; i < sizes.length; i++) {
            for (int j = 0; j < colors.length; j++) {
                String card = sizes[i]+colors[j];
                cards.add(card);
            }
        }
        cards.add("小🃏");
        cards.add("大🃏");

    }

    public static void main(String[] args) {
        System.out.println(cards);
    }
}

总结

1.静态代码块的作用是什么?

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

static应用知识:单例设计模式

设计模式、单例模式介绍、恶汉单例模式

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

在这里插入图片描述

package com.zixin.singleinstance;

public class SingleInstance {

    public static SingleInstance instance = new SingleInstance();
    private SingleInstance(){

    }
}

package com.zixin.singleinstance;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;

public class Test1 {
    public static void main(String[] args) {
        SingleInstance s1 = SingleInstance.instance;
        SingleInstance s2 = SingleInstance.instance;
        System.out.println(s1==s2);
    }

}

总结

1.饿汉单例的实现步骤?
定义一个类,把构造器私有。
定义一个静态变量存储一个对象

懒汉单例模式

在这里插入图片描述

package com.zixin.singleinstance;

public class SingleInstance2 {
    private static SingleInstance2 instance;


    public static SingleInstance2 getInstance(){
        if(instance==null){
            instance = new SingleInstance2();
        }
        return instance;
    }

    private SingleInstance2(){

    }
}

package com.zixin.singleinstance;

public class Test2 {
    public static void main(String[] args) {
        SingleInstance2 s1 = SingleInstance2.getInstance();
        SingleInstance2 s2 = SingleInstance2.getInstance();
        System.out.println(s1==s2);
    }
}

总结

1.懒汉单例的实现步骤?

  • 定义一个类,把构造器私有。
  • 定义一个静态变量存储一个对象。
  • 提供一个返回单例对象的方法

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

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

相关文章

计算机组成原理习题二

计算机组成原理习题二 文章目录计算机组成原理习题二1、某指令系统的指令格式如下&#xff1a;答案&#xff1a;(1)152301Q1101 010011 000 001I10&#xff0c;I21&#xff0c;Z/C0&#xff0c;D/I0&#xff0c;故为变址寄存器2寻址&#xff0c;EA(I2)A063215301063516Q。 (4)…

大咖年终“讲” 维视教育李明睿——制造业转型升级下需要重新定义人才培养

数字化转型迫在眉睫建设应用型大学风潮正涌制造企业在推进智能制造和数字化转型进程中&#xff0c;衍生出大量人才需求。据人社部、工信部发布的《制造业人才发展规划指南》显示&#xff0c;中国制造业10大重点领域人才缺口2025年将接近3000万人&#xff0c;缺口率高达48&#…

流媒体基础-RTCP

1、RTCP的封装 RTP需要RTCP为其服务器质量提供保证&#xff0c;周期性发送 RTCP的主要功能是&#xff1a;服务质量的监视、反馈&#xff08;QoS&#xff09;、媒体间的同步&#xff08;Sync&#xff09;&#xff0c;以及多播组中成员的标识。在RTP会话期间&#xff0c;各参与者…

Lichee_RV学习系列---认识Lichee_RV、环境搭建和编译第一个程序

系列文章目录 文章目录系列文章目录前言一、认识Lichee RV1、D1-H 芯片2、Lichee RV开发板3、系统镜像二、Lichee RV 固件烧录1、要求基本硬件2、基本资料下载3、固件烧录在这里插入图片描述三、连接上开发板1、ADB方式连接a&#xff1a;ADB下载b&#xff1a;ADB连接c&#xff…

孙溟㠭篆刻《无有中无尽藏》

《无有中无尽藏》孙溟㠭篆刻 无一物中无尽藏&#xff0c;是说当“我执”袪除&#xff0c;仅余“真如”时&#xff0c;便可以理解“无尽藏”。虽然身上没有东西&#xff0c;但是其实世人身上藏了所有的东西。“无心”亦是有心&#xff0c;心中富足。所以当人祛除心中的偏执&…

自动语音识别(ASR)研究综述

自动语音识别ASR研究综述 一、语言识别基础知识 从语音系统识别构成来讲&#xff0c;一套完整的语音识别系统包括&#xff1a;预处理、特征提取、声学模型、语言模型、以及搜索算法等模块&#xff0c;具体结构示意图如下所示: 特征提取&#xff08;MFCC声学特征&#xff09…

Error handling response: TypeError: self.processResponse is not a function

问题背景 &#xff1a; 自己在搭建 Vue 初始模板架子的时候 &#xff0c; 解决完 router 路由的报错问题后 &#xff0c; 控制台还剩下一个显眼的 Error 红色 Bug &#xff0c; 不解决的话看着难受 &#xff0c; 盘它 &#xff01; 点击报错内容后进入 &#xff1a; Error h…

redis应用笔记

1.登录服务 在登陆服务中,如果将数据全部存储到tomcat中,当存在多个tomcat的时候,数据是无法同步的,这就导致了数据的共享问题: 1、每台服务器中都有完整的一份session数据&#xff0c;服务器压力过大。 2、session拷贝数据时&#xff0c;可能会出现延迟 解决办法就是采用redi…

SpringBoot整合Redis实现优惠券秒杀服务(笔记+优化思路版)

本文属于看黑马的redis的学习笔记&#xff0c;记录了思路和优化流程&#xff0c;精简版最终版请点击这里查看。 文章目录一、全局ID生成器1.1 理论1.1.1 全局唯一ID生成策略1.2 代码(Redis自增)二、实现优惠券秒杀下单2.1 SQL2.2 SQL对应实体类2.2.1 普通券实体类2.2.2 秒杀券实…

声纹识别之说话人验证speaker verification

目录 一、speaker verification简介 二、主流方案和模型 1、Ecapa_TDNN模型 2、WavLm 三、代码实践 1、Ecapa_TDNN方案 a、模型结构 b、loss c、数据处理 d、模型训练和评估 e、说话人验证推理 2、WavLm预训练方案 a、模型结构和loss b、数据处理 c、模型训练 …

html5支持的几种音频格式介绍

关于音频的格式 ogg音频 Ogg全称应该是OGGVobis(oggVorbis)是一种新的音频压缩格式&#xff0c;类似于MP3等的音乐格式。Ogg是完全免费、开放和没 有专利限制的。OggVorbis文件的扩展名是.OGG。Ogg文件格式可以不断地进行大小和音质的改良&#xff0c;而不影响旧有的编码器或…

合合信息扫描全能王“照片高清修复”功能上线,3秒还原老照片

穿越时光的“美颜”!合合信息智能图像处理技术让老照片“焕新”“春运”已经开始&#xff0c;团聚时刻即将到来。和亲人们一起围炉话家常&#xff0c;翻开旧日的相册&#xff0c;品读一张张泛黄的照片背后最牵动人心的情感&#xff0c;也是“年味”所在。时光会在照片上留下斑驳…

巨量引擎·2023教育Future大会:扎根内容生态,做好经营提效

求知方寸间&#xff0c;如风过千川。当知识创作成为新的潮流&#xff0c;当教育数字化迈入直播与短视频新时代&#xff0c;当图书电商红红火火&#xff0c;如何做好教育全产业链升级与创新&#xff1f;新年伊始&#xff0c;巨量引擎举办“行知.行为.行万里 2023教育Future大会”…

嵌入式实时操作系统的设计与开发(六)

中断系统结构 在RTOS中&#xff0c;中断是与具体硬件平台关联度最大的部分&#xff0c;为了实现高可移植性、可配置性&#xff0c;中断子系统依照aCoral的整体结构来设计&#xff0c;划分为HAL&#xff08;硬件抽象层&#xff09;和内核层。 在HAL层先将各种中断汇拢&#xff…

第三周周二1.10

-A 添加规则 -I 插入 -F 清空 -L 查看 -p 调整默认规则 -D 删除规则 dport : -j ACCEPT DROP REJECT LOG /var/log/messages -n 以数字的形式显示结果 -v 详细信息 -x 精确的 -line-number 行号 删除&#xff1a;指…

2023 年你应该知道的 10 个开源项目

精心策划的 2023 年 GitHub 上最有趣的开发工具和项目列表。1.NetBeansNetBeans 是一个开源的集成开发环境&#xff0c;因其支持多种编程语言和平台而受到开发人员的欢迎。动图2.OpenCVOpenCV 是一个用于图像和视频处理的开源计算机视觉库。它广泛用于对象检测、面部识别和机器…

嬴图 | 走进 Ultipa Manager 之 高可视化

Ultipa Manager是嬴图数据库管理系统基于网页端的应用。自2019年至今&#xff0c;已迭代最新至v4.2版本。本系列&#xff0c;笔者将分三篇文章&#xff0c;引导大家走进嬴图之Ultipa Manager&#xff0c;详细了解其高可视化、数据科学家工具箱、便捷的数据迁移3大亮点功能&…

分享91个NET源码,总有一款适合您

NET源码 分享91个NET源码&#xff0c;总有一款适合您 91个NET源码下载链接&#xff1a;https://pan.baidu.com/s/1dqb9XgiiVfsVkq-wqKt3Kg?pwd275d 提取码&#xff1a;275d 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&…

mybatis插入mysql数据库PersistenceException 数据库连接超时

mybatis插入mysql部分数据失败mybatis插入mysql数据库PersistenceException1、异常堆栈信息&#xff1a;2、问题原因&#xff1a;3、问题排查3.1 查看数据库连接信息3.2 问题解决3.2.1 Spring项目可以在配置文件里面设置3.2.2 修改conn改成局部变量mybatis插入mysql数据库Persi…

python 语法(空行、变量、if条件控制、循环语句)编码示例

文章目录前言python 语法(空行、变量、if条件控制、循环语句)编码示例1 空行&#xff0c;在python中空行也是代码2 单个变量赋值、多个变量赋值3 if条件控制4 循环语句4.1 while循环4.2 for 循环前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff…