Java 基础进阶篇(一)——— static 静态关键字与单例模式

这篇具有很好参考价值的文章主要介绍了Java 基础进阶篇(一)——— static 静态关键字与单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、static 静态关键字

static:代表静态的意思,可以修饰成员变量,可以修饰成员方法。

static 修饰方法之后称为 静态方法(类方法),修饰成员变量之后称为 静态成员变量(类变量)

static 修饰后的成员变量,可以被类的所有对象共享 (访问、修改)


1.1 静态成员变量与实例成员变量

静态成员变量 实例成员变量
概述 有 static 修饰,属于类,与类一起优先被加载,内存中只有一份,可以被共享访问 无 static 修饰,属于对象,每个对象中都存在一份实例成员变量
场景 如果信息要被共享,只需要一份就用,如:系统在线人数。 属于每个对象,且每个对象的该信息不同时,如:nameage,money…
访问规则 Java 基础进阶篇(一)——— static 静态关键字与单例模式 Java 基础进阶篇(一)——— static 静态关键字与单例模式

注意: 同一个类中,访问静态成员可以省略类名不写。


1.2 静态成员方法与实例成员方法

静态成员方法 实例成员方法
概述 有 static 修饰,属于类,与类一起优先被加载一次,可以被共享访问 无 static 修饰,属于对象,必须用对象触发访问
场景 如果该方法是以执行一个通用功能为目的,或者需要方便访问。 如表示对象自己的行为的,且方法中需要直接访问实例成员。
访问规则 Java 基础进阶篇(一)——— static 静态关键字与单例模式 Java 基础进阶篇(一)——— static 静态关键字与单例模式

注意: 同一个类中,访问静态成员方法可以省略类名不写。


1.3 static 访问注意事项

静态方法只能访问静态的成员,不可以直接访问实例成员
实例方法可以访问静态的成员,也可以访问实例成员
另外,静态方法中是不可以出现 this 关键字的。

Java 基础进阶篇(一)——— static 静态关键字与单例模式

public class Test {
    // 静态成员
    public static int onlineNumber = 10;
    // 实例成员
    private String name = "heima";

    /**
     * 静态方法
     */
    public static void fun1(){
        // 静态成员方法可以访问 静态成员
        System.out.println(Test.onlineNumber);
        System.out.println(onlineNumber);
        // System.out.println(name); // 报错
        
        // 静态成员方法不可以直接访问实例成员
        Test test = new Test();
        System.out.println(test.name); // 间接访问
		// System.out.println(this); // 报错
    }

    /**
     * 实例方法
     */
    public void fun2(){
        // 实例方法可以访问 实例成员
        System.out.println(this.name);
        System.out.println(name);

        // 实例方法可以访问 静态成员
        System.out.println(Test.onlineNumber);
        System.out.println(this.onlineNumber); // 不推荐
    }
}

1.4 内存使用情况

  1. 访问静态成员变量:与类一起优先加载。
    Java 基础进阶篇(一)——— static 静态关键字与单例模式
    Java 基础进阶篇(一)——— static 静态关键字与单例模式

  2. 访问静态成员方法:与类一起优先加载。
    Java 基础进阶篇(一)——— static 静态关键字与单例模式
    Java 基础进阶篇(一)——— static 静态关键字与单例模式


二、工具类

工具类里面都是静态方法,可以完成一个共用功能。

好处: 一次编写,处处可调,提高代码的复用,提高开发的效率。
注意:建议把工具类的构造器私有化,因为工具类无需对外创建对象,它的方法都是静态方法,直接用类名访问即可。


三、代码块

类的 5 大成分:成员变量、成员方法、构造器、代码块、内部类。

静态代码块 实例代码块
格式 static {…} {…}
特点 属于类,与类一起优先加载,自动触发执行一次。 属于对象的,每次调用构造器构建对象前都会执行一次,再执行构造器。
作用 可以用于在程序启动时,进行静态资源的初始化操作。 可以用于初始化实例资源。

四、单例模式

单例模式: 可以保证系统中,应用该模式的这个类永远只有一个实例,即一个类永远只能创建一个对象。
例如:任务管理器对象我们只需要一个就可以解决问题了,这样可以节省内存空间。

4.1 饿汉单例

特点: 拿对象时,对象已经存在。
实现: ① 构造器私有 ② 定义静态成员变量存储一个对象。

/**
 * 使用 饿汉单例实现单例类
 */
public class SingleInstance {

    /**
     * 2. 饿汉单例是在获取对象前,对象已经提前准备好了一个
     *    这个对象只能是一个,所以定义静态成员变量记住。
     *    属于类,只被加载一次
     */
    public static SingleInstance instance = new SingleInstance();


