static和final关键字

打印 上一主题 下一主题

主题 771|帖子 771|积分 2313

目录

final关键字

final修饰变量

被修饰的变量不能被改写
对于基本类型来说,其值不能改变
对于引用类型(对象),对象的引用不能改变,但对象内部的属性是可以改变的
tips:在并发编程中,适当用final修饰一些只读变量,有利于减少额外的同步开销
final修饰方法

被修饰的方法不能被子类重写
private方法隐式被定为final,所以若子类中定义的方法和父类中的private方法命名相同。那么此时子类并不是重写该父类方法,而是定义了一个新的方法
final修饰类

被修饰的类不能被继承
static关键字

static关键字只能定义在类中,不能定义在任何方法中
static修饰变量

用它修饰的变量叫静态变量,也称为类变量,该变量为类所有,即static只能定义在类中,不能在方法中,在内存中只存在一份
  1. public class X {
  2.         private int a;        //实例变量
  3.         private static int b; //静态变量
  4.         public static void main(String[] args) {
  5.                 X x = new X();   //创建一个实例
  6.                 int a = x.a;
  7.                 int b = X.b;
  8.         }
  9. }
复制代码
每创建一个实例,就会产生一个实例变量,与实例共生死
static修饰方法

静态方法必须要实现,不能是抽象方法。
用它修饰的方法叫静态方法,类加载时静态方法会一起加载,否则需要先实例化类才能加载方法。
static方法就是没有this的方法,即不用创建对象就能访问方法
类名.方法名进行访问
注意:静态方法内部不能调用非静态方法,反过来可以;静态方法是类的方法,非静态方法是对象的方法
static 修饰代码块

用它修饰的代码块叫静态代码块。静态代码块可以置于类中的任何地方,类中可以有多个 static 块,在类初次被加载的时候,static 代码块按照顺序来执行,每个 static 修饰的代码块只能执行一次。
  1. static {
  2.         ....
  3. }
复制代码
static定义内部类
  1. public class OuterClass {
  2.     class InnerClass {//非静态内部类
  3.             ...
  4.     }
  5.     static class StaticInnerClass {//静态内部类
  6.             ...
  7.     }
  8.     public static void main(String[] args) {
  9.         OuterClass outerClass = new OuterClass(); //外部类实例
  10.         InnerClass innerClass = outerClass.new InnerClass();
  11.         
  12.         StaticInnerClass staticInnerClass = new StaticInnerClass();
  13.     }
  14. }
复制代码
非静态内部类依赖于外部类的实例,即需要先创建外部类实例,才能用这个实例去创建非静态内部类。而静态内部类不需要
同时,静态内部类不能访问外部类的非静态的变量和方法
关于初始化顺序

static修饰的变量和代码块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表