java中的常用关键字final static native
一、final关键字
在java这门编程语言中,final是一个关键字,它可以被用来修饰类,变量以及成员方法。
1. final修饰类
当final关键字修饰一个类,则该类会成为最终类,即该类不能被继承(俗称“断子绝孙类”),但是该类可以有父类。
2、final修饰成员变量:该成员变量必须在其所在类对象创建之前被初始化(且只能被初始化一次)。
这句话的意思是: 被final修饰的成员变量,一定要被赋值且只能被赋值一次,且必须是在这个成员变量所在的类对象创建之前被赋值。
final修饰的成员变量在定义时必须初始化(三种方法:直接赋值、代码块、构造方法中),final修饰的局部变量定义时可以不被初始化,但是使用之前必须完成初始化!
3、当final关键字修饰了成员方法,则意味着这个方法不能被重写,但是可以被继承(注意,这里final修饰的是方法而不是类)。

二、static关键字
static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
1)static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。
2)static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
3)static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
在这里永远要记住一点:静态成员变量虽然独立于对象,但是不代表不可以通过对象去访问,所有的静态方法和静态变量都可以通过对象访问(只要访问权限足够)。
而且static是不允许用来修饰局部变量
初始化类(加载类)时,先加载静态块(如果有继承,先加载父类的),然后通过构造器来生成对象(如果有继承,先生成父类对象)
4) static内部类
1、静态内部类---访问--->外部类:
- 直接访问所有静态成员。

2、外部类---访问--->静态内部类:
- 创建对象再访问。(因为静态内部类中的say方法不是static方法)

3、外部其他类---访问--->静态内部类:

三、native关键字
native关键字充当JAVA语言与除JAVA之外的其他语言编写的代码块或库之间的链接,这可能取决于您操作的机器。如果将native关键字应用于一个方法,那么这意味着该方法将通过JNI(JAVA native interface)使用其他语言(如C或C++)编写的本机代码来实现。

浙公网安备 33010602011771号