1
JAVA筆記
2
2008 04 22
3
1.用javac編譯代碼時,javac 后的文件名對大小寫不敏感,如一個名為Hello.java的文件,
4
可以這樣寫:javac hello.java或javac HEllO.java
5
2.用java解釋代碼時,java 后跟的是一個類名,而不是一個文件名.如要解釋文件名為Hello.java的文件(類名為Hello是一個類名,
6
文件名要寫類名相同)必須寫成java Hello.
7
3. Label prompt1; //Label 對象是一個可以容器中放置文本的組件
8
TextField input1; //TextField 對象是個允許編輯單行文本的文本組件
9
4.java中對boolean類型賦值時只能是true或false,不能像C語言一樣的賦任意不為0 的數.
10
如在用到if或while語句時,條件只能用boolean值的true或false.如:
11
if(true){
12
}
13
while(false){
14
}
15
5.java中數組:
16
1)可以在定義數組時值,
17
如:
18
int [] num={1,2,3}//ok
19
或:
20
int [] num=new int[]{1,2,3}//ok
21
注意:不能這么指定大小:
22
int [] num =new int[3]{1,2,3}//error!!!
23
但不能在定義之后再賦值,(非法)
24
如:
25
int [] num;
26
num={1,2,3}//error
27
2)二維數組
28
int [][]num =new int[][]{1,2,3,4,5,6};//error
29
int [][]num =new int[][]{{1,2,3},{4,5,6}};//初始化賦值兩行三列ok
30
int [][]num =new int[2][3]{{1,2,3},{4,5,6}};//初始化指定大小兩行三列error
31
6.關于JAVA的"++"操作:
32
int i =3;
33
int count =(i++) +(i++) +(i++); //這么計算:(3) +(4) +(5)
34
int count =(++i) +(++i) +(++i); //這么計算:(4) +(5) +(6)
35
System.out.println("i="+i);
36
System.out.println("count="+count);
37

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

1
JAVA筆記
2
2008 04 24
3
4
1.補碼:
5
已知一個負數的補碼,將其轉換為十進制數,步驟:
6
1、先對各位取反;
7
2、將其轉換為十進制數;
8
3、加上負號,再減去1。
9
例如:
10
11111010,最高位為1,是負數,先對各位取反得00000101,轉換為十進制數得5,加上負號得-5,再減1得-6。
11
2.左移,右移,無符號右移.
12
int j = 8;
13
int f = j << 2;//左移.每左移一位相當于乘以2,這里乘以4
14
int g = j >> 2;//右移,每右移一位相當于除以2,這里除以4
15
int h = j >>> 2;//無符號右移,每右移一位相當于除以2,這里除以4
16

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

