Java中常用的关键字static和final

Java中常用的关键字static和final

在我们平时的开发当中,经常会遇见static关键字,那么大家对static的用法,大家知道多少呢?下面我们来一起看一下吧,首先咱们来看《Java编程思想》中的一段话:

​ “static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法.这实际上正是static方法的主要用途.”

​ 简而言之,一句话来描述就是:

​ static方便在没有创建对象的情况下来进行调用方法或者变量

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态的static代码块

static可以修饰:
1.成员变量(简称属性)
2.方法
3.代码块(不能出现在方法内部)
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。

只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

1)static修饰的成员变量

static修饰的变量(属性)被称作static变量或者说静态变量,静态变量的两个特征:

1.静态变量的数据被本类中所有实例对象共享

2.静态变量的访问权只要不是private,都可以直接通过"类名.属性"进行直接访问

看字是不是很无聊,来看代码吧:

1).创建一个demo类

扫描二维码关注公众号,回复: 11249215 查看本文章
public class StaticDemo{
    //定义了一个静态的变量phone
    static String phone="小米";
}

2)创建一个static的测试类:

public class StaticDemoTest{
    public static void main(String[] args){
        //直接输出phone吧
        System.out.println(StaticDemo.phone);//这句话输出小米
        //使用类名.属性来直接修改属性值
        StaticDemo.phone = "vivo";
        System.out.println(StaticDemo.phone);//这时候输出的则是vivo
        //也可以new来通过实例对象来访问
        StaticDemo sd = new StaticDemo();
        //下面来通过实例对象输出StaticDemo的phone变量
        System.out.println(sd.phone);//同样这句话也输出vivo
        //修改属性值
        sd.phone = "华为";
        //我们再来输出一下phone
        System.out.println(sd.phone);//这时候我们输出出来的就是华为
    }
}

在这里插入图片描述

2)static修饰成员方法:

被static修饰的方法称作静态方法,和静态变量一样,可以直接使用"类名.方法名"来直接调用,可以不创建对象

直接看代码吧

//这是在本类中,可以直接使用方法名来直接调用
public class StaticDemo{
    public static void Test(){
        System.out.println("测试static修饰的方法");
    }
    public static void main(String[] args){
        Test();
    }
}

下面咱们来创建一个测试类:

public class StaticDemoTest{
    public static void main(String[] args){
        //直接使用类名.方法名是可以直接访问Test()方法
        StaticDemo.Test();
    }
}

在这里插入图片描述

由此可以看出:静态方法只能访问被static修饰的成员,静态方法不能调用非静态的资源,因此,非静态资源需要使用对象来调用,但是,静态方法在加载的时候可能还没有对象呢

3)static修饰的代码块

被static修饰的代码块被称为静态代码快,静态代码快随着类的加载而执行,并且静态代码块只会执行一次

//咱们还使用前面的StaticDemo类,进行测试
public class StaticDemo{
    //静态的代码块
    static{
        System.out.println("静态代码块执行了....");
    }
    //非静态代码块
    {
        System.out.println("非静态代码块执行了....")
    }
    //构造方法
    public StaticDemo(){
        System.out.println("构造方法执行了......");
    }
    public static void main(String[] args){
        new StaticDemo();
    }
}

说到这里了,咱们来说说他们的执行顺序:首先加载出来的是静态代码块,其次是非静态代码块,接着最后加载出来的是构造方法

在这里插入图片描述

static的简单使用就是这么多了,下面来看看static和他的好兄弟final一块用是什么样子的:

首先咱们必须先了解一下final是什么?

final翻译成中文就是最后的,最终的,既然是最后的,那么肯定是不能被修改的

final可以用于修饰三个地方:类,属性,方法

1.final修饰的类不能被继承,简称终类

2.final修饰的属性,必须手动给初始值,并且给定以后不能被修改

3.final修饰的方法可以被继承,但是不能被覆盖或者重写

那么多static和final在一起是做什么的呢?

static final用来修饰变量和方法,简称全局常量(static和final之间的书写顺序是没有关系的)

注意:常量的命名规范:字母全部都大写,用下划线连接多个单词,不能用任何方式来引用this或者super

对于变量,一旦给值,将不能被修改,可以通过类名进行访问

对于方法,不可覆盖,可以通过类名进行直接访问

常量*(static和final之间的书写顺序是没有关系的)

注意:常量的命名规范:字母全部都大写,用下划线连接多个单词,不能用任何方式来引用this或者super

对于变量,一旦给值,将不能被修改,可以通过类名进行访问

对于方法,不可覆盖,可以通过类名进行直接访问

好了,今天就先分享这么多,有什么不足的地方,欢迎各位大佬指点,咱们下期再见…

猜你喜欢

转载自blog.csdn.net/qq_45280147/article/details/106202828