博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
final关键字,static关键字
阅读量:6695 次
发布时间:2019-06-25

本文共 3262 字,大约阅读时间需要 10 分钟。

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//类名.静态变量

 

转载于:https://www.cnblogs.com/lzw123-/p/9379248.html

你可能感兴趣的文章
nginx反向代理httpd获取用户真实ip
查看>>
postgresql中的查询(query)二
查看>>
AspectJ深入学习
查看>>
js限制用户上传文件类型
查看>>
忘记mysql数据密码,如何重设
查看>>
在SpringMVC中整合jfinal微信项目
查看>>
扩展CURL后,cmd命令无法加载
查看>>
绕过 GIL 提升 Python 性能的一般方法
查看>>
用Eclipse追PostgreSQL源码
查看>>
【原创】第一个iOS应用程序
查看>>
PHP去除BOM头的方法
查看>>
提醒 TickTick v2.8.5.4 最新版
查看>>
怎么在Beyond Compare中插入表格数据
查看>>
JSONP
查看>>
【漏洞预警】OpenSSL 远程拒绝服务漏洞
查看>>
成本管理之(成本控制)
查看>>
Java 反射工具类
查看>>
Java继承关系中,父类方法使用实例变量和调用实例方法的探究
查看>>
csdn账号密码
查看>>
AWS 配置 AutoScaling 实现高可用的弹性计算服务
查看>>