1
JAVA筆記
2
3
2008 04 26
4
5
1.特殊變量this的使用:
6
關于實例方法和實例數據成員的進一步說明
7
一個類所有的實例(對象)調用的成員方法在內存中只有一份拷貝,
8
盡管在內存中可能有多個對象,而數據成員在類的每個對象所在內存中都存在著一份拷貝。
9
this變量允許相同的實例方法為不同的對象工作。每當調用一個實例方法時,
10
this變量將被設置成引用該實例方法的特定的類對象。方法的代碼接著會與this所代表的對象的特定數據建立關聯。
11
12
1)this代表對象本身,當類的成員變量與類成員方法的局部變量同名時,可以用this來區分.
13
2)this 還可以簡化構造函數的調用
14
class Point
15
{
16
int x,y; //類的成員變量
17
//
18
Point ()//構造方法主要為類的對象定義初始化狀態
19
{
20
this(1,2); //通過this簡化構造函數的調用。
21
}
22
Point(int a ,int b)//重載構造方法
23
{
24
//initialization phase初始化段
25
x = a;
26
y = b;
27
}
28
29
//termination phase終止段
30
void output()
31
{
32
System.out.println("x ="+x);
33
System.out.println("y ="+y);
34
}
35
36
//void output(int x ,int y) //this變量代表對象本身
37
//{ //當類中有兩個同名變量,一個屬于類(類的成員變量),
38
// //而另一個屬于某個特定的方法(方法中的局部變量),使用this區分成員變量和局部變量。
39
// this.x = x;
40
// this.y = y;
41
//}
42
43
//processing phase處理段
44
public static void main(String[] args)// main method
45
{
46
Point pt1;
47
pt1 = new Point();
48
//pt1.putput(4,5);
49
pt1.output();
50
51
}
52
}
53
54
2. 類方法(靜態方法)和類變量(靜態變量)
55
1)class Point{
56
.
57
static int a;//定義一個類變量
58
stactic void output(){}//定義一個類方法
59

60
Point.output();//調用一個類方法
61
}
62
2)類方法只能引用類變量,不能引用非類變量,也不能調用非類方法
63
3)類變量可以被非類方法引用,類方法也可以通過對象調用
64
3.用final聲明常量:
65
1)用final聲明的常量的同時必須對他進行初始化;
66
2)非靜態常量也可以在類的構造方法中初始化,
67
但如果類中有多個重載構造方法則必須在*每個沒有調用已經初始化final常量方法*中都進行初始化.
68
3)**如果把這個常量聲明為靜態常量時(static final PI = 3.1415926)則必須在聲明時初始化!
69
70
4.關于繼承extends[**構造方法和析構方法不能被繼承**]
71
1)JAVA是不允許多繼承的.
72
2)在子類中定義一個與父類中同名,同返回類型,同參數個數和類型的成員方法稱為方法的覆蓋.即**子類的方法把父類的方法覆蓋掉了**!!
73
在子類中的同名變量亦是如此,此時父類的同名變更將在子類中被隱藏起來!
74
3)如果要訪問父類中被隱藏的成員變量或調用被覆蓋的方法可以用Super.
75
4)每個子類構造方法的第一條語句,都是隱含地調用super();
76
**如果子類和父類中都有構造方法,則必須通過super()顯示調用父類的構造方法!**
77
5.關于多態性:
78
1)通過覆蓋父類的方法來實現,在運行時根據傳遞的對象引用,來調用相應的方法。
79
2)當我們把子類對象的引用傳給聲明為父類的一個對象變量,
80
如果子類有的方法就調用子類的方法,如果子類沒有的方法就調用父類的方法!
81
6.可以用instanceof來驗證某個對象是否是某個類的實例
82
83
class Animal
84
{
85
int weight,height;
86
Animal(int weight,int height)//Animal類的構造方法
87
{
88
System.out.println("Animal construct");
89
}
90
void eat()
91
{
92
System.out.println("Animal eat");
93
}
94
95
void breathe()
96
{
97
System.out.println("Animal breathe");
98
}
99
}
100
101
class Fish extends Animal //Fish類繼承了Animal類
102
{
103
int height;
104
Fish()//Fish類的構造方法
105
{
106
super(30,40);//顯示調用父類中帶參數的構造方法
107
System.out.println("Fish construct");
108
}
109
void breathe()//在了類中重寫breathe方法
110
{
111
//super.breathe();//用super可以調用父類被覆蓋的方法
112
//super.height = 40;//用super可以訪問父類被隱藏的成員變量
113
System.out.println("Fish bubble");
114
}
115
}
116
117
class Intergration
118
{
119
public static void main(String[] args)
120
{
121
//Animal an = new Animal();
122
Fish fh = new Fish();
123
//
124
//an.breathe();
125
//fh.height = 30;
126
//fh.breathe();
127
Animal an=new Animal(30,40);
128
Fish fh=new Fish();
129
an=fh;//將Fish的對象fh的引用賦給Animal的對象an后,an也變成了Fish的一個實例!
130
/*if(an instanceof Animal)
131
{
132
System.out.println("an is animal's instance");
133
}
134
if(fh instanceof Fish)
135
{
136
System.out.println("fh is fish's instance");
137
}*/
138
if(an instanceof Fish)//驗證an是否是Fish的一個實例
139
{
140
System.out.println("an is fish's instance");
141
}
142
else
143
{
144
System.out.println("an isn't fish's instance");
145
}
146
if(fh instanceof Animal)
147
{
148
System.out.println("fh is animal's instance");
149
}
150
else
151
{
152
System.out.println("fh isn't animal's instance");
153
}
154
}
155
}
156
157
7.用面向對象的方法求:
158
求一個長方形的周長和面積。
159
以面向對象的程序設計方式思考:
160
1、一個長方形可以看成一個長方形對象。
161
2、一個長方形對象有兩個狀態(長和寬)和兩個行為(求周長和求面積)。
162
3、將所有長方形的共性抽取出來,設計一個長方形類。
163
4、通過長方形對象的行為,就可以求出某個具體的長方形對象的周長和面積。
164
165
//create a Rectangle class
166
//declaration l and w variables for length and width
167
//create perimeter method and area to count
168
//creat main method
169
//declaration object Rectal1 and Recral2
170
//intialization variable l and w by object Rectal1 and Recral2
171
//print the value
172
173
class Rectangle
174
{
175
int l,w;
176
177
//processing phase
178
int perimeter()
179
{
180
return 2*(l+w);
181
}
182
183
int area()
184
{
185
return l*w;
186
}
187
188
public static void main(String[] args)
189
{
190
Rectangle Recta1 = new Rectangle();
191
Rectangle Recta2 = new Rectangle();
192
193
//initialization phase
194
Recta1.l = 10;
195
Recta1.w = 30;
196
Recta2.l = 30;
197
Recta2.w = 20;
198
199
//termination phase
200
System.out.println("Recta1's Perimeter is: \t" + Recta1.perimeter());
201
System.out.println("Recta1's Area is: \t" + Recta1.area());
202
System.out.println("Recta2's Perimeter is: \t" + Recta2.perimeter());
203
System.out.println("Recta2's Area is: \t" + Recta2.area());
204
}
205
}
206

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56


