• Java核心技术第四章——2.final 和 static


    final实例域

      实例域(对象的属性)可修饰为final。修饰为final后,在构建对象时必须初始化这个实例域。若没有在实例域进行初始化,那么必须在每个构造器内初始化这个实例域(否则会编译错误)。

    表明在后面的操作中,不能够再对它进行修改。即没有对应的域更改器(set)方法.

      final修饰大部分都是应用于基本类型域(基本数据类型)或者不可变类的域(例如:String类),若修饰可变的类,可能会对读者造成混乱。

    静态域与静态方法 static

    静态域

      static修饰的属性称为静态域,它是属于类的,所以也称为类域。每个类中只有一个这样的静态域。不管你new 多少次对象,他们都是共用这个静态域,

    所以静态域是属于类的,不属于对象。可以看下图:

         

       我把nextId设置为静态域,userId为私有数据域。在调用set方法的时候,nextId都会自增1。下面为测试方法和结果:

         

      可以看到UserInfo类的nextId 在u1 和 u2中都是共用的。当其中一个对象修改nextId,那么其他对象的nextId也会跟着修改。

    静态常量

       上述所说的是静态变量,一般比较少用,用的比较多的是静态常量,就是使用final 和 static修饰的属性。

    例如,Math.PI(圆周率),使用方法为 类名.属性名  静态常量一般修饰不可变的实例域。

         

      在上一章封装性说过最好对实例域设置为私有域(private)。而final修饰的常量则没有问题,可以修饰为公有域(public)。因为final域是不可变的。

    静态方法

      使用静态方法时,并不需要实例化对象。使用方法为 类名.方法名 例如 UserInfo.getNextId方法

         

      使用getNextId方法时,不使用任何的UserInfo对象,就是说不会使用到它的私有数据域,可以访问其静态域。而上述说过静态域是属于类的,不属于任何对象。

    一般在下面两种情况下使用静态方法:

      1.一个方法不需要访问对象的状态,所需的参数都不会使用到私有数据域。

      2.一个方法只需要访问类的静态域

  • 相关阅读:
    iOS 苹果开发证书失效的解决方案(Failed to locate or generate matching signing assets)
    iOS NSArray数组过滤
    App Store2016年最新审核规则
    iOS 根据字符串数目,自定义Label等控件的高度
    iOS 证书Bug The identity used to sign the executable is no longer valid 解决方案
    Entity FrameWork 增删查改的本质
    EF容器---代理类对象
    Entity FrameWork 延迟加载本质(二)
    Entity FrameWork 延迟加载的本质(一)
    Entity FrameWork 增删查改
  • 原文地址:https://www.cnblogs.com/Johnson-lin/p/8934393.html
Copyright © 2020-2023  润新知