Java編程思想(第四版)學(xué)習(xí)筆記(3)

第三章 操作符

1.靜態(tài)導(dǎo)入(static import)

格式如下:
import static com.....ClassName.* ;

此處多了個(gè)static關(guān)鍵字,并且在類名ClassName后面多了個(gè) .* 咖刃,意思是導(dǎo)入這個(gè)類里的所有靜態(tài)方法和靜態(tài)字段(屬性)翠勉。當(dāng)然,也可以只導(dǎo)入某個(gè)靜態(tài)方法夜牡,只要把 .* 換成靜態(tài)方法名就行了。然后在這個(gè)類中,就可以直接用方法名調(diào)用靜態(tài)方法勤庐,而不必用ClassName.方法名的方式來調(diào)用。這種方法的好處就是可以簡化一些操作好港,例如打印操作System.out.println(...);就可以將其寫入一個(gè)靜態(tài)方法print(...)愉镰,在使用時(shí)直接print(...)就可以了。 但是這種方法建議在有很多重復(fù)調(diào)用的時(shí)候使用钧汹,如果僅有一到兩次調(diào)用丈探,不如直接寫來的方便。

示例如下:

//: net/mindview/util/Print.java
// Print methods that can be used without
// qualifiers, using Java SE5 static imports:
package edu.ustc.home.util;
import java.io.*;

public class Print {
  // Print with a newline:
  public static void print(Object obj) {
    System.out.println(obj);
  }
  // Print a newline by itself:
  public static void print() {
    System.out.println();
  }
  // Print with no line break:
  public static void printnb(Object obj) {
    System.out.print(obj);
  }
  // The new Java SE5 printf() (from C):
  public static PrintStream
  printf(String format, Object... args) {
    return System.out.printf(format, args);
  }
} ///:~

使用上述代碼:

import static net.mindview.util.Print.*;

public class A {
  public static void main(String[] args) {
    print("Hello,static import!");
  }
}
2.Random 類的使用:
  1. 要生成隨機(jī)數(shù)拔莱,可以先創(chuàng)建一個(gè)Random類的對(duì)象碗降,若在創(chuàng)建的過程中沒有傳遞任何參數(shù),那么Java就會(huì)將當(dāng)前時(shí)間作為隨機(jī)數(shù)生成器的種子塘秦,并由此在程序每次執(zhí)行時(shí)都會(huì)產(chǎn)生不同的隨機(jī)數(shù)讼渊;
  1. 若想讓程序每次執(zhí)行時(shí)都產(chǎn)生相同的隨機(jī)數(shù)(以使得輸出可驗(yàn)證),可通過在創(chuàng)建Random對(duì)象時(shí)提供種子(用于數(shù)生成器的初始化值尊剔,隨機(jī)數(shù)生成器對(duì)于特定的種子值總是產(chǎn)生相同的隨機(jī)數(shù)序列)爪幻。
    示例:
Random rand = new Random(47);//每次運(yùn)行結(jié)果相同
Random randDif = new Random();//每次運(yùn)行結(jié)果不同
int i;
// Choose value from 1 to 100:
//rand.nextInt(100)設(shè)置了所產(chǎn)隨機(jī)數(shù)的上限為100,而其下限為0须误,為避免除零挨稿,應(yīng)該進(jìn)行加1操作。
i = rand.nextInt(100) + 1;
float u; // Applies to doubles, too
//chosen (approximately) uniformly from the range 0.0f (inclusive) to 1.0f (exclusive)
u = rand.nextFloat();
long l;
l = rand.nextLong();
double d;
//chosen (approximately) uniformly from the range 0.0d (inclusive) to 1.0d (exclusive)
d = rand.nextDouble();
3.一元減號(hào)用于轉(zhuǎn)變數(shù)據(jù)的符號(hào)京痢,而一元加號(hào)只是為了與一元減號(hào)相對(duì)應(yīng)奶甘,但是它唯一的作用僅僅是將較小數(shù)據(jù)類型的操作數(shù)提升為int。
4.++和--說明

