Java 常见关键字总结
一.Final
1. 最终的,不可变的
2. final修饰的类不可以被继承,final类中所有的成员方法都会被隐式地指定为final方法
3. final修饰的方法不能重写
4. final变量修饰基本数据类型,则初始化后数值不能更改;如果是引用类型,则初始化后不能让其指向另一个对象。
使用final主要原因是防止任何继承类修改它的定义
二.This
1. 用于引用类的当前实例
2. this关键词可以访问当前类的实例的变量和方法,例如第一个this访问的是当前类的实例的变量,第二个类访问的是当前类的实例的方法。
int[ ] res;
void xx{
int a = this.res.length;
this.report}
Void report( ){
}
3. 关键字是可选的,但是使用关键字能让代码更加容易读懂。
三.Super
1. 用途:访问父类变量、调用父类中的一些方法
2. 使用this和super注意的问题:使用this,super掉泪其他构造方法时,需要放在首行。
四. Static
使用场景
1. 修饰成员变量和成员方法
(1)被static修饰的成员属于类,被类中所有对象共享,建议通过类名调用
(2)。。。。。。。。。。。。。成员变量属于静态成员变量,放在java内存区域的方法区(java内存区域我居然毫无印象)。方法区是个线程共享的内存区域
(3)题外话:HotSpot虚拟机中的方法区被称为永久代,它使用永久代来实现方法区,这样gc就可以像管理堆一样来管理这部分的内存
(4)调用格式 类名.静态变量名;类名.静态方法名();
2. 静态代码块
(1)定义在类中的方法外,执行顺序为静态代码块-非静态代码块-构造方法。无论创建多少对象,静态方法都只执行一次
3. 静态内部类
(1)与非静态内部类的区别:非静态内部类在编译完成之后会隐含地保存一个引用,该引用指向创建它的那个类,但是静态内部类就没有这个引用
(2)所以静态内部类的创建不需要依赖外围类,也不能使用外围类的非static成员变量和方法。
(3)静态内部类实现单例模式
public class Singleton{
//使用private,避免默认调用构造方法创建对象(一个私有构造函数,确保只有单例类能创建实例)
Private singleton(){
}
// 一个私有静态变量(确保只能有一个实例)
Private static class SigletonHolder{
Private static final Singleton INSTANCE = new singleton();
}
//一个公有静态函数 (给使用者提供调用方法)
Public static Singleton getUniqueInstance(){
return SingletonHolder.INSTANCE;
}
Singleton类加载的时候静态内部类是没有被加载到内存的,只有当调用getUxxx()方法之后,singletonHolder才会被加载然后初始化instance实例,且jvm能保证instance方法只被实例化一次
4. 修饰类(在上面了)
5. 静态导入包 :import static xxx;可以不需要使用类名调用静态成员
五. 静态方法和非静态方法
1. 静态方法属于类的本身,非静态方法属于对象,如果方法执行的操作不依赖类中的变量和方法,那应设置为对象
2. 调用静态方法可以无需创建对象,非静态方法需要(回想自己的学生管理系统)
3. 静态方法只允许访问静态成员,不允许访问实例成员变量和示例方法
六. 静态代码块和非静态代码块
1. 相同点,在jvm加载类且构造方法执行之前执行。
2. 不同点,如果不想创建对象,又希望调用类中的方法,那么需要使用静态方法