静态static、final的使用

  • Post author:
  • Post category:其他




static 静态

static修饰符:成员修饰符,只能修饰类的成员(变量和方法),方法里面不能使用static修饰

被static修饰的成员,称为静态成员



静态内存图

在这里插入图片描述

在这里插入图片描述



静态的调用规则

内存图进行分析,静态的成员在内存中有自己的所属,属于自己的类

因此:静态的调用方式:类名.静态成员



静态使用的注意事项
  • 不能在静态上下文中引用非静态变量

    。静态不能直接使用非静态

    。原因:生命周期,静态成员优先于非静态成员出现在内存中

    静态不能调用非静态

    非静态可以调用静态
  • 静态方法中,禁止使用this和super

    。this和super都和对象有关联

    。静态优先对象存在


静态和对象无关性

多态:对象的多态性

静态成员:属于自己的类,和对象无关

public static void main(String[] args) {
	FU f = new zi();
	system. out. println(f.s); //s 静态变量,编译运行全是父类
	f. show(); //方法show() 静态方法,编译运行全那是父类
}


成员的调用方式
  • 静态成员

    。类名调用

    。可以被对象调用(错)javac编译器,直接编译为类名
  • 非静态成员

    。只能被对象调用


main方法解释
  • public:被JVM调用,权限足够大
  • static :JVM通过类名调用方法main
  • void:返回值,返回调用者,JVM获得返回值无意义
  • main:名字固定
  • String[] args:存储字符串数组,以后会添加JVM的启动参数


静态成员和非静态成员的区别
  • 内存上看区别

    。静态成员变量,跟随类进入到静态区

    。非静态成员变量,跟随对象进入到堆内存
  • 所属上看区别

    。静态成员变量,属于自己的类

    。非静态成员变量,属于对象
  • 从生命周期上看

    。静态成员优先于非静态进入内存,在静态区里,程序结束才释放,最长

    。非静态成员进入堆,对象成为垃圾后JVM进行回收相对较短
  • 调用方式上看

    。静态类名调用

    。非静态对象调用
  • 数据使用上看

    。静态的成员,是所有对象的共享数据

    。非静态的成员,是对象自己的特有数据





什么时候使用静态修饰

具体事务具体分析了,根据分析的结果,决定是否使用静态修饰

分析方法:分析这些事物之间是否存在共享数据,出现共享数据,static修饰

以上说的是静态成员变量

什么时候使用静态方法:如果方法中的功能使用了静态的成员变量,这个方法就应该static修饰



final修饰符

final翻译为最终的,不可改变的

  • 可以修饰类
public final class A{} 最终类
最终类不被子类继承,A类没用孩子(太监类)
以前学过最终类:String Scanner System
  • 可以修饰方法
public final 返回值类型 方法名(参数列表){} 最终方法
最终方法,不能被子类重写
有些累,定义的方法,一部分很完美,另一些方法不是很完善
  • 可以修饰局部变量
final 数据类型  变量名 = 值 ; 最终变量
被final修饰的变量,一次赋值,终身不变
final修饰的是引用类型,引用类固定的是内存地址
  • 可以修饰成员变量

    成员变量定义在类中,方法外面.内存是在堆里面,变量会有默认值的.

    固定的不是变量在内存中的默认值, final锁住的是我们手动赋值.

    一次赋值,终身不变

    成员变量的赋值方式:
  • 定义赋值
  • 构造方法赋值
  • set方法赋值

    注意:成员变量使用final修饰 final int a ;构造方法可以为变量a赋值set方法不行



版权声明:本文为qq_45018290原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。