Hello World
來看看第一個程序吧:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("wmq天下第一可愛");
System.out.println("就不用HelloWorld,嘻嘻");
}
}
這個程序可以說簡單了,但是有幾點需要注意的地方Java遵循萬物皆對象的思想,程序必須放在類中。和C語言一樣,必須有main()
函數來作爲程序入口,但在面向對象的術語中,這裏的main()
要稱爲方法(method)。
Java程序以類(class)爲基本單位,public
和static
被稱爲修飾符,每個.java文件中只能有一個public類,並且這個類名要與文件名同名。Java規定main()必須像上面這樣寫,具體原因後續解釋。
類的命名:Java規範推薦類名要用大駝峯法,即首字母要大寫,如果包含多個英語單詞,每個單詞首字母大寫。
MyName
MyAge
HelloWorld
而方法名推薦小駝峯,區別只是第一個首字母不用大寫:
myName
myAge
helloWorld
創建對象
使用new
關鍵字創建對象:
new String("疏影橫斜水清淺,暗香浮動月黃昏。");
我們從String
類創建了一個實例對象,還需要有一個引用來使用它。
String s = new String("abc");
就像在C語言中定義一個普通變量一樣簡單,這樣的類型在Java中稱爲引用類型。由於字符串的使用實在是頻繁,所以這個還有簡潔寫法:
String s = "abc";
基本類型
還記得在C語言中定義像int
、float
這樣的變量根本用不着new
,當然C裏面也沒有,爲了簡化程序,在Java中也有一些基礎類型是不用new
的。
通常new
出來的對象都是保存在堆內存中的,以此方式創建小而簡單的變量往往是不划算的。所以對於這些基本類型的創建方法,Java
使用了和C/C++
一樣的策略。也就是說,不是使用new
創建變量,而是使用一個“自動”變量。 這個變量直接存儲"值",並置於棧內存中,因此更加高效。
基本類型 | 大小 | 最小值 | 最大值 | 包裝類型 |
---|---|---|---|---|
boolean | — | — | — | Boolean |
char | 16 bits | Unicode 0 | Unicode 216-1 | Character |
byte | 8 bits | -128 | +127 | Byte |
short | 16 bits | -215 | +215-1 | Short |
int | 32 bits | -231 | +231-1 | Integer |
long | 64 bits | -263 | +263-1 | Long |
float | 32 bits | IEEE754 | IEEE754 | Float |
double | 64 bits | IEEE754 | IEEE754 | Double |
void | — | — | — | Void |
與C語言不同,Java沒有無符號數,並且所有相同類型在不同系統所佔空間大小是一致的。
這些類型可以很方便的使用,和在C語言中基本沒差別:
char x = 'a';
int money = 123;
float pi = 3.14;
如果要把這些值保存在堆內存上,可以使用它們的包裝類型像前面創建字符串對象那樣使用。
定義常量要用final
而不是const
:
final int age = 18;
對常量重新賦值會引起報錯。
var
對於一些比較長的類型名:
var e = new VeryVeryLong(); // 和下面的等同
VeryVeryLong e = new VeryVeryLong();
var
相當於可以幫助你少打幾個字。
註釋
Java註釋也和C中差不多:
// 這是單行註釋
/*
這是多行註釋
*/
/**
*這個有點特殊
*比一般的多行註釋
*多了個星號,每行開頭還有星號
*可以用來自動創建文檔的註釋
*/
char類型
Java中的char
類型用兩個字節表示,可以表示一個Unicode字符,也就是說可以表示部分中文,還有一些特殊的符號之類的。還可以用轉移序列\u
來表示一個Unicode字符。比如'\u03C0'
表示希臘字母π。
和在C語言中一樣,單引號表示字符char類型,"A"這樣雙引號括起來的是字符串。習慣了Python的人要注意這一點。
boolean類型
boolean
布爾類型,就兩種值,false
和true
。
需要注意的是,在Java中布爾值不能和整型值相互轉換。而在C中可以用0代替false,用非0值代替true。事實上在C語言中布爾量也就是無符號整數類型。
短路運算
對於一個布爾運算的表達式,如果可以提前確定結果,就不再計算後續內容。
舉個栗子:
boolean flag = (3 > 5) && (2 / 0 == 1);
這裏編譯器不會報後面2除以0的錯誤,因爲&&
與運算是全爲真才爲真,這裏第一個3 > 5
已經爲假,後面的計算就不會再做了。類似的,對於||
或運算,如果前面已經確定爲真,後面的內容也不會計算。
Java也有三元運算符? :
,用法和C語言一樣。
字符串
字符串不屬於基本類型而是引用類型。
String s1 = ""; //字符串可以爲空,長度爲0
String s2 = "hello";
String s3 = "world";
與C語言不同,Java字符串並沒有以\0
做結尾哦。
字符串是不可變的。
public class Main {
public static void main(String[] args) {
String s = "hello";
System.out.println(s); // 顯示 hello
s = "world";
System.out.println(s); // 顯示 world
}
}
可以看到打印的s的值變了,但是實質上引用類型是將s
這個引用存在棧內存中,而字符串對象hello
和world
則存在堆內存中,引用類型就有點像C語言中的指針,s一開始指向了hello,後來我們又創建了一個內容爲world
的字符串對象並讓s指向了它。
字符串可以用+
來拼接,並且可以和其它類型拼接,在這之前其它類型會被自動轉成字符串。
public class Main {
public static void main(String[] args) {
String s1 = "I love ";
String s2 = "you ";
int a = 3000;
String s = s1 + s2 + a;
System.out.println(s);
}
}
和Python一樣,Java現在可以用三對雙引號表示多行字符串,但是這是Java13纔有的新特性。
輸入
在命令行中輸出只需要使用System.out.println()
就行,但是輸入就比較麻煩了。
首先需要構造一個Scanner
對象:
Scanner in = new Scanner(System.in);
獲取字符串輸入:
String s = in.nextLine();
獲取整數:
int i = in.nextInt();
別急着運行你的程序,現在還要在最開始添加一行import java.util.*;
導入這個包才能使用輸入。
掃碼關注公衆號: