Java知識(shí)點(diǎn)復(fù)習(xí)

學(xué)習(xí)Java的一些筆記

注意事項(xiàng)

  1. Java對(duì)大小寫很敏感
  2. 類名必須以字母開頭旅急,后面可以跟字母和數(shù)字,也可以用 _和$ 兩種符號(hào)碍讨。不能使用Java保留字媳荒。(標(biāo)準(zhǔn)類名:以大寫字母開頭歧譬,如果類名由多個(gè)單詞組成宜猜,每個(gè)單詞首字母應(yīng)該要大寫
  3. 源代碼文件名必須與公共類的名字相同
  4. 為了代碼能夠你執(zhí)行涂圆,必須包含一個(gè)main方法

Java中的三種注釋

  1. 單行注釋( // )
  2. 多行注釋( /* */)
  3. 多行注釋 可以自動(dòng)生成文檔( /** */)

數(shù)據(jù)類型

類型 儲(chǔ)存需求 取值范圍
boolean 1字節(jié) (8 bit) true, false
char 2字節(jié)(16 bit) 0 ~ 216-1
byte 整型 1字節(jié) (8 bit) -128 ~ 127
short 整型 2字節(jié) (16 bit) -32 768 ~ 32 767
(-215 ~ 215-1)
int 整型 4字節(jié) (32 bit) -2 147 483 648 ~ 2 147 483 647
(-231 ~ 231-1)
long 整型 8字節(jié) (64 bit) -9 223 372 036 854 776 808 ~ 9 223 372 036 854 775 807
(-263 ~ 263-1)
float 浮點(diǎn)類型 4字節(jié) (32 bit) 大約±3.402 823 47E + 38F(有效位數(shù)為6~7位)
double 浮點(diǎn)類型 8字節(jié) (64 bit) 大約±1.797 693 134 862 315 70E + 308(有效位數(shù)為15位)
  1. 長整數(shù)型有一個(gè)后綴L (如4000000000L)
  2. 十六進(jìn)制數(shù)值有一個(gè)后綴0x (如0xCAFE)
  3. 八進(jìn)制有一個(gè)前綴 0 (如010)
  4. 二進(jìn)制有一個(gè)前綴 0b (如0b1001)
  5. Float類型的數(shù)值有一個(gè)后綴F (如 3.14F)

final 關(guān)鍵字

final關(guān)鍵字表示變量只能被賦值一次们镜,一旦被賦值后,就不能被更改润歉。
例如:

Final double CMCC = 2.54

如果希望某個(gè)常量可以在一個(gè)類中的多個(gè)方法中使用模狭,稱這個(gè)常量為類常量〔锐茫可以使用關(guān)鍵字static final 設(shè)置一個(gè)類常量椰于,定義的位置在main方法外部。因此零抬,同一個(gè)類的其他方法中也可以使用這個(gè)常量猎拨。如果一個(gè)常量被聲明為public,那么其他類的方法也可以使用這個(gè)常量萌朱。

運(yùn)算符

在java中宴树,算術(shù)運(yùn)算符可以用+ - * / 來代表加減乘除。
當(dāng)參與除(/)運(yùn)算的兩個(gè)操作數(shù)為整數(shù)時(shí)晶疼,表示整數(shù)除法酒贬,答案為整數(shù)。否則翠霍,表示浮點(diǎn)除法锭吨。
求余數(shù)可以用%
例如 10%3等于1,10%3.0等于1.0

注意:整數(shù)除以0將會(huì)產(chǎn)生一個(gè)異常寒匙,而浮點(diǎn)數(shù)除以0將會(huì)得到無窮大或NaN結(jié)果零如。

i++ 和 ++i 的 區(qū)別

  1. 如果只是看i++和++i躏将,這兩個(gè)是等價(jià)的,都等同于i=i+1考蕾,都是變量自身加1祸憋。
  2. 在一般情況下,它們都是跟賦值聯(lián)系在一起肖卧。
    比如:
int a;
a=i++; //將i的值賦值給a蚯窥,即a=i;然后再執(zhí)行i=i+1塞帐;
也就是【a=i++;】與【a=i; i=i+1;】等價(jià)拦赠。
a=++i;//將i+1的值賦給a,即a=i+1;然后再執(zhí)行i=i+1;
也就是【a=++i;】與【a=i+1;i=i+1;】等價(jià)葵姥。

總結(jié)一下

  • 前置++是將自身加1的值賦值給新變量荷鼠,同時(shí)自身也加1;
  • 后置++是將自身的值賦給新變量榔幸,然后才自身加1.

關(guān)系運(yùn)算符

三元操作符
Condition? expression1: expression2
當(dāng)Condition為true時(shí)允乐,計(jì)算或返回第一個(gè)表達(dá)式expression1,如果為false,則計(jì)算第二個(gè)表達(dá)式expression2.
如 x <y ? x: y
返回x和y中較小的那個(gè)值牡辽。

數(shù)值類型之間的轉(zhuǎn)換

整型喳篇、實(shí)型(常量)、字符型數(shù)據(jù)可以混合運(yùn)算态辛。運(yùn)算中麸澜,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運(yùn)算奏黑。轉(zhuǎn)換過程中可能導(dǎo)致溢出或損失精度

低----------------------------------------------------------高
byte, short, char—> int —> long—> float —> double

自動(dòng)類型轉(zhuǎn)換

必須滿足轉(zhuǎn)換前的數(shù)據(jù)類型的位數(shù)要低于轉(zhuǎn)換后的數(shù)據(jù)類型炊邦。
自動(dòng)轉(zhuǎn)換由低到高的順序轉(zhuǎn)換

int n = 123456789;
float f = n;//f值為1.234567892E8

當(dāng)使用上面兩個(gè)數(shù)值進(jìn)行二元操作時(shí)(例如 n+f , n是整數(shù),f是浮點(diǎn)數(shù))熟史,先要將兩個(gè)操作數(shù)轉(zhuǎn)換為同一種類型馁害,然后再進(jìn)行計(jì)算。

  • 如果兩個(gè)操作數(shù)中有一個(gè)是double類型蹂匹,另一個(gè)操作數(shù)就會(huì)轉(zhuǎn)換為double類型碘菜;

  • 否則,如果其中一個(gè)操作數(shù)是float類型限寞,另一個(gè)操作數(shù)將會(huì)轉(zhuǎn)換為float類型忍啸;

  • 否則,如果其中一個(gè)操作數(shù)是long類型履植,另一個(gè)操作數(shù)將會(huì)轉(zhuǎn)換為long類型计雌。

  • 否則,兩個(gè)操作數(shù)都將被轉(zhuǎn)換為int類型玫霎。

強(qiáng)制類型轉(zhuǎn)換

高的向低的順序轉(zhuǎn)換

double x = 3.94;
int y = (int) x;

x的結(jié)果為3凿滤,強(qiáng)制類型轉(zhuǎn)換通過截?cái)嘈?shù)部分將浮點(diǎn)值轉(zhuǎn)為整型妈橄。
如果想要四舍五入,得到最接近的整數(shù)翁脆【祢荆可以使用Math.round方法

double x = 3.14;
int y = (int) Math.round(x);

結(jié)果為 4,當(dāng)調(diào)用round時(shí)鹃祖,仍然需要使用強(qiáng)制類型轉(zhuǎn)換(int).其原理是因?yàn)閞ound方法返回的結(jié)果為long類型溪椎。由于存在信息丟失的可能性普舆,所以只有使用顯式的強(qiáng)制類型轉(zhuǎn)換才能夠?qū)ong類型轉(zhuǎn)換成int類型恬口。

不要在boolean類型與任何類型之間進(jìn)行強(qiáng)制類型轉(zhuǎn)換,這樣可以防止發(fā)生錯(cuò)誤沼侣。

運(yùn)算符優(yōu)先級(jí)

優(yōu)先級(jí) 運(yùn)算符 簡介 結(jié)合性
1 [ ]祖能、 .、 ( ) 方法調(diào)用蛾洛,屬性獲取 從左向右
2 !养铸、~、 ++轧膘、 -- 一元運(yùn)算符 從右向左
3 * 钞螟、/ 、% 乘谎碍、除鳞滨、取模(余數(shù)) 從左向右
4 + 、 - 加減法 從左向右
5 <<蟆淀、 >>拯啦、 >>> 左位移、右位移熔任、無符號(hào)右移 從左向右
6 < 褒链、<= 、>疑苔、 >=甫匹、 instanceof 小于、小于等于惦费、大于兵迅、大于等于,對(duì)象類型判斷是否屬于同類型 從左向右
7 == 趁餐、!= 2個(gè)值是否相等喷兼,2個(gè)值是否不等于。 下面有詳細(xì)的解釋 從左向右
8 & 按位與 從左向右
9 ^ 按位異或 從左向右
10 | 按位或 從左向右
11 && 短路與 從左向右
12 || 短路或 從左向右
13 ?: 條件運(yùn)算符 從右向左
14 =后雷、 += 季惯、-= 吠各、*= 、/=勉抓、 %=贾漏、 &=、 |=藕筋、 ^=纵散、 <、<= 隐圾、>伍掀、>= 、>>= 混合賦值運(yùn)算符 從右向左

