java中的static_final

菜鸟一只,若有不正之处,还请批评指正。

Static

  • 被声明为static的类的成员变量、常量和方法称为静态成员。
  • 静态成员同样遵循public、private和protected修饰符的约束。一个类的public static类成员可以由该类的任意对象访问,或者通过类名访问;一个类的private static类成员可以通过类方法访问(没有创建对象的类的private static的访问需要一个public static方法)
  • 当一个类还没有实例化任何对象时,静态变量和静态方法已存在并可以使用。
  • 静态成员可以通过如下方式调用:

        类名.静态成员

        当然也可以通过”对象.静态成员“的方式调用,但是不建议使用,因为这样容易混淆静态成员和非静态成员。

1.静态变量

  • 静态变量只有一份副本由类的所有对象共享。
  • 所以说静态变量可以节省内存空间。JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。 对于非静态变量,每创建一个实例,就要为非静态变量分配一次内存。
区别静态变量非静态变量
拥有者对象
初始化时间类初次加载时实例化对象时
类的对象之间是否共享否(互不影响)
别名类变量实例变量

// 静态变量的特点同样适用于静态方法和静态代码块。

注意:static只能用于修饰成员变量,不能用于修饰局部变量,否则会报错(区别于c/c++)

2.静态方法

  • 可以对象之间共享
  • 可以在不创建对象的情况下就可以调用(静态方法不和对象绑定在一起)

注意:

1.在一个静态方法中只能访问静态成员。因为没有被static修饰的成员需要先创建对象才能访问,而静态方法在调用时可以不创建任何对象。

想到了啥?main()方法不就是被static修饰的。

2.静态方法中不可以使用this。因为static类变量和static类方法的存在不依赖于类的任何对象。

3.静态代码块

在程序中通常会使用静态代码块来对类的成员变量进行初始化。

如果在执行类时,希望先执行类的初始化动作,可以使用static定义一个静态区域。

public class demo1 {
    static{
        //...
    }
    
    public static void main(String[] args) {
        //...
    }
}

当这段代码执行时,首先执行static块中的程序,并且只会执行一次(类demo1被加载时)。

4.单例模式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

  • 单例类只能有一个实例。

  • 单例类必须自己创建自己的唯一实例。

  • 单例类必须给所有其他对象提供这一实例。

想了解的可以去下面链接看看

单例模式 | 菜鸟教程

5.静态内部类

java中的内部类_臭屁虾的博客-CSDN博客

final

1.final类

  • 定义为final的类不能被继承

  • 如果将某个类设置为final形式,则类中的所有方法都被隐式的设置为final形式,成员变量可以是final或非final形式。

final class A{
​
}

2.final方法

  • final方法不能被重写

  • 定义final的方法执行效率高于非final方法。

  • 一个被定义为private的方法隐式的被指定为final类型,无需将一个private方法再定义为final。

  • final方法不能被重写,但private final方法却似乎可以被重写,实际上不是,是生成了一个新的方法,像下面这样

class A{
    private final void print(){
        
    }
}
​
class B extends A{
    void print(){
        
    }
}

3.final变量

  • final变量值不可改变

  • 在声明时对final变量进行赋值,或者声明空白final,在构造方法中为空白final赋值

  • final修饰对象引用,可以为引用中的变量赋值,但不能将引用指向其他引用。

  • 数组也可以看做一个对象来引用

  • 一个既是static又是final的字段只占据一段不能改变的存储空间

  • 定义全局变量通常使用public static final修饰

final int[] a = {1 , 2};
a[0] = 2; // 可以
a = new int[]{3, 3};  // 不可以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

臭屁虾

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

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

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

打赏作者

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

抵扣说明:

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

余额充值