final关键字,static关键字


Final

final的意思为最终,不可变。final是个修饰符,它可以用来修饰类,类的成员,以及局部变量。不能修饰构造方法。

注意

  被final修饰的类不能被继承但可以继承别的类

class Yy {}
final class Fu extends Yy{} //可以继承Yy类
class Zi extends Fu{} //不能继承Fu类

final修饰成员方法:
1.该方法可以被子类继承,但是不能被重写
2.从父类那里继承来的方法重写后可以加final关键字

class Fu {    
    // final修饰的方法,不可以被覆盖,但可以继承使用
    public final void method1(){}
    public void method2(){}
}
class Zi extends Fu {
    //重写method2方法
    public final void method2(){}
}

final修饰变量(基本类型还是引用数据类型)
一次赋值,终身不变

final int i = 20;
i = 30; //赋值报错,final修饰的变量只能赋值一次

final修饰成员变量,
1.成员变量的初始值不能为系统的默认值(需要手动赋初始值)
2.可以通过构造方法赋值
3.一次赋1值,终身不变

class Demo {
    //直接赋值
    final int m = 100;
    
    //final修饰的成员变量,需要在创建对象前赋值,否则报错。
    final int n; 
    public Demo(){
        //可以在创建对象时所调用的构造方法中,为变量n赋值
        n = 2016;
    }
}

static关键字

static它是静态修饰符,一般用来修饰类中的成员。

  被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)

例子:

package com.oricle.School;

public class Student {
    private String  name;
    private int  age;
    private static String  school ="清华大学";
    public Student(String  name,int  age){
        
        this.age=age;
        this.name=name;
        
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getSchool() {
        return school;
    }
    public void setSchool(String school) {
        this.school = school;
    }
    
    public String toString() {
        return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
    }
    
}

测试类:

package com.oricle.School;

public class Test {

    public static void main(String[] args) {
        Student s1=new Student("熊大",15);
        Student s2=new Student("熊1",14);
        Student s3=new Student("熊2",13);
        Student s4=new Student("熊3",12);
        s1.setSchool("北京大学");
        System.out.println(s1.toString());
        System.out.println(s2.toString());
        System.out.println(s3.toString());
        System.out.println(s4.toString());
        
    }

}

结果演示:

注意
  静态成员只能访问静态成员

class Demo {
    //成员变量
    public int num = 100;
    //静态成员变量
    public static int count = 200;
    //静态方法
    public static void method(){
        //System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
        System.out.println(count);
    }
}

  静态内容存于静态区,优先被扫描,优先于对象存在,不能使用this/super,扫描完静态区,随后再main方法进栈,其中 main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。

class Demo {
    //成员变量
    public int num = 100;
    //静态方法
    public static void method(){
        //this.num; 不能使用this/super。
        System.out.println(this.num);
    }
}

定义静态常量

开发中,我们想在类中定义一个静态常量,通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接。

定义格式:

public static final 数据类型 变量名 = 值;

例如:

class School {
    public static final String SCHOOL_NAME = "北京大学";
    public static void method(){
        System.out.println("一个静态方法");
    }
}

当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。

System.out.println(Company.SCHOOL_NAME); 
Company.method(); // 调用一个静态方法

注意

接口中的每个成员变量都默认使用public static final修饰。

所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。

interface Inter {
    public static final int COUNT = 100;
}

访问接口中的静态变量

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn