关于类的修饰符
对于类可以使用的说明符:
public abstract final (default)
对于类来说,只有两个访问说明符:public default。
对于方法和变量的说明符:
public protected (default) private staticfinal abstract native(调用本地方法JNI) synchronized(同步方法,用于多线程)
public protected (default) private是访问控制符
Public和protected的类可以被其他的包当中的类(protected是被子类)访问,但是在访问的类当中需要用import导入。
static 修饰的方法和变量都是属于类,而不是属于类的对象。 static方法和变量的引用都是直接通过类名引用的。
在static方法当中不能调用非静态的方法和引用非静态的成员变量。但是在非静态的方法中是可以访问静态方法和变量的。
final
就是不可以被修改的。
变量不可以赋值,方法不可以被重写,类不可以被继承。
final 修饰一个方法的时候,就是说这个方法不能被子类覆盖(override)。
final类型的变量必须显示初始化,且初始化的方法必须是在申明时或者在构造方法中直接赋值,而不能通过调用函数赋值。
abstract
在类中没有方法体的方法,只有一个声明,就是抽象方法。
如果一个类有抽象方法,就是抽象类。一个抽象类的子类,必须实现抽象基类中所有的抽象方法。如果不想实现所有的抽象方法,则子类也成为一个抽象类。
有的时候,可以把一个没有任何抽象方法的类声明为abstract,目的是为了避免由这个类产生任何的对象。
抽象类就是用来继承的。
抽象方法就是用来给重写的。
构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。
static和private方法都是final 方法?
对的。
对static来说,因为static的数据或方法,属于整个类的而不是属于某个对象的,是不会和类的任何对象实例联系到一起。如果子类和父类之间存在同名的static方法名,却不是重载。这么说来,其实static修饰的方法也是final了。
对private方法来说必然是final的,因为私有方法都不可以被继承。
特别要注意一个问题:
对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象,这一点在编程中用到很多。
native
native方法是用户在Java中可以使用,但不能编写的方法。
JNI(Java Native Interface),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。
JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。JNI可以理解为Java和本地应用程序之间的中介。但是使用了JNI的程序失去了平台无关性。