• 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;
    }

             访问接口中的静态变量

    Inter.COUNT//类名.静态变量
  • 相关阅读:
    Date
    Math
    封装实参的对象 arguments
    函数方法call()和apply()
    执行上下文栈
    原型(prototype属性)和原型链。 重要!!!
    android studio for Mac快捷键大全
    软件的横竖屏切换
    Android XML文件中@id和@+id的区别
    java中的Iterator<E>
  • 原文地址:https://www.cnblogs.com/lzw123-/p/9379248.html
Copyright © 2020-2023  润新知