字符串

子串substring

String類的substring方法可以從一個(gè)較大的字符串提取出一個(gè)子串暇藏。

substring(a,b)

  • a 表示開始的位置(從0開始計(jì)數(shù))
  • b表示不想復(fù)制的第一個(gè)位置

例如

String greeting = "hello";
String s = greeting.substring(0,3);

// s = hel
//從0開始計(jì)數(shù)蜜笤,直到3位置,但是不包括3盐碱,所以返回 hel

substring的一個(gè)優(yōu)點(diǎn):容易計(jì)算子串的長度把兔,長度為b-a。
例如 hel的長度為 3-0=3

檢測(cè)字符串是否相等

可以使用equals來檢測(cè)兩個(gè)字符串是否相等瓮顽。
s.equals(t)
如何相等县好,會(huì)返回true,否則,返回false. s和t可以是字符串變量暖混,也可以是字符串常量缕贡。
eg: "hello".equals(greeting)

檢測(cè)是否相等,而且不區(qū)分大小寫儒恋,可以使用equalsIgnoreCase方法善绎。
eg: "hello".equalsIgnoreCase("HeLLO)

不能使用==運(yùn)算符來檢測(cè)兩個(gè)字符串是否相同,這個(gè)運(yùn)算符只能夠確定兩個(gè)字符串是否放置在同一個(gè)位置诫尽。

空串和Null串

空串是一個(gè)Java對(duì)象禀酱,有自己的串長度(0)和內(nèi)容(空)∧良担可以通過調(diào)用以下代碼檢查字符串是否為空剂跟。

if(str.length()==0)
或
if (str.equals(""))

null表示目前沒有任何對(duì)象與該變量關(guān)聯(lián)『ㄔ澹可以通過調(diào)用以下代碼檢查字符串是否為null

if (str == null)
要檢測(cè)一個(gè)字符串既不是null也不是空串:
if (str != null && str.length()!=0)

length() 與 charAt()

length方法會(huì)返回采用UTF-16編碼表示的給定字符串所需的代碼單元數(shù)量曹洽。
想要得到實(shí)際的長度,即代碼點(diǎn)數(shù)量辽剧,可以調(diào)用

xxx.codePointCount(0,xxx.length())

調(diào)用s.chatAt(n)將返回位置n的代碼單元送淆,n介于0~ s.length()-1 之間。
eg:

String greeting = "Hello"
char first = greeting.charAt(0);    // first is H
char last = greeting.charAt(4);  // last is o

想得到i個(gè)的代碼點(diǎn)怕轿,可以使用

int index= greeting.offsetByCodePoints(0,i);
int cp = greeting.codePonintAt(index);

輸入輸出

讀取輸入

為了能夠讀取用戶在控制臺(tái)的輸入偷崩,首先需要?jiǎng)?chuàng)建一個(gè)Scanner對(duì)象辟拷,并與“標(biāo)準(zhǔn)輸入流”System.in關(guān)聯(lián)。

Scanner in = new Scanner (System.in)
  • next()
    讀取到輸入有效的字符才會(huì)結(jié)束輸入阐斜,對(duì)于輸入有效的字符之前的空白會(huì)自動(dòng)去掉衫冻,輸入有效的字符之后的空白作為分隔符或者結(jié)束符。next() 不能得到帶有空格的字符串谒出。
  • nextLine()
    以enter為結(jié)束符隅俘,nextLine()可以得到帶有空格的字符串,不會(huì)去掉空白笤喳,會(huì)全盤輸出为居。
  • nextInt()
    得到int類型的數(shù)據(jù)。nextDouble(),nextFloat()以此類推莉测。
  • boolean hasNext()
    檢測(cè)輸入中是否有還有其他單詞颜骤。

