final方法,abstract方法和abstract类,native方法

final方法

1、为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(override),可以使用final方法。

2、为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化,要注意的是,编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。

3、class中所有的private和static方法自然就是final。

例如 public final void pubMethod(){}

抽象方法和抽象类

1、在类中没有方法体的方法,就是抽象方法。

2、含有抽象方法的类,即为抽象类。

3、如果一个子类没有实现抽象类中所有的抽象方法,则子类也成为一个抽象类。

4、我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。

abstract方法必须定义在abstract类中。

例如 protected abstract void  proMethod();

native方法

1、native方法是用户在java中可以使用,但不能编写的方法。

2、JNI(Java Native Interface),它允许Java虚拟机(JVM)内部运行的java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。

3、JNI最大的好处是它没有对底层java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。

4、JNI可以理解为Java和本地应用程序之间的中介。

步骤:

.so是unix,linux下动态链接库的后缀名

1、编写java代码

HelloWprld.java文件中

class HelloOWorld{

public native void displayHelloWorld();

static{//加载类的时候,就会加载静态语句块

Sysytem.loadLiabrary("hello");//加载名为hello的动态链接库

}

public static void main(String[] args){

new HelloWorld().displayHelloWorld();

}

}

2、编译java代码

javac HelloWorld.java

3、创建.h的文件,javah编译的是的类

在头文件中h,声明了本地方法的名称

Java_类名_native方法的方法名

4、本地方法的实现

HelloWorldImp.c

5、创建动态链接库

cl编译器用法  cl?可以查看它的具体用法

注意-I后面不要有空格。

6、执行java程序

java HelloWorld。

这就是利用native去访问c语言写的函数的方法

原文地址:https://www.cnblogs.com/XiHua/p/3529526.html