final修饰符
- 修饰变量:如果在定义变量时没有赋初始值,给变量一次存值的机会(因为变量在栈内存空间内没有默认值,如果不给机会存值,就没法用啦);一旦变量被存储了一个值,若用final修饰后,则不让再次改变,相当于常量啦,值没法动。
注意变量类型是基本类型还是引用类型
如果修饰的变量是基本数据类型 ,则变量内的值不让更改—变为常量
如果修饰的变量是引用数据类型,则变量内的地址引用不让更改—对象唯一
内存图分析
- 修饰属性:
全局变量 存储在堆内存的对象空间内一个空间
属性如果没有赋值 ,有默认值存在的
属性用final修饰后,必须给属性赋初值,否则编译报错,系统会认为不是人为赋值
特点与修饰变量一致
注意变量类型是基本类型还是引用类型
如果修饰的变量是基本数据类型 则变量内的值不让更改—常量
如果修饰的变量是引用数据类型 则变量内的地址引用不让更改—对象唯一 - 修饰方法
方法是最终的方法,不可更改
子类继承父类的方法,将父类的方法重写(覆盖)
final修饰的方法,要求不可以被子类重写(覆盖) - 修饰类本身
类是最终的 不可以更改
(太监类 无后) 此类不可以被其他子类继承
通常都是一些定义好的工具类
Math Scanner Integer String等等
static修饰符
可以修饰:
- 属性
- 方法
- 块
- 类(指的是内部类)
静态元素的特点:
-
静态元素在类加载时就初始化啦,创建的非常早,此时没有创建对象
-
静态元素存储在静态元素区中,每一个类有一个自己的区域,与别的类不冲突
-
静态元素只加载一次(只有一份),全部类对象及类本身共享
-
由于静态元素区加载的时候,有可能没有创建对象,可以通过类名字直接访问
-
可以理解为静态元素不属于任何一个对象,属于类的
-
内存管理,栈内存创建开始用完及回收,堆内存通过GC回收,静态元素区GC(Garbage Collection)无法管理,可以粗暴的认为常驻内存
-
非静态成员(堆内存对象里)中可以访问静态成员(静态区)
-
静态成员中可以访问静态成员(都存在静态区)
-
静态成员中不可以访问非静态成员(个数来说,一个静态元素出发访问一堆对象具有相同名字的东西,说不清出访问的是哪个)(静态元素属于类 非静态成员属于对象自己)
静态元素内存简图
-
静态元素中不可以出现this或super关键字(静态元素属于类,它们指代的是对象,静态元素的使用对象可以没有创建也能调用,因此不能用this或者super)