Java簡介歹苦,基礎知識(一)

Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向對象程序設計語言和 Java 平臺的總稱。由 James Gosling和同事們共同研發(fā)督怜,并在 1995 年正式推出殴瘦。

后來 Sun 公司被 Oracle (甲骨文)公司收購,Java 也隨之成為 Oracle 公司的產(chǎn)品号杠。

Java分為三個體系:

  • JavaSE(J2SE)(Java2 Platform Standard Edition蚪腋,java平臺標準版)
  • JavaEE(J2EE)(Java 2 Platform,Enterprise Edition丰歌,java平臺企業(yè)版)
  • JavaME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)屉凯。

2005 年 6 月立帖,JavaOne 大會召開,SUN 公司公開 Java SE 6悠砚。此時晓勇,Java 的各種版本已經(jīng)更名,以取消其中的數(shù)字 "2":J2EE 更名為 Java EE灌旧,J2SE 更名為Java SE绑咱,J2ME 更名為 Java ME。

主要特性

  • Java 語言是簡單的:

    Java 語言的語法與 C 語言和 C++ 語言很接近枢泰,使得大多數(shù)程序員很容易學習和使用描融。另一方面,Java 丟棄了 C++ 中很少使用的宗苍、很難理解的稼稿、令人迷惑的那些特性,如操作符重載讳窟、多繼承让歼、自動的強制類型轉換。特別地丽啡,Java 語言不使用指針谋右,而是引用。并提供了自動分配和回收內(nèi)存空間补箍,使得程序員不必為內(nèi)存管理而擔憂改执。

  • Java 語言是面向對象的:

    Java 語言提供類、接口和繼承等面向對象的特性坑雅,為了簡單起見辈挂,只支持類之間的單繼承,但支持接口之間的多繼承裹粤,并支持類與接口之間的實現(xiàn)機制(關鍵字為 implements)终蒂。Java 語言全面支持動態(tài)綁定,而 C++語言只對虛函數(shù)使用動態(tài)綁定遥诉∧雌總之,Java語言是一個純的面向對象程序設計語言矮锈。

  • Java語言是分布式的:

    Java 語言支持 Internet 應用的開發(fā)霉翔,在基本的 Java 應用編程接口中有一個網(wǎng)絡應用編程接口(java net),它提供了用于網(wǎng)絡應用編程的類庫苞笨,包括 URL债朵、URLConnection子眶、Socket、ServerSocket 等葱弟。Java 的 RMI(遠程方法激活)機制也是開發(fā)分布式應用的重要手段壹店。

  • Java 語言是健壯的:

    Java 的強類型機制、異常處理芝加、垃圾的自動收集等是 Java 程序健壯性的重要保證硅卢。對指針的丟棄是 Java 的明智選擇。Java 的安全檢查機制使得 Java 更具健壯性藏杖。

  • Java語言是安全的:

    Java通常被用在網(wǎng)絡環(huán)境中将塑,為此,Java 提供了一個安全機制以防惡意代碼的攻擊蝌麸。除了Java 語言具有的許多安全特性以外点寥,Java 對通過網(wǎng)絡下載的類具有一個安全防范機制(類 ClassLoader),如分配不同的名字空間以防替代本地的同名類来吩、字節(jié)代碼檢查敢辩,并提供安全管理機制(類 SecurityManager)讓 Java 應用設置安全哨兵。

  • Java 語言是體系結構中立的:

    Java 程序(后綴為 java 的文件)在 Java 平臺上被編譯為體系結構中立的字節(jié)碼格式(后綴為 class 的文件)弟疆,然后可以在實現(xiàn)這個 Java 平臺的任何系統(tǒng)中運行戚长。這種途徑適合于異構的網(wǎng)絡環(huán)境和軟件的分發(fā)。

  • Java 語言是可移植的:

    這種可移植性來源于體系結構中立性怠苔,另外同廉,Java 還嚴格規(guī)定了各個基本數(shù)據(jù)類型的長度。Java 系統(tǒng)本身也具有很強的可移植性柑司,Java 編譯器是用 Java 實現(xiàn)的迫肖,Java 的運行環(huán)境是用 ANSI C 實現(xiàn)的。

  • Java 語言是解釋型的:

    如前所述攒驰,Java 程序在 Java 平臺上被編譯為字節(jié)碼格式蟆湖,然后可以在實現(xiàn)這個 Java 平臺的任何系統(tǒng)中運行。在運行時玻粪,Java 平臺中的 Java 解釋器對這些字節(jié)碼進行解釋執(zhí)行隅津,執(zhí)行過程中需要的類在聯(lián)接階段被載入到運行環(huán)境中。

  • Java 是高性能的:

    與那些解釋型的高級腳本語言相比奶段,Java 的確是高性能的。事實上剥纷,Java 的運行速度隨著 JIT(Just-In-Time)編譯器技術的發(fā)展越來越接近于 C++痹籍。

  • Java 語言是多線程的:

    在 Java 語言中,線程是一種特殊的對象晦鞋,它必須由 Thread 類或其子(孫)類來創(chuàng)建蹲缠。通常有兩種方法來創(chuàng)建線程:其一棺克,使用型構為 Thread(Runnable) 的構造子類將一個實現(xiàn)了 Runnable 接口的對象包裝成一個線程,其二线定,從 Thread 類派生出子類并重寫 run 方法娜谊,使用該子類創(chuàng)建的對象即為線程。值得注意的是 Thread 類已經(jīng)實現(xiàn)了 Runnable 接口斤讥,因此纱皆,任何一個線程均有它的 run 方法,而 run 方法中包含了線程所要運行的代碼芭商。線程的活動由一組方法來控制派草。Java 語言支持多個線程的同時執(zhí)行,并提供多線程之間的同步機制(關鍵字為 synchronized)铛楣。

  • Java 語言是動態(tài)的:

    Java 語言的設計目標之一是適應于動態(tài)變化的環(huán)境近迁。Java 程序需要的類能夠動態(tài)地被載入到運行環(huán)境,也可以通過網(wǎng)絡來載入所需要的類簸州。這也有利于軟件的升級鉴竭。另外,Java 中的類有一個運行時刻的表示岸浑,能進行運行時刻的類型檢查搏存。

