finalstanding(static和final关键字)
final关键字
final修饰变量
被修饰的变量不能被改写
对于基本类型来说 ,其值不能改变
对于引用类型(对象) ,对象的引用不能改变,但对象内部的属性是可以改变的
tips:在并发编程中 ,适当用final修饰一些只读变量 ,有利于减少额外的同步开销
final修饰方法
被修饰的方法不能被子类重写
private方法隐式被定为final ,所以若子类中定义的方法和父类中的private方法命名相同 。那么此时子类并不是重写该父类方法 ,而是定义了一个新的方法
final修饰类
被修饰的类不能被继承
static关键字
static关键字只能定义在类中 ,不能定义在任何方法中
static修饰变量
用它修饰的变量叫静态变量 ,也称为类变量 ,该变量为类所有 ,即static只能定义在类中 ,不能在方法中,在内存中只存在一份
public class X { private int a; //实例变量 private static int b; //静态变量 public static void main(String[] args) { X x = new X(); //创建一个实例 int a = x.a; int b = X.b; } }每创建一个实例 ,就会产生一个实例变量 ,与实例共生死
static修饰方法
静态方法必须要实现,不能是抽象方法 。
用它修饰的方法叫静态方法 ,类加载时静态方法会一起加载 ,否则需要先实例化类才能加载方法。
static方法就是没有this的方法,即不用创建对象就能访问方法
用类名.方法名进行访问
注意:静态方法内部不能调用非静态方法 ,反过来可以;静态方法是类的方法 ,非静态方法是对象的方法
static 修饰代码块
用它修饰的代码块叫静态代码块 。静态代码块可以置于类中的任何地方 ,类中可以有多个 static 块 ,在类初次被加载的时候 ,static 代码块按照顺序来执行 ,每个 static 修饰的代码块只能执行一次 。
static { .... }static定义内部类
public class OuterClass { class InnerClass {//非静态内部类 ... } static class StaticInnerClass {//静态内部类 ... } public static void main(String[] args) { OuterClass outerClass = new OuterClass(); //外部类实例 InnerClass innerClass = outerClass.new InnerClass(); StaticInnerClass staticInnerClass = new StaticInnerClass(); } }非静态内部类依赖于外部类的实例 ,即需要先创建外部类实例 ,才能用这个实例去创建非静态内部类 。而静态内部类不需要
同时 ,静态内部类不能访问外部类的非静态的变量和方法
关于初始化顺序
static修饰的变量和代码块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!