第三章 java的基本程序設(shè)計(jì)結(jié)構(gòu)
- 源代碼的文件名必須與公共類(lèi)的名字相同,并且都大寫(xiě)字母開(kāi)頭
-
System.out.println()
輸出后換行,System.out.print()
輸出后不換行 - 從java7開(kāi)始可以為數(shù)字字面量加下劃線如:1_000_000表示一百萬(wàn)
- 使用float和double會(huì)引入誤差,如果不希望有任何誤差則應(yīng)該使用BigDecimal類(lèi)
- 整型和布爾值不能相互轉(zhuǎn)換(不同于C++)。例如if(x=0)不能通過(guò)編譯,因?yàn)閤為整型0,不能轉(zhuǎn)換成if所需要的布爾值
- C++中區(qū)分變量的聲明和定義,在java中不區(qū)分
- java移位運(yùn)算符: >>>用0填充高位,>>用符號(hào)位填充高位
C++移位運(yùn)算符: >>無(wú)法確定用什么填充的高位,所以右移位實(shí)際上是對(duì)非負(fù)數(shù)定義的 - 當(dāng)一個(gè)字符串與一個(gè)非字符串進(jìn)行拼接時(shí),后者被轉(zhuǎn)換成字符串,如下,b自動(dòng)轉(zhuǎn)換成了String類(lèi)型
String a = "nihao";
int b = 10086;
String c = a + b; //=> 你好10086
-
==
運(yùn)算符判斷兩個(gè)變量是否在內(nèi)存同一位置上,而不是判斷他們的內(nèi)容是否相等 -
StringBuffer
支持多線程,但效率低;StringBuilder
僅支持單線程,但效率高,它們有相同的API - 屏幕讀取輸入
Scanner in = new Scanner(System.in)
String name = in.nextline(); //這里的nextline可以為nextInt、nextDouble等等
想以空格為分隔符讀取一個(gè)單詞就用in.next()
- 格式化輸出,
System.out.printf(" Hello, %s. Next year, you'll be %d", name, age)
- 文件輸出
String path = "C:\\Users\\Lang\\Desktop\\1.txt";
Scanner in = new Scanner(Paths.get(path));
while(in.hasNextLine())
{
System.out.println(in.nextLine());
}
- 文件寫(xiě)入
PrintWriter out = new PrintWriter(path);
out.println("test2");
out.close();
- java沒(méi)有運(yùn)算符重載的功能
-
for each
遍歷,如
int[] a = {1,2,3,4};
for (int element: a)
System.out.println(element);
第四章 對(duì)象與類(lèi)
- 在java中,任何對(duì)象變量的值都是對(duì)存儲(chǔ)在另外一個(gè)地方的一個(gè)對(duì)象的引用。new操作符的返回值也是一個(gè)引用
- 在一個(gè)源文件中只能有一個(gè)公有類(lèi)
public
,但可以有任意數(shù)目的非公有類(lèi)protect,private
- JAVA和C++調(diào)用靜態(tài)方法的不同,
C ++為 類(lèi)名::StaticMethod
JAVA為 類(lèi)名.StaticMethod - java中方法參數(shù)的重點(diǎn)理解:
一個(gè)方法不能修改一個(gè)基本數(shù)據(jù)類(lèi)型的參數(shù)(即數(shù)值型和布爾型),因?yàn)閭魅霑r(shí)進(jìn)行了形參到實(shí)參的復(fù)制
一個(gè)方法可以改變一個(gè)對(duì)象參數(shù)的值
一個(gè)方法不能讓對(duì)象參數(shù)引用一個(gè)新的對(duì)象 - 如果類(lèi)中提供了至少一個(gè)構(gòu)造器,但是沒(méi)有提供無(wú)參數(shù)的構(gòu)造器,則在構(gòu)造對(duì)象時(shí)使用無(wú)參數(shù)的構(gòu)造器將被視為不合法,也就是說(shuō)僅當(dāng)類(lèi)沒(méi)有提供任何構(gòu)造器的時(shí)候系統(tǒng)才會(huì)提供默認(rèn)構(gòu)造器
- 如果構(gòu)造器的第一個(gè)語(yǔ)句形如
this(...)
,這個(gè)構(gòu)造器將調(diào)用同一個(gè)類(lèi)的另一個(gè)構(gòu)造器。例如:
public Employee( double s )
{
// calls Employee( String, double )
this( "Employee #" + nextId, s);
nextId++;
}
- 類(lèi)中實(shí)例域初始化的三種方式
- 在構(gòu)造器中初始化
- 在聲明時(shí)直接賦值
- 使用初始化塊
- java的
import
和C++的#include
沒(méi)有共同之處。在C++中必須使用include
將外部特性的聲明加載進(jìn)來(lái),這是因?yàn)镃++編譯器無(wú)法查看任何文件的內(nèi)部,除了正在編譯的文件以及在頭文件中明確包含的文件。java編譯器可以查看其他文件的內(nèi)部,只要告訴他到哪里去查看就行了。
在java中通過(guò)顯示的給出包名,如java.util.Date
,就可以不用import
;而在C++中無(wú)法避免使用#include
import
的唯一好處是便捷。可以使用簡(jiǎn)短的名字而不是完整的包名來(lái)引用,其與C++的命名空間(namespace
)類(lèi)似