57

58

59


60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

1
JAVA筆記
2
2008 04 29
3
4
1.package(包)
5
1)package語氣必須是程序的第一條語氣(除了注釋語氣和空白語氣)
6
2)package的包名指的是一個文件夾或路徑,也就是說,類名在package所在的目錄下,在解釋執行時必須標明類所在的路徑.
7
如:
8
package cn.mybole;
9
10
class Test
11
{
12
public static void main(String[] args)
13
{
14
System.out.println("package test!");
15
}
16
}
17
18
//執行:java cn.mybole.Test
19
3)可以在編譯時用 "-d ."(-d 和.之間有一個空格,.和*.java之間有一個空格)參數來在當前目錄下生成目錄 cn/mybole/Test.class,
20
即將*.class文件在生成的目錄下生成.
21
如: javac -d . Test.java //在當前目錄一生成包
22
javac -d E:\javalesson\Test.java //在指定目錄(E:\javalesson)一生成包
23
4)用import關鍵字導入一個包(其中,java.lang包是自動導入的):
24
1.import java.io.File //導入java.io包中的File類
25
2.import java.io.* // 導入java.io包中的所有類
26
這種導入所有類的方法雖然方便,但是:
27
1.會消耗機器的大量內存
28
2.當遠程加載時會因加載到本地的類過多而造成明顯的延時.
29
5)導入一個包中的類后可以在當前類中用所導入的類直接定義變量
30
如: File f; //用已經導入的類定義變量
31
java.io.File f //當沒有用import導入包時也可以通過完整的類名定義
32
6)如果要使用的類在同一個包中,無需用import語氣就可以相互引用.
33
34
2.類的說明符
35
1)從外部軟件包中訪問非同一個包的一個類--public類
36
1.缺省的類是不能被外部軟件包訪問的.
37
2.只有聲明為public的類才能通過import(或在當前類中以完整類名)被外部軟件包訪問.
38
如:
39
//Test2.java
40
41
//package cn.mybole;
42
package com.winsunlight; //com.winsunlight包
43
44
public class Test2 //Test類是public類.
45
{
46
47
}
48
//Test.java
49
50
package cn.mybole;
51
52
//import java.io.File;
53
//import java.io.*;
54
import com.winsunlight.Test2;//導入com.winsunlight包中的Test2類
55
class Test
56
{
57
public static void main(String[] args)
58
{
59
//File f;
60
//java.io.File f;
61
//System.out.println("package test!");
62
Test2 t2 = new Test2(); //訪問com.winsunlight包中的Test2類
63
}
64
}
65
2)final類(最終類)不能被其他類所繼承,其方法也不能被覆蓋.
66
1.public final class Test2 //用public和final修飾的類可以用import引用,亦不能被繼承.

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66
