final
final关键字代表“最终的”,“无法改变”的含义,通过final的存在能够提高程序效率、更好的进行程序设计。
final修饰的类型有:类、变量、方法、参数
- final类
final类是不可被继承的,fianl类的成员变量也默认都是fianl。在设计类时,如果这个类不需要子类,类的实现细节不允许改变,就是用final类 - final方法
final方法不允许子类进行重写。final方法的作用在于:锁定方法,防止修改;提高效率,编译器在调用final方法时,直接转入内嵌机制。 - final变量
final变量就是常量,赋值后不可改变,常量必须使用全大写表示
一个比较特殊应用叫做:final空白。就是定义final变量时不进行赋值,在使用前在进行初始化赋值。比如一个父类有一个final空白变量,那么他的子类就可以给这个final空白初始化赋值。为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。 - final参数
函数参数为final类型时,该参数无法被修改
static
static表示“全局”或者“静态”的意思。
static修饰的类型有:方法、变量、代码块、类
- static变量
static变量就是类变量(静态变量),在内存中只有一份拷贝,这个类的所有对象都是访问同一个类变量 - static方法
静态方法是属于类的方法,通过“类名.静态方法名”的方式调用,静态方法中无法访问非静态变量,因为静态方法属于类,而非静态变量属于对象 - static代码块
静态代码块将会在JVM的类加载的初始化阶段中,被收集到方法中执行,类的静态代码块只会运行一次 - static类
静态类只有一种存在的情况:静态内部类。
- 静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法
- 静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法
- 静态内部类可以单独初始化:
//Outer是外部类,Inner是静态内部类,通过”外部类.内部类()”的方式初始化内部类
Inner i = new Outer.Inner();
native
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。 这些函数的实现体在DLL中,JDK的源代码中并不包含,你应该是看不到的。对于不同的平台它们也是不同的。这也是java的底层机制,实际上java就是在不同的平台上调用不同的native方法实现对操作系统的访问的。
native的意思就是通知操作系统, 这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用。
比如Thread类中的:public static native Thread currentThread();方法就是native的,说明currentThread()方法是由操作系统实现的,java只是调用而已。
参考资料