Java关于final和static的一些见解

一、static的作用

static可以修饰变量、方法、成员属性。作为全局属性。

  1. 修饰成员变量和成员方法
  2. 静态代码块
  3. 修饰类(只能修饰内部类)
  4. 静态导包(用来导入类中的静态资源,1.5之后的新特性)

static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。

被static 声明的成员变量属于静态成员变量,静态变量 存放在 Java 内存区域的方法区

修饰属性属性、对象时引用可变。

public class StaticTest {
    static User user = new User(1,"momoc");
    public static void main(String[] args) {
        System.out.println("User:" + user);
        User user2 = new User(2,"momoc2");
        //id name 字段
        User t = user;
        user = user2;
        user2 = t;
        user.setId(3);
        System.out.println("User:" + user + " id" + user.getId());
        System.out.println();
        System.out.println("User2:" + user2);}
}

 

执行结果:

User:User@4554617c
User:User@74a14482 id3

User2:User@4554617c

可知static静态变量修饰对象时可以改变引用,作为一个全局的对象,内容和引用可变。

修饰基本类型时,值(内容)也可以发生改变。

静态代码块:程序运行时进行初始化。

static变量和普通成员变量主要有以下4点区别:

  • 区别1:所属不同。static变量属于类,不单属于任何对象;普通成员变量属于某个对象
  • 区别2:存储区域不同。static变量位于方法区;普通成员变量位于堆区。
  • 区别3:生命周期不同。static变量生命周期与类的生命周期相同;普通成员变量和其所属的对象的生命周期相同。
  • 区别4:在对象序列化时(Serializable),static变量会被排除在外(因为static变量是属于类的,不属于对象)
二、final

先说结论。

修饰类–类不可变,不可继承
方法—-不可重写
变量(基本数据类型)—–值不可改变

引用—–引用不可变,引用的值可变。

Java关于final和static的一些见解插图

 

 

文章已创建 80

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部