今天主要介绍下三种修饰符:static、abstract、final的区别。
先来一张图:
修饰符总结
接下来对每种修饰符分别进行总结:
static:
静态属性:如果属性使用static修饰的话就是静态属性,静态属性不绑定到某个对象,而是属于整个类,可以直接用类名调用。
静态方法:静态方法和静态属性类似,不绑定到对象,可以直接用类型调用。
静态块:在类加载的时候被调用,而且只调用一次。
abstract
抽象类:抽象类是不能被实例化的类,往往用作父类。
抽象方法:没有方法体的方法是抽象方法,往往在子类中实现,有抽象方法的类一定是抽象类。
final
final类:final类不能被继承。
final属性:final属性为常量,赋值后不能修改,赋值的方式有两种,一种是声明的时候赋值,一种是在构造方法中赋值。
final方法:final方法不能被子类覆盖。
大体上就是这么几个区别。但是呢?说到这边我就有两个疑问了。
第一个疑问:抽象类必须都是抽象方法?这句话是对的还是错的?
第二个疑问:既然有静态块,我们知道在静态块里面可以初始化,那么,用了静态块初始化再用静态变量赋值会怎么样?
接下去就试试~~
第一个疑问:
抽象类
显而易见,在抽象类里可以写抽象方法也可以写不是抽象方法的方法~~!所以总结为:有抽象方法的一定是抽象类,抽象类里不一定都是抽象方法~
第二个疑问:
先定义静态属性的i值
先定义静态属性的i值
结果已经出来了,这里需要解释一波嘿嘿。静态变量在类初始化时首先被加载的,JVM会去查找类中所有的静态声明,然后分配空间,这个时候只是完成了地址空间的分配,还没有赋值。之后JVM会根据类中静态赋值(包括静态类赋值和静态块赋值)的先后顺序来执行。对于上面的第二个程序而言,就是先声明了int类型的地址空间,并把地址传递给了i,然后按照类中的先后顺序进行赋值动作,首先执行静态块的i=2,后执行静态属性的i=3,那么最后的结果就是i=3了,第一个程序也是同理。但是如果有多个静态块对i继续赋值呢?i的值也是取决于最后的值!
所以这里要提倡的是变量一定要先声明后赋值!
最后,今天是元宵佳节,祝愿各位小伙伴节日快乐,在新的一年里实现自己的愿望~~喜欢的关注一波哈~
最后应要求附上java的单词(一天十个):
JDK(Java Development Kit) java开发工具包
JVM(Java Virtual Machine) java虚拟机
classpath 类路径
version 版本
author 作者
public 公共的
class 类
static 静态
void 没有返回值
String 字符串类型
谢谢收看~~!!
联系客服