    /**
     * 1. 必须把构造器私有化
     */
    private SingleInstance(){
    }
}

4.2 懒汉单例

特点: 要拿对象的时候,才开始创建一个对象。
实现: ① 构造器私有 ② 定义静态成员变量,暂时不存对象。

/**
 * 使用 懒汉单例实现单例类
 * 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)
 */
public class SingleInstance2 {

    /**
     * 2. 定义一个静态的成员变量负责存储一个对象
     *    只加载一次,只有一份
     *    如果设置为 public 那么其他类可通过 SingleInstance2.instance 访问,访问结果是 null
     *    因此最好是私有化,避免挖坑
     */
    private static SingleInstance2 instance;

    /**
     * 3. 提供一个方法,对外返回单例对象
     */
    public static SingleInstance2 getInstance(){
        if(instance == null){
            instance = new SingleInstance2();
            return instance;
        }
        return instance;
    }

    /**
     * 1. 必须把构造器私有化
     */
    private SingleInstance2(){
    }
}

文章参考:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)文章来源地址https://www.toymoban.com/news/detail-430362.html

到了这里,关于Java 基础进阶篇(一)——— static 静态关键字与单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在VScode学Java类与对象(Java显式参数和隐式参数、静态方法+main方法、Java访问修饰符、static关键字、Java的包、对象数组)第三辑

    我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习----可以参考我的这篇博客:《我在VScode学Java》 方法会操作对象并访问他们的实例字段。 在Java中,显式参数和隐式参数是方法调用中的两种不同类型的参数。 注释: 第7行: sum 方法的参数

    2024年02月16日
    浏览(70)
  • Java static 关键字

    Java 中的 static 是一个非常重要的概念,它可以用来修饰变量、方法和代码块。 static 用于修饰类的成员,包括变量、方法和代码块。使用 static 修饰的成员被称为静态成员,它们属于类而不是对象,可以被类的所有实例共享。 1. 静态变量 使用 static

    2024年02月11日
    浏览(28)
  • 【java】static关键字

    类与对象的关系 类是构建对象的模板,一个类可以构建多个对象。 类在 方法区 当中,对象在 堆 中。 static修饰的变量是 独属于类 的变量,没有给对象。 运行结果  static修饰的变量究竟储存在什么地方 在 方法区 当中有 静态常量池 ,static修饰的变量被放在静态常量池中,

    2024年04月15日
    浏览(24)
  • 【Java入门】final关键字、static关键字、内部类的认识

    前言 : final是Java中的一个修饰符,用于表示某个变量、方法或者类不能被修改。final可以用于修饰类、方法和变量(局部变量,成员变量)。被final所修饰的类不能被继承,被final所修饰的方法不能被重写,被final所修饰的变量,不能被重新赋值 。 static是Java中的一

    2024年02月11日
    浏览(35)
  • java static关键字的作用

    用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享; 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键; 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于

    2024年02月08日
    浏览(35)
  • 2023.9 - java - static 关键字

     tips:  java 的 static修饰的 方法和变量 可以被 实例访问 ,但是typeScript 不可以。 static主要和Java的内存管理有关。我们可以将static与变量,方法,代码块一起使用。static属于该类,而不是该类的实例。 static可以修饰: 变量(也称为类变量) 方法(

    2024年02月10日
    浏览(31)
  • 详解Java的static关键字

    不依赖于对象实例:静态方法不需要依赖于任何对象实例,因为它们与具体的对象实例无关联。这意味着在没有创建对象实例的情况下,就可以直接通过类名访问或调用静态方法。 可以访问静态成员:静态方法可以访问类的静态成员(静态字段和静态方法),但不能访问非静

    2024年02月05日
    浏览(39)
  • 【java面向对象中static关键字】

    static修饰成员变量 static修饰成员变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static的注意事项 static的应用知识:代码块 static的应用知识:单例设计模式 static静态的意思,可以修饰成员变量,成员方法; static修饰成员变量: 1.有static修饰的成员变量叫做

    2024年02月13日
    浏览(35)
  • Java 基础进阶篇(三)—— 权限修饰符、final 关键字与枚举

    权限修饰符 用于约束成员变量、构造器、方法等的访问范围。 权限修饰符: 有四种作用范围由小到大 (private - 缺省 -protected - public) 注: 不同包下的子类指的是,不同包下的子类对象能访问,当前类创建父类对象访问不了。 定义成员变量、构造器、方法等一般需满足如下要

    2024年02月02日
    浏览(42)
  • Java SE 封装、包、static关键字和代码块

    1.1封装的概念 面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装特性。何为封装呢?简单来说 就是套壳屏蔽细节。 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互 1.2封装之访问

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包