java之特征修饰符

final修饰符

  1. 修饰变量:如果在定义变量时没有赋初始值,给变量一次存值的机会(因为变量在栈内存空间内没有默认值,如果不给机会存值,就没法用啦);一旦变量被存储了一个值,若用final修饰后,则不让再次改变,相当于常量啦,值没法动。
    注意变量类型是基本类型还是引用类型
    如果修饰的变量是基本数据类型 ,则变量内的值不让更改—变为常量
    如果修饰的变量是引用数据类型,则变量内的地址引用不让更改—对象唯一
    内存图分析
    在这里插入图片描述
  2. 修饰属性:
    全局变量 存储在堆内存的对象空间内一个空间
    属性如果没有赋值 ,有默认值存在的
    属性用final修饰后,必须给属性赋初值,否则编译报错,系统会认为不是人为赋值
    特点与修饰变量一致
    注意变量类型是基本类型还是引用类型
    如果修饰的变量是基本数据类型 则变量内的值不让更改—常量
    如果修饰的变量是引用数据类型 则变量内的地址引用不让更改—对象唯一
  3. 修饰方法
    方法是最终的方法,不可更改
    子类继承父类的方法,将父类的方法重写(覆盖)
    final修饰的方法,要求不可以被子类重写(覆盖)
  4. 修饰类本身
    类是最终的 不可以更改
    (太监类 无后) 此类不可以被其他子类继承
    通常都是一些定义好的工具类
    Math Scanner Integer String等等

static修饰符

可以修饰

  • 属性
  • 方法
  • 类(指的是内部类)

静态元素的特点:

  1. 静态元素在类加载时就初始化啦,创建的非常早,此时没有创建对象
    在这里插入图片描述
    在这里插入图片描述

  2. 静态元素存储在静态元素区中,每一个类有一个自己的区域,与别的类不冲突

  3. 静态元素只加载一次(只有一份),全部类对象及类本身共享
    在这里插入图片描述

  4. 由于静态元素区加载的时候,有可能没有创建对象,可以通过类名字直接访问

  5. 可以理解为静态元素不属于任何一个对象,属于类的

  6. 内存管理,栈内存创建开始用完及回收,堆内存通过GC回收,静态元素区GC(Garbage Collection)无法管理,可以粗暴的认为常驻内存

  7. 非静态成员(堆内存对象里)中可以访问静态成员(静态区)

  8. 静态成员中可以访问静态成员(都存在静态区)

  9. 静态成员中不可以访问非静态成员(个数来说,一个静态元素出发访问一堆对象具有相同名字的东西,说不清出访问的是哪个)(静态元素属于类 非静态成员属于对象自己)
    静态元素内存简图
    在这里插入图片描述

  10. 静态元素中不可以出现this或super关键字(静态元素属于类,它们指代的是对象,静态元素的使用对象可以没有创建也能调用,因此不能用this或者super)

猜你喜欢

转载自blog.csdn.net/weixin_45608165/article/details/112766316