final和static关键字

final关键字修饰一个类,此类不能被继承,修饰方法不能被覆盖,修饰变量不能被修改 比如String类就是final类

String a = "go die,";
final String b = "final";
String c = "go die,"+b;
String d = a+b;
String e = "go die,final";
System.out.println(e==c);//true
System.out.println(e==d);//false
System.out.println(c.equals(d));//true
结果是否和你想想的一致?这是因为编译阶段c已经是"go die,final"了,所以和e指向的同一常量池, 因为d是运行时生成的,所以指向的常量池不一致,但是他们的值是相同的,在编译时期b已经被当成常量了

如果一个变量整个执行过程中不会变化,可以使用final,这是一个好的习惯


static关键字

当我写代码的时候,需要把计算的工程抽出去单独成一个方法,当计算少的时候可以放在本类下,但是多的时候呢,这个时候你就会想到写一个工具类,比如Math类,如果没有static关键字,你需要new Math().pow();才可以使用,这样每次都需要new对象,这肯定是不合理的,所以加上了出现了static关键字,这个时候就成为了Math.pow();如果需要把Math也去掉在import中加入 import static java.lang.Math.*;这个时候就可以直接使用pow();了

static关键字还可以用来定义静态代码块。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次

class Example {
    public static void sayHello() {
        System.out.println("Hello, everybody~");
        // 这个当然不能用。static函数与其挂靠的那个类的对象没有任何关系。
        // static函数是全局唯一的。
        // this.sayBye();
    }   

    public void sayBye() {
        System.out.println("Good Bye~");
    }   

    public void saySomething() {
        // 唯一的一点好处,大概就是成员函数里这样三种写法都是OK的。
        // 但这个没卵用。我更喜欢Java只保留第三种写法,免得大家误会。
        this.sayHello();
        sayHello();
        Example.sayHello();
        this.sayBye();
    }
}

static函数是全局函数,和任何类没有关系,只不过是挂靠而已,挂靠的好处就是本类下不用带类名了

有的可能会有疑问,为什么不同类下可以相同名称呢,因为每一个类都是一个封闭的命名空间,在不同的类定义相同的函数是没有问题的,调用的时候带上类名,这本质上是两个不同的函数


以上是学习过程中 知乎老师指导的  谢谢老师



猜你喜欢

转载自blog.csdn.net/jianguang01/article/details/68925024
今日推荐