對(duì)于前綴形式(++i和--i)历造,在執(zhí)行完運(yùn)算后才得到值甩十;對(duì)于后綴形式(i++和i--)船庇,則是在執(zhí)行運(yùn)算之前就得到值。

5.關(guān)系操作符

關(guān)系操作符中侣监,等于和不等于適用于所有基本數(shù)據(jù)類型鸭轮,而其他比較符不適用于boolean類型,因?yàn)閎oolean值只能為true或false橄霉,“大于”和“小于”沒有實(shí)際意義窃爷。

和!=也適用于所有對(duì)象,但是它們比較的是對(duì)象的引用。要比較兩個(gè)對(duì)象的實(shí)際內(nèi)容姓蜂,應(yīng)該使用所有對(duì)象都適用的特殊方法equals()按厘。但是該方法不適用于基本類型,基本類型直接使用和!=即可钱慢。

注意實(shí)現(xiàn)自己的類時(shí)逮京,若想使得該類的兩個(gè)對(duì)象的內(nèi)容可以作比較運(yùn)算,應(yīng)該覆蓋自己設(shè)計(jì)類中的equals()方法束莫,因?yàn)閑quals()的默認(rèn)行為是比較對(duì)象的引用懒棉。

6.邏輯操作符

"&&"、“||”览绿、“!”操作只可應(yīng)用于布爾值策严,與C和C++不同的是:不可以將一個(gè)非布爾值當(dāng)做布爾值在邏輯表達(dá)式中使用。

7.關(guān)于二進(jìn)制

在C饿敲、C++或Java中妻导,二進(jìn)制數(shù)沒有直接常量表示方法。但是怀各,通過Integer和Long的靜態(tài)方法toBinaryString()可以很容易地實(shí)現(xiàn)二進(jìn)制形式輸出倔韭。

8.指數(shù)計(jì)數(shù)法

“e”代表10的冪次,如1.39e-43f表示1.39x10-43瓢对,編譯器將指數(shù)字面量當(dāng)成double處理狐肢,所以在指數(shù)常量后最好加上后綴"d"和"f"。

9.按位操作符(只可用來操作整數(shù)基本數(shù)據(jù)類型中的單個(gè)“比特位”)

&沥曹、|、^碟联、~分別為按位“與”妓美、按位“或”、按位“異或”和按位“非”鲤孵,“~”是一元操作符壶栋,所以不可與“=”聯(lián)合使用,其他三個(gè)可以普监。

我們可將布爾類型作為一種單比特值對(duì)待贵试,并且可對(duì)布爾類型執(zhí)行按位“與”琉兜、按位“或”和按位“異或”運(yùn)算,但不能執(zhí)行按位“非”毙玻。對(duì)于布爾值豌蟋,按位操作符具有與邏輯操作符相同的效果,只是它們不會(huì)中途“短路”桑滩。此外梧疲,針對(duì)布爾值進(jìn)行的按位運(yùn)算為我們新增了一個(gè)“異或”邏輯操作符,它并未包括在“邏輯”操作符的列表中运准。

10.移位操作符(只可用來處理整數(shù)基本數(shù)據(jù)類型中的二進(jìn)制“位”)
  1. <<幌氮,左移位操作符,低位補(bǔ)零胁澳;
  2. >>该互,右移位操作符,“有符號(hào)”右移位操作符使用“符號(hào)擴(kuò)展”:若符號(hào)為正韭畸,則高位補(bǔ)零宇智;若符號(hào)為負(fù),則高位補(bǔ)1陆盘;
  3. >>>普筹,“無符號(hào)”右移位操作符,使用“零擴(kuò)展”:無論正負(fù)隘马,都在高位補(bǔ)零太防。這一操作符是C或C++中所沒有的。
11.三元操作符if-else
boolean-exp ? value0 : value1
12.字符串操作符+和+=(字符串連接符)
package io.github.wzzju; /* Added by Eclipse.py */
import static io.github.wzzju.util.Print.*;
public class StringOperators {
  public static void main(String[] args) {
    int x = 0, y = 1, z = 2;
    String s = "x, y, z ";
    print(s + x + y + z);//輸出結(jié)果是x, y, z 012
    print(x + y + z + s);//輸出結(jié)果是3x, y, z 
    print(x + " " + s); // Converts x to a String
    s += "(summed) = "; // Concatenation operator
    print(s + (x + y + z));
    print("" + x); // Shorthand for Integer.toString()
  }
}
13.使用操作符常犯的錯(cuò)誤
while(x = y){
//...
}

上述代碼中只要x,y不都為布爾值酸员,在Java中就不會(huì)編譯通過蜒车,因?yàn)镴ava不會(huì)自動(dòng)將int數(shù)值轉(zhuǎn)換為布爾值。Java編譯器不會(huì)允許我們隨便把一種類型當(dāng)做另外一種類型來用幔嗦。

14.關(guān)于類型轉(zhuǎn)換
  • 窄化轉(zhuǎn)換(narrowing conversion)酿愧,必須顯示進(jìn)行類型轉(zhuǎn)換。
  • 擴(kuò)展轉(zhuǎn)換(widening conversion)邀泉,不必顯示進(jìn)行類型轉(zhuǎn)換嬉挡。

注意:Java允許我們把任何基本數(shù)據(jù)類型轉(zhuǎn)換為別的基本數(shù)據(jù)類型,但布爾型除外汇恤,因?yàn)椴紶栃透静辉试S進(jìn)行任何類型的轉(zhuǎn)換處理庞钢。
將float或double轉(zhuǎn)型為整型值時(shí),總是對(duì)該數(shù)字執(zhí)行結(jié)尾因谎。如果想要得到四舍五入的結(jié)果基括,就需要使用java.lang.Math中的round()方法,由于round()是java.lang的一部分财岔,因此使用它時(shí)不需要額外導(dǎo)入风皿。
對(duì)基本數(shù)據(jù)類型執(zhí)行算術(shù)運(yùn)算或按位運(yùn)算河爹,只要類型比int小(即char桐款、byte或者short)咸这,在運(yùn)算之前這些值會(huì)自動(dòng)轉(zhuǎn)換成int。

15.Java沒有sizeof

sizeof在c/c++中存在主要是為了解決移植問題的鲁僚,但是在Java中所有數(shù)據(jù)類型在所有機(jī)器中的大小都是相同的炊苫,所有不需要sizeof()操作符來解決移植問題。

16.關(guān)于布爾型值

能夠?qū)Σ紶栃椭颠M(jìn)行的運(yùn)算非常有限冰沙。我們只能賦予true和false值侨艾,并測(cè)試它的真假,而不膩對(duì)布爾值進(jìn)行其他任何運(yùn)算(如加拓挥、減等)唠梨。

17.關(guān)于溢出

兩個(gè)較大的int值相乘可能會(huì)溢出,但是編譯器不會(huì)給出任何出錯(cuò)或警告的信息侥啤。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末当叭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盖灸,更是在濱河造成了極大的恐慌蚁鳖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赁炎,死亡現(xiàn)場(chǎng)離奇詭異醉箕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)徙垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門讥裤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姻报,你說我怎么就攤上這事己英。” “怎么了吴旋?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵损肛,是天一觀的道長。 經(jīng)常有香客問我荣瑟,道長荧关,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任褂傀,我火速辦了婚禮,結(jié)果婚禮上加勤,老公的妹妹穿的比我還像新娘仙辟。我一直安慰自己同波,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布叠国。 她就那樣靜靜地躺著未檩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪粟焊。 梳的紋絲不亂的頭發(fā)上冤狡,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音项棠,去河邊找鬼悲雳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛香追,可吹牛的內(nèi)容都是我干的合瓢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼透典,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晴楔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峭咒,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤税弃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后凑队,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體则果,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年顽决,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了短条。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡才菠,死狀恐怖茸时,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情赋访,我是刑警寧澤可都,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站蚓耽,受9級(jí)特大地震影響渠牲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜步悠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一签杈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦答姥、人聲如沸铣除。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尚粘。三九已至,卻和暖如春敲长,著一層夾襖步出監(jiān)牢的瞬間郎嫁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國打工祈噪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泽铛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓钳降,卻偏偏與公主長得像厚宰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遂填,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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