記得要import java.util.*;

import java.util.*;

public class Input_and_Output {

    public static void main(String[] args) {
    // TODO Auto-generated method stub

        Scanner in = new Scanner(System.in);
        System.out.print("what is your name :");
        String name = in.nextLine();
        System.out.print("age :");
        int age = in.nextInt();
        System.out.println("the name is " + name + ",the age is "+age);
}

//輸入結(jié)果:
//what is your name :jerry
//age :24
//the name is jerry,the age is 24

格式化輸出

System.out.print(X)會(huì)將以x對(duì)應(yīng)的數(shù)據(jù)類型所允許的最大非0數(shù)字位數(shù)打印輸出x

double x = 10000.0/3.0;
System.out.print(x);  // x = 3333.3333333333335

為了能夠方便格式輸出結(jié)果唧喉,可以使用printf()捣卤。

double x = 10000.0/3.0;
System.out.printf("8.2f",x); 
// x = 3333.33 使用8個(gè)字符的寬度和小數(shù)點(diǎn)后兩位字符的精度打印x
// 因?yàn)樾?shù)點(diǎn)后2位,為3333.33八孝。但是指定要8個(gè)字符的寬度董朝,所以左邊會(huì)補(bǔ)一個(gè)空格
// x結(jié)果為(1個(gè)空格)3333.33

用于printf的轉(zhuǎn)換符

轉(zhuǎn)換符 類型 舉例
%s 字符串類型 "Hello"
%c 字符類型 'H'
%b 布爾類型 true OR false
%d 整數(shù)類型(十進(jìn)制) 10
%x 整數(shù)類型(十六進(jìn)制) 9f
%o 整數(shù)類型(八進(jìn)制) 237
%f 浮點(diǎn)類型 15.9
%a 十六進(jìn)制浮點(diǎn)類型 0x1.fccdp3
%e 指數(shù)類型 6.23e+24
%g 通用浮點(diǎn)類型(f和e類型中較短的) 42.5000
%h 散列碼 42628b2
%% 百分比類型
%n 換行符 相當(dāng)于"\n"換行作用
%tx 日期與時(shí)間類型(x代表不同的日期與時(shí)間轉(zhuǎn)換符) 見博文下表

大數(shù)值

如果基本的整數(shù)和浮點(diǎn)數(shù)精度不夠滿足需求,那么可以使用java.math包中的兩個(gè)很有用的類:BigIntegerBigDecimal干跛。這兩個(gè)類可以處理包含任意長度數(shù)字序列的數(shù)值子姜。

  • BigInteger 實(shí)現(xiàn)任意精度的整數(shù)運(yùn)算
  • BigDecimal 實(shí)現(xiàn)任意精度的浮點(diǎn)數(shù)運(yùn)算

把普通的數(shù)值轉(zhuǎn)換成大數(shù)值,可以使用靜態(tài)的function valueOf() { [native code] }方法

BigInteger a = BigInteger.function valueOf() { [native code] }(100)

大數(shù)值的運(yùn)算不能使用常用的算術(shù)運(yùn)算符(如+楼入,*)處理哥捕,而是要使用大數(shù)值類中的addmultiply

BigInteger c = a.add(b); // c=a+b
BigInteger d = c.multiply(b.add(BigInteger.function valueOf() { [native code] }(2))); // d = c*(b+2)

其他的運(yùn)算包括有 subtract(減)divide(除)mod(余數(shù))

數(shù)組

數(shù)組聲明

數(shù)組是一種數(shù)據(jù)結(jié)構(gòu)嘉熊,用來存儲(chǔ)同一類型值的集合

數(shù)組聲明方式:
int[] array 或者int array[]

數(shù)組初始化
int[] array = new int[100];
int[] arry = new int[]{1,2,3,4,5}
int[] array = {1,2,3,4,5}

創(chuàng)建一個(gè)數(shù)字?jǐn)?shù)組時(shí)遥赚,所有的元素都初始化為0。
boolean數(shù)組的元素會(huì)初始化為false
對(duì)象數(shù)組的元素會(huì)初始化為一個(gè)特殊值null

