java 常量前加final_Java中static、final修饰符、对常量变量的总结

static

static属性

定义:static修饰的属性就叫静态属性;如果类的某个属性,不管创建多少个对象,属性的存储空间只有唯一的一个,那么这个属性就应该用static修饰

作用:static属性可以使用对象调用,也可以直接用类名调用

特点:静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个

static方法

定义:static修饰的方法称为静态方法;如果某个方法不需要与某个特定的对象绑定,那么该方法可以使用static修饰

作用:static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用

特点:任何方法都可以直接调用静态方法、非静态方法不能直接调用,需要创建对象后用对象名调

应用场景:如果某个方法与实例无关,也就是说不管哪个对象调用这个方法,都执行相同的操作,则应该定义为静态方法,就不需要创建对象后再使用该方法

例如:API中的Math类,都是静态方法,因为进行数学运算时,与Math对象本身无关,使用类直接调用即可

static块

定义:用static修饰的代码块表示静态代码块,当Java虚拟机加载类时,就会执行该代码块

语法:直接在代码块{...}前加上static就变成静态块、static {}

作用:静态块只有在类加载的时候被执行一次,不管创建多少个对象,都不会再执行;一个类中可以有多个静态块,按照顺序执行。

应用场景:如果一个类加载的时候,总要预先做一些事情,则可以放在静态块中,例如,读取一个属性文件,进行一些常规配置,写一些日志等。

static内部类

例外:static不能修饰普通类,但是可以修饰内部类

final

作用:用于声明属性,方法和类

类:不能被定义为抽象类或是接口,不可被继承

属性:定义就必须直接赋值或者在构造方法中进行赋值,并且后期都不能修改

方法:定义必须有实现代码,并且子类里不可被覆盖

特点:当final修饰属性时,基本数据类型的属性将成为常量,不能被修改

常量和变量的总结(按作用于区分)

在类中声明的变量或常量叫属性;或者叫成员变量

在方法中声明的变量叫局部变量;或者临时变量

属性可以使用final修饰;局部变量也可以

属性可以使用static修饰;局部变量不可以

属性可以使用四种权限修饰符修饰;局部变量不可以

属性可以在整个类中使用;局部变量只在当前方法中使用

属性都有默认的初始化值,如引用类型都是null,整型是0等;局部变量不被自动初始化,必须手动初始化

属性的生命周期很长,随着类加载或者创建对象被初始化,直到没有对象引用才回收;局部变量生命周期很短,执行某个方法时临时被初始化,方法结束即被回收

如果局部变量与属性重名,则遵守就近原则,可以使用this区分

代码示例

1 packagesummary3;2

3

4 final class Final //创建一个final类、不能被定义为抽象类或是接口,不可被继承

5 {6 final void Final() //创建一个final方法:不能被覆写,只能被继承

7 {8

9 }10 }11 public classFeatureModifier12 {13 { //这是一个块:每次调用构造方法是被调用

14 System.out.println("块每次调用构造方法的时候就会被调用");15 }16 static //这是一个静态块:只有加载主类时被调用

17 {18 System.out.println("静态块每次加载类的时候就会被调用");19 }20

21 final int j; //声明一个final属性、基本数据类型值变为常量不能修改

22 FeatureModifier(int i) //创建带有一个参数的构造方法

23 {24 this.j=i; //final属性必须在声明时赋值、或者在构造方法里赋值

25 }26

27 static class Static //static修饰的类只能是内部类

28 {29 static int i; //声明static属性,可以用对象或者类名直接调用

30 static void mehtod() //可以用类名直接调用、任何方法都可以直接调用静态方法

31 {32 System.out.println("这是一个静态方法"+i);33 }34

35 }36 public static void main(String[] args) //加载类时会调用块

37 {38 FeatureModifier FM1 = new FeatureModifier(0); //每一次调用构造方法时都会调用块

39 FeatureModifier FM2 = new FeatureModifier(1); //每一次调用构造方法时都会调用块

40 Static.i = 10;41 Static.mehtod();42 }43 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值