Java 關鍵字

image.png

image.png

Java是解釋執(zhí)行還是編譯執(zhí)行的?(配合JVM理解)

這個問題并沒有統(tǒng)一的答案助琐,JVM規(guī)范并沒有強制要求JVM實現(xiàn)應該使用哪種方式來執(zhí)行程序祭埂,只能說不同的JVM實現(xiàn)的方式不一樣。有純解釋執(zhí)行的兵钮、純編譯執(zhí)行的(JRockit)蛆橡、還有解釋+編譯兩者混用的(HotSpot)。

目前主流的商用JVM(如HotSpot)內(nèi)部都同時包含解釋器+編譯器掘譬。

解釋器與編譯器兩者各有優(yōu)勢:

  1. 當程序需要迅速啟動時泰演,解釋器可以發(fā)揮優(yōu)勢,省去編譯的時間葱轩,立即執(zhí)行睦焕。
  2. 程序啟動后,隨著時間的推移靴拱,編譯器開始發(fā)揮作用垃喊,JVM會將越來越多的熱點代碼編譯成本地代碼,減少解釋器的中間損耗袜炕,獲得更高的執(zhí)行效率本谜。

使用參數(shù)-Xint可以要求JVM只使用解釋器,這時編譯器完全不介入工作偎窘,所有代碼均通過解釋執(zhí)行乌助。
參數(shù)-Xcomp要求JVM優(yōu)先編譯執(zhí)行溜在,但是解釋器仍然要在編譯器無法進行的情況下介入工作。

何時編譯他托?

能觸發(fā)JIT編譯的熱點代碼有兩類:

  1. 多次調用的方法
  2. 多次調用的循環(huán)體

不管是方法被多次調用掖肋,還是某一段循環(huán)體代碼被多次調用,JIT編譯的最小單位都是整個方法體赏参。
如果一個方法被JIT編譯后志笼,下次JVM再執(zhí)行這個方法時,就會直接編譯執(zhí)行登刺。
而對于一個循環(huán)體而言籽腕,由于方法已經(jīng)打包成棧幀入棧執(zhí)行了,JVM必須在方法運行時進行替換纸俭,因此也被稱為“棧上替換”皇耗。

方法被多次執(zhí)行,這個【多次】指的到底是多少次呢揍很?JVM如何判斷代碼是否屬于熱點代碼呢郎楼?這就需要熱點探測技術的支持了。

