二、 基礎語法
第一段程序:
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hello World!”);
}
}
1、標識符:
- Java中凡是需要取名字的地方都叫做標識符。
- 標識符可以由字母、數字、下劃線、和美元符號組成。
- 標識符的首字母不能是數字,且標識符是區分大小寫的。
- 標識符不能包含空格,不能包含@#等特殊符號。
- Java中定義的關鍵字、保留字不能作爲標識符但可以包含如:class private static public void。
- 類名的每個單詞的首字母大寫:方法名、變量名第一個單詞的首字母小寫,其他單詞的首字母大寫。 -
2、數據類型
(1)基本數據類型:四類八種
整型:
- byte:8位,範圍:-128(-27)~127(27-1),默認爲0
【強制轉換:byte number=(byte)128;】 - short:16位,範圍:-215~215-1;
- int:32位,範圍:-231~231-1
- long:64位,範圍:-263~263-1
- byte:8位,範圍:-128(-27)~127(27-1),默認爲0
字符型:
- char
表示單個字母,字符敞亮必須使用單引號‘‘括起來,如:‘A’;
[字符串string不是基本數據類型,是引用數據類型]
- char
- 浮點型:
- float[float類型數據需要在後邊加上f
- double
- 布爾型:
- boolean(true /false)默認爲false
(2)數據類型排序:
(3)類型轉換:
- 自動數據類型轉換:系統支持直接把某種數據類型的值直接賦給另外一種數據類型。
- 強制類型轉換:如果要把上圖右邊的數據類型轉換爲左邊數據類型,則需要強制類型轉換。強制類型轉換格式爲:(數據類型)值。例如:(int)size
【強制類型轉換應數以溢出,精度丟失(double轉int,int轉byte)】
//TestConvert
public class TestConvert {
public static void main(String arg[]) {
int i1 = 123;
int i2 = 456;
double d1 = (i1+i2)*1.2;//系統將轉換爲double型運算
float f1 = (float)((i1+i2)*1.2);//需要加強制轉換符
byte b1 = 67;
byte b2 = 89;
byte b3 = (byte)(b1+b2);//系統將轉換爲int型運算,需
//要強制轉換符
System.out.println(b3);
double d2 = 1e200;
float f2 = (float)d2;//會產生溢出
System.out.println(f2);
float f3 = 1.23f;//必須加f
long l1 = 123;
long l2 = 30000000000L;//必須加l
float f = l1+l2+f3;//系統將轉換爲float型計算
long l = (long)f;//強制轉換會捨去小數部分(不是四捨五入)
}
}
修正下列代碼中的編譯錯誤或者可能產生的溢出:
//TestConvert2
public class TestConvert2 {
public static void main(String[] args) {
int i=1,j=12;
float f1=(float)0.1; //0.1f 0.1是double類型,需要強制類型轉換
float f2=123;
long l1 = 12345678,l2=8888888888L;//l2必須加L,否則會產生溢出
double d1 = 2e20,d2=124;
byte b1 = 1,b2 = 2,b3 = 127;//byte類型的範圍是(-128~127)
j = j+10;//變量必須賦值才能使用
i = i/10;
i = (int)(i*0.1);//運算後爲double類型,需要強制類型轉換
char c1='a',c2=125;
byte b = (byte)(b1-b2);//運算後爲int類型,需要強制類型轉換
char c = (char)(c1+c2-1);////運算後爲int類型,需要強制類型轉換
float f3 = f1+f2;
float f4 = (float)(f1+f2*0.1);//運算後爲double類型,需要強制類型轉換
double d = d1*i+j;
float f = (float)(d1*5+d2);
}
}
3、常量、變量
(1)常量:
常量是在程序運行中,值不能改變的量。用final定義。
語法:final<數據類型><常量名>=<初始值>
整型常量:123
實型常量:3.14
字符常量:'a'
字符串常量:"helloworld"
邏輯常量:true、false
(2)變量:
從本質上講,變量其實是內存中的一小塊區域,使用變量名來訪問這塊區域。因此,沒一個變量使用前必須要先聲明,然後進行賦值,才能使用。
內存分爲堆、棧、方法區。
- 棧(stack):
- 存放局部變量。
- 線程私有,不能實現線程間的共享。
- 先進後出。自動分配,連續內存空間,效率高。
- 堆:
- 存放new出來的對象。
- 不連續內存空間,分配靈活,效率低。
- 方法區:
- 存放永遠不變而且唯一的文件。(類代碼信息、靜態變量、字符串常量)
- 被所有線程共享。
- 不連續內存空間,分配靈活,效率低
//內存分析
public class Test{
public static void main(String [] args){
Car c1=new Car();
c1.changeColor("紅色");
c1.showColor();
System.out.println(Car.typeNum);
System.out.println(c1.typeNum);
Car c2=new Cae();
Engine e=new Engine();
e.speed=1000;
e.weight=e;
c2.engine=e;
c2.color="黑色";
c2.typeNum=10;
System.out.println(c1.typeNum);
}
}
class Car{
static int typeNum=4;
Engine enging;
String color;
void changeColor(String c){
color=c;
}
void showColor(){
System.out.println("我的顏色是:"+color);
}
}
class Engine{
int speed;
int weight;
}
內存分析圖: