Java基础进阶(static 单例设计模式)

目录

一、Static

成员变量:

成员方法:

口诀:静态成员只能访问静态成员

二、零碎

三、代码块

1、静态代码块:static{}

2、实例代码块:{}

四、工具类

特点:

好处:

五、单例设计模式

好处:

步骤:

两种单例模式:饿汉式、懒汉式


环境:Windows+idea2021+jdk17

才疏学浅,欢迎批评指正



一、Static

static 叫做静态,可以修饰成员变量、成员方法(均按照有无static修饰分为两类)

成员变量:

               类变量(静态成员变量): 有static修饰,的属于类,在计算机里只有一份,会被类和类 

        的所有对象共享。(new 出来的就是对象)

                实例变量(非静态成员变量):无static修饰,属于对象

(理解:类是集合,类中元素值有共同特征,故类变量用来存储这些共同特征。故类变量被共享。调用方法:类名 . 类变量名,也可以通过 对象 . 类变量名。与类一起加载一次,后再不也不能创建;

对象是类中的一个元素,他除了那些共性还有他自己的特征。实例变量就用来存储他自己与众不同的那些征,所以被每个对象自己独有。调用方法:对象 . 实例变量名。随着对象的创建儿创建,随着对象的消灭而消灭)

成员方法:

        类方法(静态成员方法):在方法类型前加static。有static修饰的成员方法属于类,同变量,类方法也被类和类的所有对象共享

                调用方法:类名 . 类方法名 又或是对象名 . 类方法

        实例方法(非静态成员方法):无static修饰的成员方法,属于对象

                调用方法:对象名 . 实例方法

(我的理解:同上面,方法是对象的行为。类方法就是 ,类中对象所共有的行为,所以通过对象和通过类都能调用类方法,一类一起加载一次,后不再加载

实例方法理解成是一些对象所特有的行为,同实例变量的理解)

口诀:静态成员只能访问静态成员

二、零碎

1、类内的方法叫成员方法,类内方法外的变量叫成员变量。

2、idea中复制光标所在行内容到下一行的快捷键是:ctrl+D

3、类编译运行的时候主类的字节码文件会先进栈,main方法进方法区

4、被私有的对象、方法或构造方法只能在其所在的类中调用

5、类有5个组成部分:成员变量、构造器、方法、代码块、内部类

6、设计模式就是具体问题的最有解决方案

三、代码块

1、静态代码块:static{}

使用场景:完成类的初始化 例如给类变量的初始化(多用于给复杂类型的静态变量初始化(复杂是指引用数据类型)

被调用的时机:在类加载的时候自动执行,同类一起只加载一次

(理解:算是类的默认配置,在类的创建之初,通过这种方式配置)

2、实例代码块:{}

被调用的时机:每次创建对象时执行实例代码块,在构造器之前执行

(理解:算是实例对象的默认配置,把该对象那些构造函数共有的东西放进来,从而优化代码)

四、工具类

特点:

方法为类方法(优点:不需要new就能直接执行)

构造器私有(不能被new )

(即:想要调用工具来中的方法只能通过类名 . 方法名 调用)

好处:

调用方便,提高了开发效率。不让创建对象,节省内存。

五、单例设计模式

单例设计模式要解决的问题是:确保一个类只有一个对象

好处:

在有些业务场景下,使用单例模式,只创建一个对象,可以避免内存浪费。

步骤:

1、把类的构造器私有

2、定义一个类变量记住类的一个对象

3、提供一个类方法,返回该对象

两种单例模式:饿汉式、懒汉式

饿汉式:拿对象的时候已经创建好了(用空间换时间)

public class A{
    private static A a  = new A();
    
    private A(){}
    
    public static A getObject(){
        return a;
    }
}

懒汉式:用到类对象的时候才创建(用时间换空间)

public class A {
    private static A a;
    private A() {}
    public static A getObject() {
        if (a == null) {
            a = new A();
        }
        return a;
    }
}

这是自己调整的懒汉设计模式,这个合适吗?会更优化嘛?

public class A {
    private static A a;
    private A() {}
    static {
        a = new A();
    }
    public static A getObject() {
        return a;
    }
}​
懒汉式单例设计模式能这样写嘛,这样会不会比写判断语句更优化一点

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵桑..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值