目前主流的熱點探測技術有兩種:

  • 基于采樣的熱點探測

JVM周期性的檢查線程方法棧頂窒悔,進行數(shù)據(jù)采樣呜袁,如果發(fā)現(xiàn)某些方法經(jīng)常出現(xiàn)在棧頂,就認為它是熱點代碼简珠。
這種方式實現(xiàn)簡單高效阶界,但是統(tǒng)計結果會有誤差,因為方法經(jīng)常出現(xiàn)在棧頂不一定是執(zhí)行次數(shù)多聋庵,也可能是方法阻塞了膘融。

  • 基于計數(shù)器的熱點探測

JVM為每個方法(甚至是代碼塊)維護一個計數(shù)器,每調用一次計數(shù)器就加1祭玉,計數(shù)器超過閾值后就會被認為是熱點代碼氧映。
這種方式實現(xiàn)復雜,需要為每個方法都維護一個計數(shù)器脱货,但是統(tǒng)計結果準確岛都。

方法調用計數(shù)器和回邊計數(shù)器
  • 方法調用計數(shù)器

統(tǒng)計方法被調用的次數(shù),Client模式下閾值為1500次振峻,Server模式下閾值為10000次臼疫,閾值可以通過JVM參數(shù)-XX:CompileThreshold設置,默認情況下扣孟,方法調用次數(shù)統(tǒng)計的并不是絕對次數(shù)烫堤,而是一段時間內(nèi)的調用頻率,在一個時間段內(nèi)如果調用次數(shù)不足以觸發(fā)編譯,次數(shù)就會減半進入半衰期塔逃,可以使用參數(shù)-XX:-UseCounterDecay來關閉熱度衰減,關閉后統(tǒng)計的就是絕對次數(shù)了料仗,時間長了幾乎所有的代碼都會被編譯執(zhí)行湾盗。

  • 回邊計數(shù)器

統(tǒng)計方法中循環(huán)體代碼的執(zhí)行次數(shù),在字節(jié)碼中遇到控制流程向后跳轉的指令就稱為“回邊”立轧,例如For格粪、While循環(huán)。遇到一次回邊指令氛改,回邊計數(shù)器就會加1帐萎,當計數(shù)器超過閾值后就會觸發(fā)熱點代碼編譯,回邊計數(shù)器沒有半衰期胜卤,統(tǒng)計的是絕對次數(shù)疆导。

觸發(fā)熱點代碼編譯后,程序會繼續(xù)解釋執(zhí)行葛躏,只有當編譯工作完成以后澈段,系統(tǒng)會將方法的調用入口地址寫入新值,下一次再調用該方法舰攒,才會使用已編譯的版本败富。

Java 的兩大數(shù)據(jù)類型:

  • 內(nèi)置數(shù)據(jù)類型
  • 引用數(shù)據(jù)類型

內(nèi)置數(shù)據(jù)類型

Java語言提供了八種基本類型。六種數(shù)字類型(四個整數(shù)型摩窃,兩個浮點型)兽叮,一種字符類型,一種布爾型猾愿。

byte:

  • byte 數(shù)據(jù)類型是8位鹦聪、有符號的,以二進制補碼表示的整數(shù)匪蟀;
  • 最小值是 -128(-2^7)椎麦;
  • 最大值是 127(2^7-1)
  • 默認值是 0材彪;
  • byte 類型用在大型數(shù)組中節(jié)約空間观挎,主要代替整數(shù),因為 byte 變量占用的空間只有 int 類型的四分之一段化;
  • 例子:byte a = 100嘁捷,byte b = -50。

short:

  • short 數(shù)據(jù)類型是 16 位显熏、有符號的以二進制補碼表示的整數(shù)
  • 最小值是 -32768(-2^15)雄嚣;
  • 最大值是 32767(2^15 - 1)
  • Short 數(shù)據(jù)類型也可以像 byte 那樣節(jié)省空間。一個short變量是int型變量所占空間的二分之一缓升;
  • 默認值是 0鼓鲁;
  • 例子:short s = 1000,short r = -20000港谊。

