一.static
static即表示“静态”,可用来修饰变量,方法,内部类以及代码块。
1. static类
public class Outer {
static class Inner{
public void innerFun(){
System.out.println("Inner");
}
}
}
静态内部类与非静态内部类的区别:非静态内部类当中会隐性的持有一个外部类的引用,而静态内部类当中没有
没有这个引用:
-
静态内部类可以使用Outer.Inner()来实例化。
-
静态内部类不可以使用外部类中未被static修饰的变量或方法
此外非静态内部类中不能使用static修饰变量或方法。
使用场景
- ViewHolder
- Handler
上述两个场景中,内部类都需要访问外部的成员变量或方法,同时为了防止内存泄漏,不适合持有外部类的强引用。
2. static变量
静态变量在类被装载时就已经初始化,并且被存入静态存储区,被所有对象共享。而未被static修饰的称为实例变量,存储在堆栈中,在创建对象的时候初始化,因此各个对象副本互不影响。
3. static方法
被static修饰的方法被称为静态方法,存储在方法区中,且只有一份。由于静态方法也没有类的引用,所以无法使用类中的非静态资源(当然显示传入引用后可行)
public class Outer {
int a=10;
public static void innerFun(){
System.out.println(new Outer().a);
}
}
4. static块
静态块在类被加载时执行并仅执行一次
二.final
final表示不可改变,可修饰类,变量以及方法
1. final类
final类无法被继承
2. final变量
被final修饰的变量即为常量,无法被修改,可实现线程安全
final int a=10;
Outer out=new Outer();
out=new Outer();
out.a=1; // 无法为最终变量a分配值
3. final方法
被final修饰的方法可以被继承,但是无法被复写
网友评论