static使用详解和使用误区-java

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28483283/article/details/82683503

static的特点

A:随着类的加载而加载,也就是说在项目启动的时候,这个变量就已经被初始化了。
B:优先于对象存在
为什么这样说,static修饰的变量或者方法,在编译的时候就已经被分配一定的内存,直达程序停止时才会被释放,而对象需要new的时候才能使用。
C:被类的所有对象共享

举例:咱们班级的学生应该共用同一个班级编号。 其实这个特点也是在告诉我们什么时候使用静态?
如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。

它可以修饰成员变量,还可以修饰成员方法,以及用来写代码块

在《Java编程思想》P86页有这样一段话:
  “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”

1、static修饰成员变量

修饰全局成员变量

1、可以直接通过类名.变量名的方式直接调用,即被类的所有对象共享
2、调用静态变量的方法可以是静态方法,也可是是非静态方法
3、随着类的加载而加载,
4、优先于对象存在
 
 使用场景:一般,一个变量需要被多出调用,而且基本不会变的情况下,建议使用static修饰

修饰方法内变量

1、static不能修饰方法内部的变量,不然编译错误。

2、static修饰方法

1、静态方法可以直接通过类名调用,任何的实例也都可以调用。
2、静态方法是类内部的一类特殊方法,只有在需要时才将对应的方法声明成静态的,一个类内部的方法一般都是非静态的
3、静态方法中没有this和super关键字,只能访问所属类静态成员变量以及静态成员方法

使用场景:一般用户工具类方法。

3、static代码块

1、static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次(即静态代码块只是在程序启动的时候被执行一次)。
2、曾经犯下的错:

static Date date = null;  
    static {
        Date dateTime=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");

        try {
            date = sdf.parse(sdf.format(dateTime));
        } catch (ParseException e1) {
            e1.printStackTrace();
        }
    }

date在类中很多地方都要用,索性就用代码块定义一个全局变量来初始化,但是我想要的date的当前日期,static修饰的代码块只在程序启动的时候被初始化一次,比如我九月一号启动了项目,那么这个date就一直是九月一号的日期了。

4、final和static一起使用

final和static一起使用时比较常见的使用方法,用final和static一起声明的方法或者变量称为‘全局常量’,这种常量有两个特点。
1、一旦给值不可以被修改,通过类型直接方法
2、修饰方法时,方法不可以被覆盖,并通过类名可以直接访问

5、static使用误区

1、以后遇到了在写吧

猜你喜欢

转载自blog.csdn.net/qq_28483283/article/details/82683503