int:

  • int 數(shù)據(jù)類型是32位骇吭、有符號的以二進制補碼表示的整數(shù);
  • 最小值是 -2,147,483,648(-2^31)歧寺;
  • 最大值是 2,147,483,647(2^31 - 1)燥狰;
  • 一般地整型變量默認為 int 類型;
  • 默認值是 0 斜筐;
  • 例子:int a = 100000, int b = -200000龙致。

long:

  • long 數(shù)據(jù)類型是 64 位、有符號的以二進制補碼表示的整數(shù)顷链;
  • 最小值是 -9,223,372,036,854,775,808(-2^63)目代;
  • 最大值是 9,223,372,036,854,775,807(2^63 -1)
  • 這種類型主要使用在需要比較大整數(shù)的系統(tǒng)上嗤练;
  • 默認值是 0L像啼;
  • 例子: long a = 100000L猖闪,Long b = -200000L肠缔。
    "L"理論上不分大小寫鳍征,但是若寫成"l"容易與數(shù)字"1"混淆也祠,不容易分辯萍恕。所以最好大寫末誓。

float:

  • float 數(shù)據(jù)類型是單精度丸逸、32位锦援、符合IEEE 754標準的浮點數(shù)蝗碎;
  • float 在儲存大型浮點數(shù)組的時候可節(jié)省內(nèi)存空間湖笨;
  • 默認值是 0.0f
  • 浮點數(shù)不能用來表示精確的值蹦骑,如貨幣慈省;
  • 例子:float f1 = 234.5f。

double:

  • double 數(shù)據(jù)類型是雙精度眠菇、64 位边败、符合IEEE 754標準的浮點數(shù);
  • 浮點數(shù)的默認類型為double類型捎废;
  • double類型同樣不能表示精確的值笑窜,如貨幣;
  • 默認值是 0.0d登疗;
  • 例子:double d1 = 123.4排截。

boolean:

  • boolean數(shù)據(jù)類型表示一位的信息嫌蚤;
  • 只有兩個取值:true 和 false;
  • 這種類型只作為一種標志來記錄 true/false 情況断傲;
  • 默認值是 false脱吱;
  • 例子:boolean one = true。

char:

  • char類型是一個單一的 16 位 Unicode 字符认罩;
  • 最小值是 \u0000(即為0)急凰;
  • 最大值是 \uffff(即為65,535);
  • char 數(shù)據(jù)類型可以儲存任何字符猜年;
  • 例子:char letter = 'A';。
image.png

引用類型

  • 在Java中疾忍,引用類型的變量非常類似于C/C++的指針乔外。引用類型指向一個對象,指向對象的變量是引用變量一罩。這些變量在聲明時被指定為一個特定的類型杨幼,比如 Employee、Puppy 等聂渊。變量一旦聲明后差购,類型就不能被改變了。
  • 對象汉嗽、數(shù)組都是引用數(shù)據(jù)類型欲逃。
  • 所有引用類型的默認值都是null。
  • 一個引用變量可以用來引用任何與之兼容的類型饼暑。
  • 例子:Site site = new Site("Runoob")稳析。

Java 變量類型

Java語言支持的變量類型有:

  • 類變量:獨立于方法之外的變量,用 static 修飾弓叛。
  • 實例變量:獨立于方法之外的變量彰居,不過沒有 static 修飾。
  • 局部變量:類的方法中的變量撰筷。
類變量(靜態(tài)變量)
  • 類變量也稱為靜態(tài)變量陈惰,在類中以 static 關鍵字聲明,但必須在方法之外毕籽。
  • 無論一個類創(chuàng)建了多少個對象抬闯,類只擁有類變量的一份拷貝。
  • 靜態(tài)變量除了被聲明為常量外很少使用关筒,靜態(tài)變量是指聲明為 public/private画髓,final 和 static 類型的變量。靜態(tài)變量初始化后不可改變平委。
  • 靜態(tài)變量儲存在靜態(tài)存儲區(qū)奈虾。經(jīng)常被聲明為常量,很少單獨使用 static 聲明變量。
  • 靜態(tài)變量在第一次被訪問時創(chuàng)建肉微,在程序結束時銷毀匾鸥。
  • 與實例變量具有相似的可見性。但為了對類的使用者可見碉纳,大多數(shù)靜態(tài)變量聲明為 public 類型勿负。
  • 默認值和實例變量相似。數(shù)值型變量默認值是 0劳曹,布爾型默認值是 false奴愉,引用類型默認值是 null。變量的值可以在聲明的時候指定铁孵,也可以在構造方法中指定锭硼。此外,靜態(tài)變量還可以在靜態(tài)語句塊中初始化蜕劝。
  • 靜態(tài)變量可以通過:ClassName.VariableName的方式訪問檀头。
  • 類變量被聲明為 public static final 類型時,類變量名稱一般建議使用大寫字母岖沛。如果靜態(tài)變量不是 public 和 final 類型暑始,其命名方式與實例變量以及局部變量的命名方式一致。
