1、概念java
Java关键字(Key Word): 对Java的编译器有特殊的意义,他们用来表示一种数据类型或者表示程序的结构.算法
保留字(Reserve Word):即它们在Java现有版本中没有特殊含义,之后版本可能会做为有特殊含义的词,或者该词虽然在Java中没有特殊含义,之后版本也不打算使用,但在其它语言中有特殊含义,不宜在Java中定义为变量名称等,由于容易混淆。缓存
注意:关键字和保留字均不能用做变量名、方法名、类名、包名和参数。安全
2、具体的保留字网络
goto、const多线程
3、具体的关键字(51个)函数
1.访问修饰符(3个)this
public、protected、privatespa
做用:用来修饰类(接口、抽象类)、方法、属性、构造方法、常量、主函数线程
2.类、接口、抽象类(9个)
class、interface、abstract——定义
extends——继承类、implements——实现接口
new——新建一个对象、super——调用父类方法、this——指代当前对象
instanceof——经过返回一个布尔值来指出,这个对象是不是这个特定类或者是它的子类的一个实例。
3.数据类型(13个)
void——没有返回值
byte、short、int、long——整型数据
float、double——浮点型数据
char——字符型数据
boolean——判断型数据
enum——枚举
null、true、false——值类型
4.线程(2个)
synchronized——线程同步(修饰方法、代码块,方法、代码块的同步)
volatile——线程同步(修饰属性,属性的同步)
1 关于volitate关键字,描述不正确的是() A 用volitate 修饰的变量, 每一次的更新对其余的线程都是可见的; B 对volitate 的操做是原子性的 C 对volitate 的操做不会形成阻塞 D 不依赖其余的锁机制,多线程环境下的技数器能够用volitate 来实现 注解: 一旦一个共享变量(类的成员变量,类的静态成员变量)被volitate修饰,那么,其就具有了两层含义: 1) 保证了不一样的线程对这个变量进行操做的时候的可见性;即一个线程修改了某个变量, 这个新的值对于其余的线程来讲是当即 可见的。 2) 禁止进行指令的重排序(volatile关键字能确保变量在线程中的操做不会被重排序而是按照代码中规定的顺序进行访问) volatile 只提供了保证访问该变量,每一次读取改变量的时候都是从内存中读取,并不会使用寄存器缓存该值. 对该变量的修改,volatile 并不提供原子性的保证; 因为及时更新,volitate 可能致使另外一线程访问最新变量值,没法跳出循环的状况, 多线程下,计数器必须使用保护锁; *注:原子性解释1:原子性就是说一个操做不能够被中途cpu暂停而后调度, 即不能被中断, 要不就执行完, 要不就不执行.
若是一个操做是原子性的,那么在多线程环境下, 就不会出现变量被修改等奇怪的问题。 原子性解释2:原子是世界上的最小单位,具备不可分割性。好比 a=0;(a非long和double类型)
这个操做是不可分割的,那么咱们说这个操做时原子操做。再好比:a++; 这个操做实际是a = a + 1;
是可分割的,因此他不是一个原子操做。非原子操做都会存在线程安全问题,须要咱们使用同步技术(sychronized)来让它变成一个原子操做。
一个操做是原子操做,那么咱们称它具备原子性。Java的concurrent包下提供了一些原子类,咱们能够经过阅读API来了解这些原子类的用法。
好比:AtomicInteger、AtomicLong、AtomicReference等。
5.异常(5个)
throw——抛出方法代码中的异常给方法自身。使用位置:方法中间
throws——抛出方法中的异常给调用者。使用位置:方法外部
try——捕获{}中代码是否有发生异常
catch——处理try捕获的异常
finally——无论有没有异常发生都会执行的代码块
6.返回(1个)
return
7.循环、条件(10个)
if、else、switch、case、break、default、continue、while、do、for
8.包(2个)
package、import
9.瞬时的(1个)
transient 关键字只能修饰变量,而不能修饰方法和类。
咱们都知道一个对象只要实现了Serilizable接口,这个对象就能够被序列化,java的这种序列化模式为开发者提供了不少便利,
咱们能够没必要关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的全部属性和方法都会自动序列化。
然而在实际开发过程当中,咱们经常会遇到这样的问题,这个类的有些属性须要序列化,而其余属性不须要被序列化,
打个比方,若是一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不但愿在网络操做(主要涉及到序列化操做,本地序列化缓存也适用)中被传输,
这些信息对应的变量就能够加上transient关键字。换句话说,这个字段的生命周期仅存于调用者的内存中而不会写到磁盘里持久化。
总之,java 的transient关键字为咱们提供了便利,你只须要实现Serilizable接口,
将不须要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
10.断言(1个)
assert
11.调用底层代码(C\C++)(1个)
native
十二、不可变的——final(1个)
修饰属性、常量、局部变量、参数——做用:数据是不可改变的
修饰类——做用:修饰的类不能被继承
修饰普通方法——做用:修饰的方法不能被重写
13.静态的——static(1个)
修饰属性、常量
修饰内部类
修饰普通方法
做用:全部使用static关键字修饰的内容会最早执行。static修饰的内容在内存中只有惟一的一份(存储在静态内存空间中)。
14.格式规范——strictfp(1个) 即 strict float point (精确浮点)。
修饰类、接口或方法。
修饰方法时,该方法中全部的float和double表达式都严格遵照FP-strict的限制,符合IEEE-754规范。
修饰类或接口时,该类中的全部代码,包括嵌套类型中的初始设定值和代码,都将严格地进行计算。
严格约束意味着全部表达式的结果都必须是 IEEE 754 算法对操做数预期的结果,以单精度和双精度格式表示。
若是你想让你的浮点运算更加精确,并且不会由于不一样的硬件平台所执行的结果不一致的话,能够用关键字strictfp.
示例 1
下面的示例演示了一个使用 strictfp 修饰符声明的类
!
package com.magical; // Example of precision control with strictfp public strictfp class MyClass { public static void main(String[] args) { float aFloat = 0.6710339f; double aDouble = 0.04150553411984792d; double sum = aFloat + aDouble; float quotient = (float)(aFloat / aDouble); System.out.println("float: " + aFloat); System.out.println("double: " + aDouble); System.out.println("sum: " + sum); System.out.println("quotient: " + quotient); } } package com.magical; // Example of precision control with strictfp public strictfp class MyClass { public static void main(String[] args) { float aFloat = 0.6710339f; double aDouble = 0.04150553411984792d; double sum = aFloat + aDouble; float quotient = (float)(aFloat / aDouble); System.out.println("float: " + aFloat); System.out.println("double: " + aDouble); System.out.println("sum: " + sum); System.out.println("quotient: " + quotient); } } 运行结果: float: 0.6710339 double: 0.04150553411984792 sum: 0.7125394529774224 quotient: 16.167336
2019年6月26日 09:24:34