天天看點

JAVA學習日記---Thinking in Java學習筆記,1-4章總結

JAVA學習日記---Thinking in Java學習筆記,1-4章總結

第一章:對象導論

在這一章介紹了JAVA所覆寫的隻是包括:

1.1抽象過程:萬物皆對象

1.2每個對象都有一個接口:對象的建立new

1.3每個對象都提供服務

1.4被隐藏的具體實作:使用關鍵字public, private,protected,以及無修飾來實作封裝,注意protected與無修飾即default的差別(default的方法不能被其他包中的類調用即使他們有繼承關系,protected與default相同,但是其他包中如果有繼承關系的類也是可以用protected方法的這裡是不同)

1.5複用具體實作

1.6繼承

1.7多态

1.8單根繼承

1.9容器(包括泛型)

1.10對象的生命周期

1.11異常處理

1.12并發程式設計:在程式中,彼此獨立運作的部分稱之為現成

1.13JAVA與internet(包括伺服器程式設計)

第二章:一切都是對象

2.1用引用操作對象:一切都看成對象,但是被操作的是對象的引用即位址

2.2對象的存儲:對象存放在堆記憶體中,引用則在堆棧中,基本類型也會存放在堆棧中,常量放在位于堆記憶體的常量池中

2.3永遠不需要銷毀的對象:提出了作用域的概念,對象的引用會在超出作用域範圍後銷毀,但是對象在需要的情況下會一直存在于記憶體中

2.4建立新的資料類型:類,使用類來建立新的資料類型,即引用類型

2.5方法,參數和傳回值:本節介紹了如何建立方法,方法會有帶有傳回值的和不帶傳回值的

2.6static關鍵字的作用,static關鍵字修飾的方法和域不會與包含它的那個類的任何對象執行個體關聯,直接可以用類名調用static修飾的域或方法。

static修飾的域屬于類,不論這個類的幾個對象調用,都是同一個域

2.7在這一節中,有一個遺留問題,main()方法中的String []args數組是用來存儲指令行參數的,什麼是指令行參數?有什麼用處?

第三章:操作符

3.1在第一節中提到了static關鍵字的另一個作用:靜态導入

3.2操作符+,-,*,/,=

3.3優先級

3.4指派:本節需要注意的是對象的指派與基本資料類型的指派不同,對一個對象進行操作時,我們隻是操作的對象的引用,即位址,是以如果将一個對象指派給另一個對象隻是将位址從一個地方複制到另一個地方,即這兩個對象的引用指向的是同一個對象

另一個要注意的是别名引用

3.5算術操作符:+,-,*,/,%(取餘)

3.6自增和自減:i++,++i,i--,--i

對于字首操作是先執行運算,再生成值;對于字尾操作是先生成值,再執行運算,如:

int i =1;

print(i++)//output:1

print(++i)//output:3

3.7關系操作符:>,<,>=,<=,==,!=

3.8邏輯操作符:與(&&),或(||),非(!)

本節提到短路現象:

與(&&)操作,如果有一個表達式是false,false表達式後面的表達式不再運作,整個表達式為false

或(||)操作,如果有一個表達式是true,則true表達式後面的表達式不再運作,整個表達式為true

3.9直接常量:如pi

3.10按位操作符:按位與(&),按位或(|),異或(^),非(~)提到Integer類中的toBinaryString()方法

按位與(&):兩位都是1,才會輸出1

按位或(|):兩位都是0,才會輸出0

異或(^):兩位有一位是1,但是兩位不能都是1,則輸出1

3.11移位操作符:>>右移,>>>無符号右移,<<左移

3.12三元操作符:boolean-exp?value0:value1,如果表達式-exp為true則表達式的值為value0,否則為value1

3.13字元串操作符:+和+=,如果表達式以一個字元串起頭,那麼後續所有操作數都将是字元串型常用的方法System.out.println(""+x)://output: x

3.14使用操作符時常犯的錯誤:相當“==”用成指派“=”,邏輯與,邏輯或,用成“&”,“|”

3.15類型轉換,需要記住的是:

截尾,29.7f轉化為int型是29,并非30

提升,char,byte,short->int,float->double,int->long

當類型轉換成一種小的類型時,必須留意“窄化轉換”,會丢失精度

第四章:控制執行流程

4.1true false

4.2if else

4.3while, do whilel, for

需要注意的是:

do while需要運作一次do下面的語句

for語句執行順序,先執行初始化如:int i = 0(此處僅初始化執行一次),然後進行條件判斷如:i<100,然後執行for中的語句,最後進行“步進”如:i++

4.4增強for循環主要用于數組,或者是傳回值為數組的方法

4.5return:作用1,指定方法傳回的值,2結束程式

4.6break和continue

break:用于強行退出循環,不執行循環中剩餘的語句

continue:停止執行目前疊代,退回到循環起始處,進行下一次疊代

4.7标簽:與break和continue配合使用,主要用來跳出循環

4.8switch

swith(c){

case 1:

break;

case 2:

break;

}

今天的TopCoder:SRM 195 DIV 2 250

Problem Statement

Most of the time when rounding a given number, it is customary to round to some multiple of a power of 10. However, there is no reason why we cannot use another multiple to do our rounding to. For example, you could round to the nearest multiple of 7, or the nearest multiple of 3.

Given an int n and an int b, round n to the nearest value which is a multiple of b. If n is exactly halfway between two multiples of b, return the larger value.

Definition

Class: Rounder
Method: round
Parameters: int, int
Returns: int
Method signature: int round(int n, int b)
(be sure your method is public)

我的算法如下:

public class Rounder {

public int round (int n ,int b){

int result = (n/b)*b;

if(n-result<result+b-n){

result = result;

}else{

result = result+b;

}

return result;

}

}