final用法
1、final用在类上,表明当前类它不能被继承,没有子类。
2、final用在方法上,表明当前方法不能被override,不能被重写。
3、final用在变量上,表明当前变量是一个终态的变量,是一个常量,这个变量的值一但被赋值后就不能被改变了。
(一般final用作全局变量的时候和static连用 即final static)
对于final类型的成员变量的初始化方式:
1、声明变量时直接赋值
2、在构造方法中完成赋值,如果一个类有多个构造方法,就要保证在每个构造方法中都要完成对该final类型变量的初始化工作。
static用法
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。
static 修饰变量
- 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
- 在加载类的时候,static变量在内存中申请,而非在实例类的时候申请内存。类的所有实例共享同一个static变量。
- private是访问权限限定,static表示不要实例化就可以使用。 private static的变量表示该变量不能在其他类中通过类名来直接引用
- 静态变量与实例变量
- 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类 的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
- 对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
- 静态变量的使用场合
- 在对象之间共享值时
- 不需要通过实例来访问变量,方便访问变量时
static修饰方法
- 静态方法可以直接通过类名调用,任何的实例也都可以调用
- 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract
- 静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。
- 申明为静态方法的是 为了方便方法的调用,Java API中的Math类中所有的方法都是静态的,而一般类内部的static方法也是方便其它类对该方法的调用。