實例變量
  • 實例變量聲明在一個類中婴削,但在方法廊镜、構造方法和語句塊之外;
  • 當一個對象被實例化之后唉俗,每個實例變量的值就跟著確定期升;
  • 實例變量在對象創(chuàng)建的時候創(chuàng)建,在對象被銷毀的時候銷毀互躬;
  • 實例變量的值應該至少被一個方法播赁、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息吼渡;
  • 實例變量可以聲明在使用前或者使用后容为;
  • 訪問修飾符可以修飾實例變量;
  • 實例變量對于類中的方法寺酪、構造方法或者語句塊是可見的坎背。一般情況下應該把實例變量設為私有。通過使用訪問修飾符可以使實例變量對子類可見寄雀;
  • 實例變量具有默認值得滤。數(shù)值型變量的默認值是0,布爾型變量的默認值是false盒犹,引用類型變量的默認值是null懂更。變量的值可以在聲明時指定眨业,也可以在構造方法中指定;
  • 實例變量可以直接通過變量名訪問沮协。但在靜態(tài)方法以及其他類中龄捡,就應該使用完全限定名:ObejectReference.VariableName。
Java 局部變量(棧幀慷暂,配合JVM)
  • 局部變量聲明在方法聘殖、構造方法或者語句塊中;
  • 局部變量在方法行瑞、構造方法奸腺、或者語句塊被執(zhí)行的時候創(chuàng)建,當它們執(zhí)行完成后血久,變量將會被銷毀突照;
  • 訪問修飾符不能用于局部變量;
  • 局部變量只在聲明它的方法洋魂、構造方法或者語句塊中可見;
  • 局部變量是在棧上分配的喜鼓。
  • 局部變量沒有默認值副砍,所以局部變量被聲明后,必須經(jīng)過初始化庄岖,才可以使用豁翎。

Java 修飾符

訪問控制修飾符

Java中,可以使用訪問控制符來保護對類隅忿、變量心剥、方法和構造方法的訪問。Java 支持 4 種不同的訪問權限背桐。

  • default (即默認优烧,什么也不寫): 在同一包內(nèi)可見,不使用任何修飾符链峭。使用對象:類畦娄、接口、變量弊仪、方法熙卡。

  • private : 在同一類內(nèi)可見。使用對象:變量励饵、方法驳癌。 注意:不能修飾類(外部類)

  • public : 對所有類可見。使用對象:類役听、接口颓鲜、變量表窘、方法

  • protected : 對同一包內(nèi)的類和所有子類可見。使用對象:變量灾杰、方法蚊丐。 注意:不能修飾類(外部類)

