美文网首页
一分钟带你了解java中的static关键词

一分钟带你了解java中的static关键词

作者: 飞羽亦 | 来源:发表于2020-12-09 22:08 被阅读0次

java中的static关键词

Static基本规则:
(1)一个类的静态方法只能访问静态属性。
(2)一个类的静态方法不能直接调用非静态方法。
(3)如果访问权限允许,static属性和方法可以使用对象加’.’方式调用,当然也可以使用实例加’.’方式调用。
(4)静态方法中不存在当前对象,所以不能使用this,当然也不能使用super。
(5)静态方法不能被非静态方法覆盖。
(6)构造方法不允许被声明为static的。
static关键词,可以加在方法上,成员变量上,代码块。 类就不要想了。

image

1. static方法

static方法可以在类没有实例化的情况话直接访问。 在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

2. static变量

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

static变量只会有一个内存空间,虽然后多个实例,但这些实例中的static变量会共享同一个内存空间。所以静态变量的值发生变更要格外注意,以免造成不必要的“bug”。

static变量是在类装载的时候就被初始化的。

3. static代码块

可以用来初始化一些成员信息。


public class testClassA {
    public static int val = 1;
    static {
        System.err.println("11:" + val);
        val = 2;
        System.err.println("22:" + val);
    }
    public static int getVal() {
        return val;
    }
}
 /*最新2020整理收集的很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,需要获取这些内容的朋友加Q君样:756584822*/
System.err.println(testClassA.getVal());

结果:

11:1
22:2
2

4. static内部类

为何要用内部类?
1). 内部类一般只为其外部类使用;
2). 内部类提供了某种进入外部类的窗户;
3). 也是最吸引人的原因,每个内部类都能独立地继承一个接口,而无论外部类是否已经继承了某个接口。因此,内部类使多重继承的解决方案变得更加完整。

public class ClassA {
    public static String val = "1";
     
    public  ClassA() {
    }
    public static class ClassB {//静态内部类
        public static int bVal = 2;
    }
     
    public class ClassC {
        public ClassC()
        {
             
        }
         
        private void name() {
            System.err.println("abc");
        }
    }
}

5. static静态导入

静态导包是为了简化代码,提高代码的阅读性,但是如果滥用阅读性会很糟糕。

对于静态导入,一定要遵循两个规则(来自下面的资料):

不使用*(星号)通配符,除非是导入静态常量类(只包含常量的类或接口)。
方法名是具有明确、清晰表象意义的工具类。

import static java.lang.System.*;

public class testClass {
    public static void main(String[] args) {
        err.println();//这里就不用system.err.println()了。
    }
}

6. 实现单例

public class ClassA {
 
    private static ClassA instance = null;
 
    public static synchronized ClassA getInstance() {//静态方法生成实例 懒汉模式  用到的时候再实例化
        if (instance == null) {
            instance = new ClassA();
        }
        return instance;
    }
 
    public void test() {
        System.err.println(1);
    }
}
public class ClassA {
 
    private static ClassA instance = new ClassA();// 饿汉模式,直接生成实例
 
    public static ClassA getInstance() {
 
        return instance;
    }
 
    public void test() {
        System.err.println(1);
    }
}最新2020整理收集的很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,需要获取这些内容的朋友加Q君样:756584822

//使用volatile关键词,单例模式最优解决方案,不支持旧版jdk

public class ClassA {
 
    private volatile static ClassA instance = null;
 
    public static ClassA getInstance() {
        if (instance == null) {
            synchronized (ClassA.class) {
                if (instance == null) {
                    instance = new ClassA();
                }
            }
        }
        return instance;
    }
 
    public void test() {
        System.err.println(1);
    }
}

//静态内部类实现单例模式 兼容旧版jdk
public class ClassA {
    private ClassA() {
 
    }
 
    private static class InstanceClass {
        private static ClassA instance = new ClassA();
    }
 
    public static ClassA getInstance() {
        return InstanceClass.instance;
    }最新2020整理收集的很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,需要获取这些内容的朋友加Q君样:756584822
 
    public void test() {
        System.err.println(1);
    }
}

ClassA.getInstance().test(); //使用方法

7. 一些注意事项:

1. 静态的成员变量可以被实例化后的类对象访问,静态方法也可以被对象访问,但是会有警告。

2. 局部变量不可以static。

3. static代码块优先于构造函数。

点击链接加入群聊【Java交流圈】 ](https://jq.qq.com/?_wv=1027&k=0IsBuUb0)

最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加QQ群:
756584822

相关文章

  • 一分钟带你了解java中的static关键词

    java中的static关键词 Static基本规则:(1)一个类的静态方法只能访问静态属性。(2)一个类的静态方...

  • 带你全面了解java的static

    最近跟同事闲聊时聊到了大家对java的static关键字的了解,突然发现很多入行不久的甚至有多年工作经验的同事,居...

  • Java中static关键词

    特点: 1、static是一个修饰符,用于修饰成员变量、成员函数。2、static修饰的成员被所有的对象共享。3、...

  • Java Agent的隔离实现以及卸载时一些坑

    在《一文带你了解Java Agent》中,让大家了解了Java Agent的来龙去脉,当通过attach方式去动态...

  • java程序执行顺序

    Java 类中代码的执行顺序深入了解Java程序执行顺序 单个类: static变量—>Static代码块—> m...

  • java中的static关键字

    又到了读代码了解java知识的时间了。今天我们来了解下java中的static关键字,来看看它的作用和一些相关原理...

  • java - 关键字 static

    一 static 代表着什么 在 java 中,static 表示静态的意思,并不是全局的意思,在 java 中不...

  • java面试问题总结与分享,很乱

    java中static关键字的作用 在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员...

  • 【JAVA】Java中的static

    0x01 static的作用 static代表它修饰的那个东西是属于整个类的。 0x02 static的特点 st...

  • Kotlin学习2

    1.Kotlin中static在kotlin中 没有static关键字,但是有类似java中static的用法例如...

网友评论

      本文标题:一分钟带你了解java中的static关键词

      本文链接:https://www.haomeiwen.com/subject/vppkgktx.html