• final和static


    *final:最终的、不可改变的-------单独应用率低:
    1.修饰变量:变量不能被改变
      1)final修饰成员变量,必须如下两个位置初始化:
        1.1)声明同时初始化成员变量
        1.2)在构造方法中初始化成员变量
      2)final修饰局部变量,只要在用之前初始化即可
    例:
    class Aoo{
    final int a = 5; //声明同时初始化成员变量
    final int b;
    Aoo(){
    b = 5; //在构造方法中初始化成员变量
    }
    void test(){
    final int c;//final修饰局部变量,只要在用之前初始化即可,不给值也可以
    //a = 55; //编译错误,final的变量不能被改变
    }
    }

    2.修饰方法:方法不能被重写,可以重写别的方法
    例:
    class Boo{
    final void show() {}
    void test() {}
    }
    class Coo extends Boo{
    //void show() {} //编译错误,final的方法不能被重写
    void test() {}
    }

    3.修饰类:类不能被继承,可以继承超类
    例:
    final class Doo{}
    //class Eoo extends Doo{} //编译错误,final修饰的类不能被继承
    class Foo[]
    final class Joo extends Foo{} //编译正确,final修饰的类可以继承超类


    *static:静态的
    1.静态变量(没有static修饰就称为实例变量)
    1.1)由static修饰
    1.2)属于类,存储在方法区中,就一份
    1.3)既然属于类就常常通过类名点来访问
    1.4)何时用:所有对象所共享的数据(图片、音频、视频等)

    2.静态方法(没有static修饰就称为实例方法)
      2.1)由static修饰
      2.2)属于类,储存在方法区中,就一份
      2.3)既然属于类就常常通过类名点来访问
        Scanner scan = new Scanner(System.in);//new一个对象
        int a = scan.nextInt(); //实例方法
        double b = scan.nextDouble();//实例方法

        double c = Math.random(); //静态方法(通过类名Math.来访问)
        double d = Math.sqrt(25);(求参数的平方根) //静态方法(通过Math.来访问)
        Arrays.sort(arr); //静态方法(通过类名Arrays.来访问)
    2.4)静态方法没有默认的this传递(没有this意味着没有对象,而实例变量必须通过对象来访问)
             静态方法不能直接访问实例成员
    2.5)何时用:方法的操作仅与参数相关而与对象无关的时候用
    {
    假设sqrt()不是静态的:
    无论m1,m2,m3,...,m100中的哪一个对象,去sqrt(25),最终结果都是一样的
    说明:sqrt()的操作仅与参数相关而与对象无关
    这种情况下sqrt()适合做成静态的

    Math m1 = new Math();
    double d = m1.sqrt(25); //5.0

    Math m2 = new Math();
    double d = m2.sqrt(25); //5.0

    Math m3 = new Math();
    double d = m3.sqrt(25); //5.0
    }

    3.静态块
      3.1)属于类的,在类被加载期间自动执行,因为类只被加载一次,所以静态块只执行一次
      3.2)何时用:加载/初始化静态资源(图片、音频、视频等)

    *static final常量:
    1.必须声明同时初始化
    2.由类名点来访问,不能被改变
    3.建议:常量名所有字母都大写,多个单词由_分隔
    4.编译器在编译时将常量直接替换为具体的值,效率高
    5.何时用:数据永远不变,并且经常使用(做成static final常量是最好的)

    欢迎大佬指点。
  • 相关阅读:
    css文本在标签<text>内平均分布
    ES6实现去重,排序,加升序
    uni-app项目打包成小程序
    uni-app项目( uniapp滚动监听元素)
    运行vue项目:Module build failed: Error: Cannot find module 'node-sass'报错问题
    笨方法实现数量的输入与加一减一 、以及对边界值的判断禁用
    基于nuxt的前端商城pc端项目(bug记录)
    基于nuxt的商城项目pc端项目记录
    Vue学习笔记整理-长期更新
    程序员,不要创业!
  • 原文地址:https://www.cnblogs.com/tietouwa/p/13448734.html
Copyright © 2020-2023  润新知