修飾符 當前類 同一包內(nèi) 子孫類(同一包) 子孫類(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y/N(說明 N
default Y Y Y N N
private Y N N N N
非訪問修飾符

為了實現(xiàn)一些其他的功能艳吠,Java 也提供了許多非訪問修飾符麦备。

  • static 修飾符,用來修飾類方法和類變量昭娩。

    • static 關鍵字用來聲明獨立于對象的靜態(tài)變量凛篙,無論一個類實例化多少對象,它的靜態(tài)變量只有一份拷貝栏渺。 靜態(tài)變量也被稱為類變量呛梆。局部變量不能被聲明為 static 變量。

    • static 關鍵字用來聲明獨立于對象的靜態(tài)方法磕诊。靜態(tài)方法不能使用類的非靜態(tài)變量填物。靜態(tài)方法從參數(shù)列表得到數(shù)據(jù),然后計算這些數(shù)據(jù)霎终。

  • final 修飾符滞磺,用來修飾類、方法和變量莱褒,final 修飾的類不能夠被繼承击困,修飾的方法不能被繼承類重新定義,修飾的變量為常量广凸,是不可修改的阅茶。

    • final 修飾符通常和 static 修飾符一起使用來創(chuàng)建類常量。

    • 父類中的 final 方法可以被子類繼承谅海,但是不能被子類重寫脸哀。聲明 final 方法的主要目的是防止該方法的內(nèi)容被修改。

    • final 類不能被繼承扭吁,沒有類能夠繼承 final 類的任何特性企蹭。

  • abstract 修飾符,用來創(chuàng)建抽象類和抽象方法智末。

    • 抽象類不能用來實例化對象谅摄,聲明抽象類的唯一目的是為了將來對該類進行擴充。一個類不能同時被 abstract 和 final 修飾系馆。如果一個類包含抽象方法送漠,那么該類一定要聲明為抽象類,否則將出現(xiàn)編譯錯誤由蘑。抽象類可以包含抽象方法和非抽象方法闽寡。

    • 抽象方法是一種沒有任何實現(xiàn)的方法代兵,該方法的的具體實現(xiàn)由子類提供。抽象方法不能被聲明成 final 和 static爷狈。任何繼承抽象類的子類必須實現(xiàn)父類的所有抽象方法植影,除非該子類也是抽象類。如果一個類包含若干個抽象方法涎永,那么該類必須聲明為抽象類思币。抽象類可以不包含抽象方法。

  • synchronizedvolatile 修飾符羡微,主要用于線程的編程谷饿。

  • transient 修飾符,序列化的對象包含被 transient 修飾的實例變量時妈倔,java 虛擬機(JVM)跳過該特定的變量博投。

Java 運算符

  • 算術運算符
操作符 描述 例子
+ 加法 - 相加運算符兩側的值 A + B 等于 30
- 減法 - 左操作數(shù)減去右操作數(shù) A – B 等于 -10
* 乘法 - 相乘操作符兩側的值 A * B等于200
/ 除法 - 左操作數(shù)除以右操作數(shù) B / A等于2
取余 - 左操作數(shù)除以右操作數(shù)的余數(shù) B%A等于0
++ 自增: 操作數(shù)的值增加1 B++ 或 ++B 等于 21(
-- 自減: 操作數(shù)的值減少1 B-- 或 --B 等于 19

自增(++)自減(--)運算符是一種特殊的算術運算符,在算術運算符中需要兩個操作數(shù)來進行運算盯蝴,而自增自減運算符是一個操作數(shù)毅哗。

  • 關系運算符
運算符 描述 例子
== 檢查如果兩個操作數(shù)的值是否相等,如果相等則條件為真捧挺。 (A == B)為假虑绵。
!= 檢查如果兩個操作數(shù)的值是否相等,如果值不相等則條件為真松忍。 (A != B) 為真蒸殿。
> 檢查左操作數(shù)的值是否大于右操作數(shù)的值筷厘,如果是那么條件為真鸣峭。 (A> B)為假。
< 檢查左操作數(shù)的值是否小于右操作數(shù)的值酥艳,如果是那么條件為真摊溶。 (A <B)為真。
>= 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值充石,如果是那么條件為真莫换。 (A> = B)為假。
<= 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值骤铃,如果是那么條件為真拉岁。 (A <= B)為真。
  • 位運算符
操作符 描述 例子
如果相對應位都是1惰爬,則結果為1喊暖,否則為0 (A&B),得到12撕瞧,即0000 1100
| 如果相對應位都是 0陵叽,則結果為 0狞尔,否則為 1 (A | B)得到61,即 0011 1101
^ 如果相對應位值相同巩掺,則結果為0偏序,否則為1 (A ^ B)得到49,即 0011 0001
? 按位取反運算符翻轉操作數(shù)的每一位胖替,即0變成1研儒,1變成0。 (?A)得到-61刊殉,即1100 0011
<< 按位左移運算符殉摔。左操作數(shù)按位左移右操作數(shù)指定的位數(shù)。 A << 2得到240记焊,即 1111 0000
>> 按位右移運算符逸月。左操作數(shù)按位右移右操作數(shù)指定的位數(shù)。 A >> 2得到15即 1111
>>> 按位右移補零操作符遍膜。左操作數(shù)的值按右操作數(shù)指定的位數(shù)右移碗硬,移動得到的空位以零填充。 A>>>2得到15即0000 1111
  • 邏輯運算符
操作符 描述 例子
&& 稱為邏輯與運算符瓢颅。當且僅當兩個操作數(shù)都為真恩尾,條件才為真。 (A && B)為假挽懦。
| | 稱為邏輯或操作符翰意。如果任何兩個操作數(shù)任何一個為真,條件為真信柿。 (A | | B)為真冀偶。
稱為邏輯非運算符渔嚷。用來反轉操作數(shù)的邏輯狀態(tài)进鸠。如果條件為true,則邏輯非運算符將得到false形病。 ?湍辍(A && B)為真。

當使用與邏輯運算符時漠吻,在兩個操作數(shù)都為true時量瓜,結果才為true,但是當?shù)玫降谝粋€操作為false時途乃,其結果就必定是false绍傲,這時候就不會再判斷第二個操作了。

  • 賦值運算符
操作符 描述 例子
= 簡單的賦值運算符欺劳,將右操作數(shù)的值賦給左側操作數(shù) C = A + B將把A + B得到的值賦給C
+ = 加和賦值操作符唧取,它把左操作數(shù)和右操作數(shù)相加賦值給左操作數(shù) C + = A等價于C = C + A
- = 減和賦值操作符铅鲤,它把左操作數(shù)和右操作數(shù)相減賦值給左操作數(shù) C - = A等價于C = C - A
* = 乘和賦值操作符,它把左操作數(shù)和右操作數(shù)相乘賦值給左操作數(shù) C * = A等價于C = C * A
/ = 除和賦值操作符枫弟,它把左操作數(shù)和右操作數(shù)相除賦值給左操作數(shù) C / = A邢享,C 與 A 同類型時等價于 C = C / A
(%)= 取模和賦值操作符,它把左操作數(shù)和右操作數(shù)取模后賦值給左操作數(shù) C%= A等價于C = C%A
<< = 左移位賦值運算符 C << = 2等價于C = C << 2
>> = 右移位賦值運算符 C >> = 2等價于C = C >> 2
&= 按位與賦值運算符 C&= 2等價于C = C&2
^ = 按位異或賦值操作符 C ^ = 2等價于C = C ^ 2
| = 按位或賦值操作符 C | = 2等價于C = C | 2
  • 條件運算符(?:)

    • 條件運算符也被稱為三元運算符淡诗。該運算符有3個操作數(shù)骇塘,并且需要判斷布爾表達式的值。該運算符的主要是決定哪個值應該賦值給變量韩容。

    • b = (a == 1) ? 20 : 30;

    • variable x = (expression) ? value if true : value if false
      
  • instanceof 運算符

    • 該運算符用于操作對象實例款违,檢查該對象是否是一個特定類型(類類型或接口類型)。
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末群凶,一起剝皮案震驚了整個濱河市插爹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌请梢,老刑警劉巖赠尾,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異毅弧,居然都是意外死亡气嫁,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門够坐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸宵,“玉大人,你說我怎么就攤上這事元咙√萦埃” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵蛾坯,是天一觀的道長光酣。 經(jīng)常有香客問我疏遏,道長脉课,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任财异,我火速辦了婚禮倘零,結果婚禮上,老公的妹妹穿的比我還像新娘戳寸。我一直安慰自己呈驶,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布疫鹊。 她就那樣靜靜地躺著袖瞻,像睡著了一般司致。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上聋迎,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天脂矫,我揣著相機與錄音,去河邊找鬼霉晕。 笑死庭再,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的牺堰。 我是一名探鬼主播拄轻,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼伟葫!你這毒婦竟也來了恨搓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤筏养,失蹤者是張志新(化名)和其女友劉穎奶卓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撼玄,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡夺姑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了掌猛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盏浙。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荔茬,靈堂內(nèi)的尸體忽然破棺而出废膘,到底是詐尸還是另有隱情,我是刑警寧澤慕蔚,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布丐黄,位于F島的核電站,受9級特大地震影響孔飒,放射性物質發(fā)生泄漏灌闺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一坏瞄、第九天 我趴在偏房一處隱蔽的房頂上張望桂对。 院中可真熱鬧,春花似錦鸠匀、人聲如沸蕉斜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宅此。三九已至机错,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間父腕,已是汗流浹背毡熏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侣诵,地道東北人痢法。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像杜顺,于是被迫代替她去往敵國和親财搁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容