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 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
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 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
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 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
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 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引用,亦不能被继承.