public class Array {

  public static void main(String[] args) {

  int[] test = new int[5];
  for(int i =0;i<test.length;i++) {
  System.out.println(test[i]);}
}
}

輸出的結(jié)果會(huì)是: 0 0 0 0 0

重要:
一旦創(chuàng)據(jù)數(shù)組阐肤,就不能再改變數(shù)組的大小凫佛。如果需要在運(yùn)行中擴(kuò)展數(shù)組的大小,則需要使用另一種數(shù)據(jù)結(jié)構(gòu)——數(shù)組列表(array list)

for each循環(huán)

Java有一種很強(qiáng)的循環(huán)結(jié)構(gòu)孕惜,可以用來依次處理數(shù)組中的每個(gè)元素而不必為指定下標(biāo)值而分心愧薛。

格式:
for(variable:collection) statement
定義一個(gè)變量用于暫存集合中的每一個(gè)元素,并執(zhí)行相應(yīng)的語句衫画。
collection這一集合表達(dá)式必須必須是一個(gè)數(shù)組或者是一個(gè)實(shí)現(xiàn)了Iterable接口的類對(duì)象(例如Arraylist)毫炉。
eg:

for(int element :a)
  System.out.println(element)  
  //打印數(shù)組a的每一個(gè)元素,一個(gè)元素占一行
  // for each element in a

數(shù)組拷貝

在java中削罩,允許將一個(gè)數(shù)組變量拷貝到給另一個(gè)數(shù)組變量瞄勾。這時(shí)遵馆,兩個(gè)變量將引用同一個(gè)數(shù)組

int[] a = {2,3,5,7,11,12};
int[] b = a;
a[5] = 12 // b[2] = 12

如果想將一個(gè)數(shù)組的所有值拷貝到一個(gè)新的數(shù)組去,使用Arrays類的copyTo方法丰榴。

int[] copieda = Arrays.copyTo(a,a.length);

第二個(gè)參數(shù)是新數(shù)組的長度货邓,可以通過這個(gè)方法來增加數(shù)組的大小。
eg: Arrays.copyTo(a,2*a.length); 增加到2倍大
如果數(shù)組元素是數(shù)字?jǐn)?shù)組時(shí)四濒,多余的元素都賦值為0换况。
如果數(shù)組元素是boolean數(shù)組,多余的元素會(huì)賦值為false
如果數(shù)組元素是對(duì)象數(shù)組的元素盗蟆,多余的元素賦值為特殊值null
如果長度小于原始數(shù)組的長度戈二,則只拷貝前面的數(shù)據(jù)元素

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市喳资,隨后出現(xiàn)的幾起案子觉吭,更是在濱河造成了極大的恐慌,老刑警劉巖仆邓,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲜滩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡节值,警方通過查閱死者的電腦和手機(jī)徙硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搞疗,“玉大人嗓蘑,你說我怎么就攤上這事∧淠耍” “怎么了桩皿?”我有些...
    開封第一講書人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長幢炸。 經(jīng)常有香客問我泄隔,道長,這世上最難降的妖魔是什么阳懂? 我笑而不...
    開封第一講書人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任梅尤,我火速辦了婚禮,結(jié)果婚禮上岩调,老公的妹妹穿的比我還像新娘巷燥。我一直安慰自己,他們只是感情好号枕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開白布缰揪。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝腺。 梳的紋絲不亂的頭發(fā)上抛姑,一...
    開封第一講書人閱讀 49,879評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音艳狐,去河邊找鬼定硝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛毫目,可吹牛的內(nèi)容都是我干的蔬啡。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼镀虐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼箱蟆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起刮便,我...
    開封第一講書人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤空猜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恨旱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辈毯,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年窖杀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了漓摩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡入客,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腿椎,到底是詐尸還是另有隱情桌硫,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布啃炸,位于F島的核電站铆隘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏南用。R本人自食惡果不足惜膀钠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裹虫。 院中可真熱鬧肿嘲,春花似錦、人聲如沸筑公。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匣屡。三九已至封救,卻和暖如春拇涤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背誉结。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來泰國打工鹅士, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惩坑。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓如绸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親旭贬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怔接,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

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