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