一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第12天,点击查看活动详情。
今天我们说下static和final这两个修饰符,昨晚写文章写这两个变量写迷茫了,
final
首先我们去看看final,他可以用来修饰变量,方法和类,口头禅似的final修饰的类表示该类不可被继承,比如String类,对于修饰的变量,也是不可修改的,所以final的变量会放在变量池中,为啥呢,因为接收的参数是private final char value[];也是加了final的,定义变量必须初始化,且值不能改变,所以我们看String类的很多的构造方法的注释都是由于String的不可变所以不建议初始化,但又必须初始化,所以需要赋初始值(这里我们要注意,对于引用类型的,我们可以改变地址所指的值也行,间接的改变值), 对于方法,表示该方法不能被重写, 重写会报错,所以对于不想重写的代码我们可以加上final,还有private方法也是不可重写的,这是因为private默认的就是final的;
static
对于static,当它修饰变量的时候,表示该变量为类所有,直接在方法区(某些文章写的是方法区,我还看了好久)里为所有实例共享,修饰代码块的话,我们会优先加载代码块里的内容,比启动的main方法还优先, 修饰方法的话只允许访问静态成员,而不允许访问成员变量,当然,static还可以修饰内部类;
static和final
对于static表示该实例只创建一次,且有全局的意思,对于final,表示该实例不能被修改,就是常量的意思,那么static final就表示一个实例只能创建一次且不能更改,简称全局常量,当然这仅仅针对常量而言,而对于某些集合而言,就像上面final说的,不可以改变其指向的地址,但是可以改变地址指向的内容,那么对于我们用static final修饰的List Map而言,我们虽然不能修改他们创建的对象,但是我们可以改变他们对象地址所指向的值就可以了