Java不常见的关键字及其含义

一、关键字总览
这里写图片描述
这里写图片描述
二、含义概述
  abstrcat    
  abstrcat是抽象的意思,用于定义抽象类,抽象函数。抽象类的用法规则如下:
  1,用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,这个方法叫做抽象方法;
  2,含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写;
  3,abstract类可以扩展(增加子类),但不能直接实例化;
  
  c、static 
  用于定义静态成员变量或方法,也就是成为附属于类的变量或方法。因此可以从类外部直接调用,而不用先实例化该类。类的成员表量在类的所有实例中只存在一个。
  Java中有一个不好的地方,就是它居然允许实例变量去调用静态变量和方法。这是很容易引起初学者混淆的地方。其实,通过实例调用到最后都会归结为通过类去调用这些静态变量或方法,因此多个实例调用的静态方法其实都是一样的!
  
  final(最终,不可改变)
  final 关键字可以应用于类,以指示不能扩展该类(不能有子类)。final 关键字可以应用于方法,以指示在子类中不能重写此方法。abstract 意味着必须扩展类,final 意味着不能扩展类。一个方法不能同时是 abstract 又是 final。因此,一个类不能同时是 abstract 又是 final。   
  
  strictfp
  strictfp的意思是FP-strict,是精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种我行我素的行为来完成这些操作,以致于得到的结果往往无法令人满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果想让浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
  可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字。
  
  synchronized
  锁定当前对象,在执行当前这个对象时不应许其他线程打断插入,为一次只应由一个线程执行的关键代码段提供保护。
如果应用于静态方法,那么,当该方法一次由一个线程执行时,整个类将被锁定。
如果应用于实例方法,那么,当该方法一次由一个线程访问时,该实例将被锁定。
如果应用于对象或数组,当关联的代码块一次由一个线程执行时,对象或数组将被锁定。
  
  volatile
  volatile 关键字一个时间内只有一个线程可以访问,但可以被多个线程异步修改,以确保所有线程所看到的指定变量的值都是相同的。
  volatile变量可以被看作是一种“程度较轻的synchronized”;与synchronized块相比,volatile变量所需的编码较少,并且运行时开销也较少,但是它所能实现的功能也仅是synchronized的一部分。
  下面,是volatile的特性:   
  1、保证可见性
  当两个线程同时对一个对象进行操作时,如果线程1修改了这个对象的值,那么线程2的工作内存中的缓存变量会无效,从而需要去主存中重新读取。所以volatile保证了可见性   
  2、volatile不能确保原子性
  仍然以上面的例子来讲,在进行自增操作之后线程1中的工作内存中变量不会改变,线程2中也不会,但是在拿到结果时这个变量的值却是会加1的。所以这就造成了上面所说的可见性失效。所以volatile不能保证原子可见性   
  3、volatile保证原子有序性
  使用volatile关键字修饰过的变量,能够保证在其前的代码都在它这个变量操作之前执行。之后的代码都在对这个变量操作之后执行。
  下面,是volatile的应用实例:
  1、状态标记量
  2、单例模式中的double check  
  
  transient
  transient 关键字可以应用于类的成员变量,以便指出该成员变量不应在包含它的类实例已序列化时被序列化。
 
  instanceof
  用来判断对象所属的类
    
  throw
  用于抛出用户自己定义的异常
  
  throws
  声明一个系统异常可能被抛出。应用于方法,以指出方法引发了特定类型的异常。         

  goto 
  C\C++中实现无条件转向语句,goto 语句的使用往往会使程序的可读性降低,且为了结构化程序设计,java中现在一般不用。
  
  const 
  在Java中,const是作为保留字以备扩充。可以用final替换const,一般C++中用const,java中用final。
  native
  Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
  
  可以将native方法比作Java程序同C程序的接口,其实现步骤:
  1、在Java中声明native()方法,然后编译;
  2、用javah产生一个.h文件;
  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
  4、将第三步的.cpp文件编译成动态链接库文件;
  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()

猜你喜欢

转载自blog.csdn.net/ygy901006/article/details/80078824