3. java lecture classes1. 仍舒 亳 仄亠仂亟
仗亳舒仆亳亠 从仍舒舒
<仄仂亟亳亳从舒仂> class <仄仍舒舒>
{[仄仂亟亳亳从舒仂] <亳仗> <仗亠亠仄亠仆仆舒_从亰亠仄仗仍舒1>;
[仄仂亟亳亳从舒仂] <亳仗> <仗亠亠仄亠仆仆舒_从亰亠仄仗仍舒N>;
[仄仂亟亳亳从舒仂] <亳仗> <仄亠仂亟_从仍舒舒1>(<仗亳仂从 仂仄. 仗舒舒仄.)
{ // 亠仍仂 仄亠仂亟舒; }
[仄仂亟亳亳从舒仂] <亳仗> <仄亠仂亟_从仍舒舒>(<仗亳仂从 仂仄.仗舒舒仄.>)
{ // 亠仍仂 仄亠仂亟舒; }
}
1
2. 仍舒 亳 仄亠仂亟
仗亳舒仆亳亠 从仍舒舒
class Point
{int x, y;
Point ()
亅从亰亠仄仗仍仆亠 仗亠亠仄亠仆仆亠
(instance variables)
{x=0; y=0;
}
Point (int x1,int y1)
仂仆从仂
丼仍亠仆 从仍舒舒 (class
(仗亠亠亞亢亠仆仆亠)
members)
{x=x1; y=y1;
}
int getX() {return x;}
int getY() {return y;}
}
亠仂亟 从仍舒舒 (methods)
2
3. 仍舒 亳 仄亠仂亟
弌仂亰亟舒仆亳亠 仍仂仆 仗亠亠仄亠仆仆
亳 仂弍亠从仂于 从仍舒舒
Point p1;
仂亰亟舒仆舒 仍仂仆舒 仗亠亠仄亠仆仆舒
p1 = new Point();
Point p2 = new Point();
Point p3 = p1;
p1
仂亰亟舒仆 仂弍亠从
束从仂仂从舒 仂仄舒損
仂亰亟舒仆亳 仂弍亠从舒
仂亰亟舒仆舒 仍仂仆舒 仗亠亠仄亠仆仆舒
从舒亰于舒ム舒 仆舒 p1
仂弍亠从
p3 c仍从舒 仆舒 p1
3
4. 仍舒 亳 仄亠仂亟
弌仂亰亟舒仆亳亠 仍仂仆 仗亠亠仄亠仆仆
亳 仂弍亠从仂于 从仍舒舒
Cannot find variable p1
Point p1;
{ p1 = new Point(5,10);
p1 = null;
}
System.out.println(p1.x + "" + p1.y);
5, 10
{Point p1 = new Point(5,10);
}
System.out.println(p1.x + "" + p1.y);
NullPointerException
Point p2;
{Point p1 = new Point(5,10);
p2 = p1;
p1 = null;
}
System.out.println(p2.x + , + p2.y);
4
5. 仍舒 亳 仄亠仂亟
亠亠亞亰从舒 (overloading) 仄亠仂亟仂于
[仄仂亟亳亳从舒仂] <亳仗> <亳仄_仄亠仂亟舒> (<仗亳仂从 仂仄. 仗舒舒仄.)
亳亞仆舒舒 仄亠仂亟舒
亠亠亞亰从舒 仂亰亟舒仆亳亠 2 亳 弍仂仍亠亠 仄亠仂亟仂于 仂亟亳仆舒从仂于仄亳
亳仄亠仆舒仄亳 仆仂 舒亰仆仄亳 亳亞仆舒舒仄亳
5
6. 仍舒 亳 仄亠仂亟
亠亠亞亰从舒 (overloading) 仄亠仂亟仂于
class OverloadDemo
{void test()
{System.out.println(舒舒仄亠 仂于ム);
}
void test(int a, int b)
{System.out.println(a 亳 b: + a + + b);
}
void test(double a)
{System.out.println(亠亠于亠仆仆仂亠 a: + a);
}
}
6
7. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 static
弌舒亳亠从亳亠 仗亠亠仄亠仆仆亠
弍磦仍亠仆亳亠: static <type> <name>
弍舒亠仆亳亠: <classname>.<varname>
弌舒亳亠从亳亠 仗亠亠仄亠仆仆亠:
仂亰亟舒ム 于 亠亟亳仆于亠仆仆仂仄 从亰亠仄仗仍亠
亠于ム 于仆亠 亰舒于亳亳仄仂亳 仂 仂弍亠从仂于 从仍舒舒
仂亰亟舒ム JVM 于 仄仂仄亠仆 仗亠于仂亞仂 仂弍舒亠仆亳 从
从仍舒
亟仂仗从舒ム 仂弍舒亠仆亳亠 亟仂 仂亰亟舒仆亳 仂弍亠从仂于
从仍舒舒
7
8. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 static
弌舒亳亠从亳亠 仄亠仂亟
弍磦仍亠仆亳亠: static <type> <name> (<parameters>)
弍舒亠仆亳亠: <classname>.<metodname>()
弌舒亳亠从亳亠 仄亠仂亟:
仄仂亞 于亰于舒 仂仍从仂 亟亞亳亠 舒亳亠从亳亠
仄亠仂亟 亟舒仆仆仂亞仂 从仍舒舒
亟仂仍亢仆 仂弍舒舒 仂仍从仂 从 舒亳亠从亳仄
仗亠亠仄亠仆仆仄
于仆亳 舒亳亠从亳 仄亠仂亟仂于 仆亠仍亰
亳仗仂仍亰仂于舒 仍从亳 this 亳 super
8
9. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 static
弌舒亳亠从亳亠 弍仍仂从亳 从仂亟舒
弍磦仍亠仆亳亠:
static
{
}
弌舒亳亠从亳亶 弍仍仂从 从仂亟舒 于仗仂仍仆磳 仂亟亳仆 舒亰 仗亳
仗亠于仂仆舒舒仍仆仂亶 亰舒亞亰从亠 从仍舒舒
9
10. 仍舒 亳 仄亠仂亟
仗仂仍亰仂于舒仆亳亠 从仍ム亠于仂亞仂 仍仂于舒 this
1. 丼仂弍 仂弍仂亶亳 从亳亠 仗亠亠仄亠仆仆仂亶
从亰亠仄仗仍舒 仂仄舒仍仆仄亳 仗舒舒仄亠舒仄亳
Class Point
{
int x, y;
Point (int x, int y)
{this.x=x;
this.y=y;
}
}
10
11. 仍舒 亳 仄亠仂亟
仗仂仍亰仂于舒仆亳亠 从仍ム亠于仂亞仂 仍仂于舒 this
2. 丼仂弍 于亰于舒 仂亟亳仆 从仂仆从仂 亳亰 亟亞仂亞仂
从仂仆从仂舒 (explicit constructor invocation)
public class Rectangle
{private int x, y, w, h;
public Rectangle()
{this.x = 0; this.y = 0; this.w = 0; this.h = 0;}
public Rectangle(int w, int h)
{this.x = 0; this.y = 0; this.w = w; this.h = h;}
public Rectangle(int x, int y, int w, int h)
{this.x = x; this.y = y; this.w = w; this.h = h; }
}
11
12. 仍舒 亳 仄亠仂亟
仗仂仍亰仂于舒仆亳亠 从仍ム亠于仂亞仂 仍仂于舒 this
2. 丼仂弍 于亰于舒 仂亟亳仆 从仂仆从仂 亳亰 亟亞仂亞仂
从仂仆从仂舒 (explicit constructor invocation)
public class Rectangle
{private int x, y, w, h;
public Rectangle()
{this(0, 0, 0, 0);}
public Rectangle(int w, int h)
{this(0, 0, w, h);}
public Rectangle(int x, int y, int w, int h)
{this.x = x; this.y = y; this.w = w; this.h = h; }
}
12
13. 仍舒 亳 仄亠仂亟
仍仂亢亠仆仆亠 从仍舒
仍仂亢亠仆仆亠
从仍舒
弌舒亳亠从亳亠
于仍仂亢亠仆仆亠 从仍舒
亠舒亳亠从亳亠
于仍仂亢亠仆仆亠 从仍舒
(static nested classes)
(inner classes 于仆亠仆仆亳亠 从仍舒)
亳亳仆 仂亰亟舒仆亳 于仍仂亢亠仆仆 从仍舒仂于:
1.仂亞亳亠从舒 亞仗仗亳仂于从舒 从仍舒仂于
2.舒亳磳 于仂亰仄仂亢仆仂亳 亳仆从舒仗仍亳亳
3. 仆亠从仂仂 仍舒 仗仂于舒亠 亳舒弍亠仍仆仂 从仂亟舒
13
14. 仍舒 亳 仄亠仂亟
弌舒亳亠从亳亠 于仍仂亢亠仆仆亠 从仍舒
弌舒亳亠从亳亶 于仍仂亢亠仆仆亶 从仍舒 磦仍磳
舒亳亠从亳仄 仍亠仆仂仄 从仍舒舒, 于 从仂仂亶 仂仆
于仍仂亢亠仆. 丐.亠. 仂仆 仆亠 仄仂亢亠 仆舒仗礆
舒弍仂舒 仆亠舒亳亠从亳仄亳 仗亠亠仄亠仆仆仄亳 亳
仄亠仂亟舒仄亳 于仆亠仆亠亞仂 从仍舒舒.
14
15. 仍舒 亳 仄亠仂亟
弌舒亳亠从亳亠 于仍仂亢亠仆仆亠 从仍舒
class A {
static int x;
int y;
A()
{ System.out.println("constructor A"); }
static class B
{B()
{ System.out.println("constrcutor B");
x = 5;
public class Test {
A a = new A();
public static void main(String[ ] args)
a.y = 15;
{
}
A.B b = new A.B();
}
}
}
}
15
16. 仍舒 亳 仄亠仂亟
亠舒亳亠从亳亠 于仍仂亢亠仆仆亠 从仍舒
亠舒亳亠从亳亶 于仍仂亢亠仆仆亶 从仍舒 磦仍磳
仂弍仆仄 仍亠仆仂仄 于仆亠仆亠亞仂 从仍舒舒, .亠.
亠于亠 仂仍从仂 于 仂舒于亠 仂弍亠从舒
于仆亠仆亠亞仂 从仍舒舒 亳 亳仄亠亠 仗礆仂亶 亟仂仗 从
仗亠亠仄亠仆仆仄 亳 仄亠仂亟舒仄 于仆亠仆亠亞仂 从仍舒舒.
弍亠从 于仍仂亢亠仆仆仂亞仂 从仍舒舒
仄仂亢亠 亠于仂于舒 仂仍从仂
于仆亳 仂弍亠从舒 于仆亠仆亠亞仂
从仍舒舒
弌亠于ム (亳 亟仂于仂仍仆仂 舒仂
亳仗仂仍亰ム) 舒从亢亠 舒仆仂仆亳仄仆亠
于仆亠仆仆亳亠 从仍舒 (舒仄仂亳仄 于
仂弍舒弍仂从亠 仂弍亳亶)
16
17. 仍舒 亳 仄亠仂亟
亠舒亳亠从亳亠 于仍仂亢亠仆仆亠 从仍舒
class A {
static int x;
int y;
A()
{ System.out.println("constructor A"); }
class B {
B()
{ System.out.println("constrcutor B");
x = 5;
public class Test {
y = 15;
public static void main(String[ ] args)
}
{
A a = new A();
}
A.B b = a.new B();
}
}
}
17
18. 仍舒 亳 仄亠仂亟
舒仍亠亟仂于舒仆亳亠
弍舒 仂仄舒 仂弍磦仍亠仆亳 从仍舒舒, 仆舒仍亠亟ム亠亞仂
仗亠从仍舒:
class <subclass_name> extends <superclass_name>
{
//亠仍仂 从仍舒舒
}
亊亰从 Java 仆亠 仗仂亟亟亠亢亳于舒亠 仄仆仂亢亠于亠仆仆仂亞仂
仆舒仍亠亟仂于舒仆亳 从仍舒仂于!!!
18
20. 仍舒 亳 仄亠仂亟
仂磲仂从 于亰仂于舒 从仂仆从仂仂于 仗亳
仆舒仍亠亟仂于舒仆亳亳
亳 仂亰亟舒仆亳亳 仂弍亠从舒 仗仂亟从仍舒舒 于亠亞亟舒 于亰于舒亠
从仂仆从仂 亠亞仂 弍舒亰仂于仂亞仂 从仍舒舒, 仂亞仂 从仂仆从仂
亠亞仂 弍舒亰仂于仂亞仂 从仍舒舒 亳 .亟. 于仗仍仂 亟仂 从仂仆 亳亠舒亳亳
(从仍舒舒 Object). 亳亠仄 亠仍亳 仆亠 从舒亰舒仆仂 磦仆仂 (
仗仂仄仂 super) 于亰于舒亠 从仂仆从仂 弍亠亰
仗舒舒仄亠仂于 (仂亰亟舒仆仆亶 磦仆仂 亳仍亳 仗仂 仄仂仍舒仆亳).
仍亳
仗仂亟仂亟亠亞仂 从仂仆从仂舒 仆亠 于亟舒亠 仂亳弍从舒
从仂仄仗亳仍亳亳.
20
21. 仍舒 亳 仄亠仂亟
仍ム亠于仂亠 仍仂于仂 super
1. 亰仂于 从仂仆从仂舒 仆亠仗仂亠亟于亠仆仆仂亞仂 仗亠从仍舒舒
super (parameters) 于亰仂于 亟仂仍亢亠仆 弍 仗亠于仄
于 从仂仆从仂亠 仗仂亟从仍舒舒
仆亳仄舒仆亳亠! 亅仂 仗亳仄亠仆磳 仂仍从仂 亠仍亳 仆舒亟仂
于亰于舒 从仂仆从仂 仗亠从仍舒舒 仗舒舒仄亠舒仄亳!
2.
仂仗 从 仍亠仄亠仆 仗亠从仍舒舒, 从仂仄
仍亠仄亠仆仂仄 仗仂亟从仍舒舒
super.var_name 亳仍亳 super.metod_name()
(super 仆亠 于仍亳磳 仆舒 亳仗 亟仂仗舒)
21
22. 仍舒 亳 仄亠仂亟
仂磲仂从 于亰仂于舒 从仂仆从仂仂于 仗亳
仆舒仍亠亟仂于舒仆亳亳 弍亠亰 亳仗仂仍亰仂于舒仆亳 super
class Point3D extends Point
{int z;
Point3D ()
{ z=0; }
Point3D (int x1,int y1, int z1)
{ z=z1; }
Point3D p3d = new Point3D();
Point() -> Point3D()
Point3D p3d = new Point3D(10, 20, 30);
Point() -> Point3D(10,20,30)
}
22
23. 仍舒 亳 仄亠仂亟
仂磲仂从 于亰仂于舒 从仂仆从仂仂于 仗亳
仆舒仍亠亟仂于舒仆亳亳 亳仗仂仍亰仂于舒仆亳亠仄
super
class Point3D extends Point
{int z;
Point3D ()
{ z=0; }
Point3D (int x1,int y1, int z1)
{ super (x1, y1);
Point3D p3d = new Point3D();
Point() -> Point3D()
Point3D p3d = new Point3D(10, 20, 30);
Point(10, 20) -> Point3D(10,20,30)
z=z1; }
}
23
24. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 亟仂仗舒
class Parent
class Other
{public int v1;
{
private int v2;
// 亟仂仗仆 v1, v3, v4
protected int v3; class Child
// 仆亠亟仂仗仆舒 v2
int v4;
extends Parent
}
{
}
// 亟仂仗仆 v1, v3, v4
// 仆亠亟仂仗仆舒 v2
}
24
25. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 亟仂仗舒
仗舒于亳仍仆仂 仗仂亠从亳仂于舒仆仆仂仄 Java从仍舒亠, 于亠 从亰亠仄仗仍仆亠
仗亠亠仄亠仆仆亠 从仍舒舒 亟仂仍亢仆 亳仄亠
仄仂亟亳亳从舒仂 private, 亟仂仗 亟仂仍亢亠仆
仂亠于仍 亠亠亰 set/get 仄亠仂亟
(束亠亠/亞亠亠損)
Eclipse:
Source -> generate Getters and Setters
25
26. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 亟仂仗舒
class Point
{private int x, y;
class Point
{int x, y;
Point ()
{x=0; y=0; }
Point (int x1,int y1)
Point () {x=0; y=0; }
Point (int x1,int y1) {x=x1; y=y1; }
public int getX() {return x;}
public int getY() {return y;}
public int setX(int x) {
this.x = x;}
{x=x1; y=y1; }
}
public int setY(int y) {
this.y = y;}
}
26
27. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仍仂从
弌仍仂仆仂亶 仗亠亠仄亠仆仆仂亶 仗亠从仍舒舒 仄仂亢亠 弍
仆舒亰仆舒亠仆舒 仍从舒 仆舒 仍ミ頴笑 仗仂亟从仍舒, 仗仂亳亰于仂亟仆亶
仂 仂亞仂 仗亠从仍舒舒. 仍亳 仍仂仆舒 仗亠亠仄亠仆仆舒
仗亠从仍舒舒 从舒亰于舒亠 仆舒 仂弍亠从 仗仂亟从仍舒舒, 亠亠亰
仗亠亠仄亠仆仆 仄仂亢仆仂 仗仂仍亳 亟仂仗 仂仍从仂 从 亠仄
仍亠仆舒仄 仗仂亟从仍舒舒, 从仂仂亠 仂仗亠亟亠仍ム 于
仗亠从仍舒亠.
27
28. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仍仂从
class Point
Point Pobj = new Point();
{
int x, int y;
Point3D Cobj = new Point3D();
Pobj = Cobj;
}
class Point3D extends Point
{
int z;
}
Pobj.x = 1; //于亠仆仂! x 仂仗亠亟亠仍亠仆舒 于
Point
Pobj.z = 10; //仂亳弍从舒! z 仆亠
仂仗亠亟亠仍亠仆舒 于 Point
28
29. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仄亠仂亟仂于
亠亠仂仗亠亟亠仍亠仆亳亠 仄亠仂亟舒 (overriding) 仂亰亟舒仆亳亠 于 仗仂亟从仍舒亠
仄亠仂亟舒, 仂于仗舒亟舒ム亠亞仂 仗仂 亳亞仆舒亠 仄亠仂亟仂仄 仗亠从仍舒舒.
亳仆舒仄亳亠从舒 亟亳仗亠亠亳亰舒亳 仄亠仂亟仂于 仂 仄亠舒仆亳亰仄,
仗仂亰于仂仍ム亳亶 仂仗亠亟亠仍亳 从舒从仂亶 亳亰 仗亠亠仂仗亠亟亠仍亠仆仆
仄亠仂亟仂于 仆亢仆仂 于亰于舒, 于仂 于亠仄 于仗仂仍仆亠仆亳,
舒 仆亠 于仂 于亠仄 从仂仄仗亳仍亳亳.
29
30. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仄亠仂亟仂于
class Figure
class Rectangle extends Figure
{double dim1, dim2;
{Rectangle(double a, double b)
Figure(double a, double b)
{super(a,b); }
{dim1 = a; dim2 = b; }
void square()
void square()
{System.out.println (Square
is not defined); }
{System.out.println(Rectangle
square = + (dim1*dim2)); }
}
}
30
31. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仄亠仂亟仂于
class Triangle extends Figure
{Triangle(double a, double b)
{super(a,b); }
void square()
{System.out.println(Trian
gle square= +
(dim1*dim2/2)); }
}
class FindSquare
{public static void main(String args[ ])
{Figure f;
Random r = new Random();
for (int k=0; k<10; k++) {
int i = r.nextInt(100);
if (i<50)
{ f = new Rectangle(9,5); }
else
{ f = new Triangle(10,8); }
f.square(); }
} }
31
32. 仍舒 亳 仄亠仂亟
亳仆舒仄亳亠从舒
亟亳仗亠亠亳亰舒亳 仄亠仂亟仂于
于仂亟 仂亶 仗仂亞舒仄仄:
Rectangle square = 45.0
Triangle square= 40.0
Rectangle square = 45.0
Rectangle square = 45.0
Triangle square= 40.0
Triangle square= 40.0
Rectangle square = 45.0
Rectangle square = 45.0
Triangle square= 40.0
Rectangle square = 45.0
32
33. 仍舒 亳 仄亠仂亟
弍舒从仆亠 仄亠仂亟 亳 从仍舒
弍磦仍亠仆亳亠 舒弍舒从仆仂亞仂 仄亠仂亟舒:
abstract <type> <method_name> (<parameters>);
仍亳 于 从仍舒亠 亠 仂 弍 仂亟亳仆 舒弍舒从仆亶 仄亠仂亟 ->
从仍舒 亟仂仍亢亠仆 弍 仂弍磦仍亠仆 舒弍舒从仆仄.
abstract class <class_name>
{
}
ミ頴笑 仗仂亟从仍舒 舒弍舒从仆仂亞仂 从仍舒舒 亟仂仍亢亠仆 亳仍亳 亠舒仍亳亰仂于舒
于亠 亠亞仂 舒弍舒从仆亠 仄亠仂亟 亳仍亳 舒仄 亟仂仍亢亠仆 弍 仂弍磦仍亠仆
舒弍舒从仆仄 !
33
34. 仍舒 亳 仄亠仂亟
弍舒从仆亠 仄亠仂亟 亳 从仍舒
abstract class Figure
{double dim1, dim2;
Figure(double a, double b)
{dim1 = a;
dim2 = b;
}
abstract void square();
}
34
35. 仆亠亠亶
[<仄仂亟亳亳从舒仂>] interface <亳仄> [extends
<仗亳仂从 亳仆亠亠亶仂于>]
{ <亳仗> <亳仄_仄亠仂亟舒>(<仗亳仂从
仗舒舒仄亠仂于>);
...
<亳仗> <亳仄_从仂仆舒仆> = <亰仆舒亠仆亳亠>;
}
1. 仆亠亠亶 亟仂仗从舒ム 仄仆仂亢亠于亠仆仆仂亠 仆舒仍亠亟仂于舒仆亳亠
2. 亠 仄亠仂亟 舒弍舒从仆亠 (弍亠亰 仄仂亟亳亳从舒仂舒 abstract)
3. 亠 仗亠亠仄亠仆仆亠 static 亳 final (弍亠亰 仂仂于.
仄仂亟亳亳从舒仂仂于), 仆亠仂弍仂亟亳仄舒 亳仆亳亳舒仍亳亰舒亳
4. 亠 仗亠亠仄亠仆仆亠 亳 仄亠仂亟 public (弍亠亰 仄仂亟亳亳从舒仂舒)
35
36. 仆亠亠亶
亠舒仍亳亰舒亳 亳仆亠亠亶仂于
class <亳仄_从仍舒舒> [extends <亳仄_仗亠从仍舒舒>]
[implements <仗亳仂从 亳仆亠亠亶仂于>]
{ }
interface Callback
{void callback(int param);
}
class Client implements Callback
{public void callback(int p)
{System.out.println("callback called with " + p); }
}
36
37. 仆亠亠亶
亠舒仍亳亰舒亳 亳仆亠亠亶仂于
仂弍亠仆仆仂亳 亠舒仍亳亰舒亳亳 亳仆亠亠亶仂于:
1. 亠仂亟, 从仂仂亠 亠舒仍亳亰ム 亳仆亠亠亶, 亟仂仍亢仆 弍
仂弍磦仍亠仆 从舒从 public. 弌亳亞仆舒舒 亳仗舒 亠舒仍亳亰ム亠亞仂 仄亠仂亟舒
亟仂仍亢仆舒 仂仆仂 仂仂于亠于仂于舒 亳亞仆舒亠 亳仗舒, 从舒亰舒仆仆仂亶 于
仂仗亠亟亠仍亠仆亳亳 亳仆亠亠亶舒.
2. 仍亳 从仍舒 于从仍ム舒亠 亳仆亠亠亶, 仆仂 亠舒仍亳亰亠 仆亠 于亠 亠亞仂
仄亠仂亟, 仂 舒从仂亶 从仍舒 亟仂仍亢亠仆 弍 仂弍磦仍亠仆 从舒从
舒弍舒从仆亶.
3. 仍亳 从仍舒 亠舒仍亳亰亠 亳仆亠亠亶, 仆舒仍亠亟仂于舒仆仆亶 仂 亟亞仂亞仂
亳仆亠亠亶舒, 从仍舒 亟仂仍亢亠仆 亠舒仍亳亰仂于舒 于亠 仄亠仂亟,
仂仗亠亟亠仍亠仆仆亠 于 亠仗仂从亠 仆舒仍亠亟仂于舒仆亳 亳仆亠亠亶仂于.
37
38. 仆亠亠亶
弌仍仂仆亠 仗亠亠仄亠仆仆亠
亳仆亠亠亶仆仂亞仂 亳仗舒
interface Callback
{void callback(int param);
}
class Client implements Callback
{ public void callback(int p) //亠舒仍亳亰舒亳 仄亠仂亟舒
亳仆亠亠亶舒
{System.out.println("callback called with " + p);}
int getSquare(int p) //仂弍于亠仆仆亶 仄亠仂亟 从仍舒舒
{System.out.println("square = " + (p*p));}
}
38
39. 仆亠亠亶
弌仍仂仆亠 仗亠亠仄亠仆仆亠
亳仆亠亠亶仆仂亞仂 亳仗舒
class TestIface
{public static void main(String args[ ])
{Callback = new Client();
c.callback(42); //于亠仆仂!
c.getSquare(42); //仂亳弍从舒! 仍仂仆舒
仗亠亠仄亠仆仆舒 亳仆亠亠亶仆仂亞仂 亳仗舒 仆亠 仄仂亢亠
仂弍舒舒 从 仂弍于亠仆仆仄 仄亠仂亟舒仄
从仍舒仂于
}
}
39
41. 仍舒 亳 仄亠仂亟
仂亟亳亳从舒仂 final
1. final double pi = 3.14; //仆亠亳亰仄亠仆磳仄舒
仍仂从舒仍仆舒 仗亠亠仄亠仆仆舒
2. final int getX()
{}
//仄亠仂亟, 亟仍 从仂仂仂亞仂 亰舒仗亠亠仆仂
仗亠亠仂仗亠亟亠仍亠仆亳亠 (overriding)
3. final class A
{}
//从仍舒, 亟仍 从仂仂仂亞仂 亰舒仗亠亠仆仂
仆舒仍亠亟仂于舒仆亳亠
41
42. 仍舒 亳 仄亠仂亟
class A {
final-仍亠仆 从仍舒仂于,
仆亠亳亰仄亠仆磳仄亠 仂弍亠从
final String mName;
public A(String name) {
mName = name;
亠亳仄亠于舒
}
仆亠亳亰仄亠仆磳仄 仂弍亠从仂于:
public getName() {
1) 仂仂从仂弍亠亰仂仗舒仆仂 !
return mName;
2) 仂亳亰于仂亟亳亠仍仆仂 !
}
public setK(String name) {
mName = name;
}
}
42
43. 仍舒 亳 仄亠仂亟
亠亠亳仍亠仆亳 于 Java: enum
enum Season
{ WINTER, SPRING, SUMMER, AUTUMN }
Season season = Season.SPRING;
if (season == Season.SPRING) {
season = Season.SUMMER;
}
System.out.println(season);
43
44. 仍舒 亳 仄亠仂亟
亠亠亳仍亠仆亳亠 仂 从仍舒
弍磦仍 enum 仄 仆亠磦仆仂 仂亰亟舒亠仄 从仍舒
仗仂亳亰于仂亟仆亶 仂 java.lang.Enum. 仂仆从亳
enum Season { ... }
从于亳于舒仍亠仆仆舒
class Season extends java.lang.Enum { ... }.
亊于仆仄 仂弍舒亰仂仄 仆舒仍亠亟仂于舒 仂 java.lang.Enum
仆亠 仗仂亰于仂仍磳 从仂仄仗亳仍仂, 仆仂:
System.out.println(Season.class.getSuperclass());
亟舒亠 于于仂亟:
class java.lang.Enum
44
45. 仍舒 亳 仄亠仂亟
亠亠亳仍亠仆亳亠 仂 从仍舒
弌仂弍于亠仆仆仂 仆舒仍亠亟仂于舒仆亳亠 亰舒 仆舒 舒于仂仄舒亳亠从亳
于仗仂仍仆磳 从仂仄仗亳仍仂 Java.
丕仍仂于亳仄 仆舒亰于舒 从仍舒, 仂亰亟舒仆仆亶
从仂仄仗亳仍仂仂仄 亟仍 亠舒仍亳亰舒亳亳 仗亠亠亳仍亠仆亳
enum-从仍舒仂仄,
舒 于仂亰仄仂亢仆亠 亰仆舒亠仆亳 仗亠亠亳仍磳仄仂亞仂 亳仗舒
仍亠仄亠仆舒仄亳 enum-a.
亅仍亠仄亠仆 仗亠亠亳仍亠仆亳 - 从亰亠仄仗仍 enum从仍舒舒, 亟仂仗仆亠 舒亳亠从亳.
45
46. 仍舒 亳 仄亠仂亟
舒亰于舒仆亳亠 亳 仗仂磲从仂于亶 仆仂仄亠
仍亠仄亠仆舒 enum
ミ頴笑 enum-从仍舒 仆舒仍亠亟亠 java.lang.Enum,
从仂仂亶 仂亟亠亢亳 磲 仄亠仂亟仂于 仗仂仍亠亰仆 亟仍 于亠
仗亠亠亳仍亠仆亳亶.
亳仄亠:
Season season = Season.WINTER;
System.out.println("season.name()=" + season.name()
+ " season.toString()=" + season.toString() + "
season.ordinal()=" + season.ordinal());
于仂亟:
season.name()=WINTER season.toString()=WINTER
season.ordinal()=0
46
47. 仍舒 亳 仄亠仂亟
仂仍亠仆亳亠 仍亠仄亠仆舒 仗仂
仂从仂于仂仄 亳仄亠仆亳
舒亟舒舒: 仗仂仍亳 仍亠仄亠仆 enum 仗仂 亠亞仂 仂从仂于仂仄
仗亠亟舒于仍亠仆亳.
亠亠仆亳亠: 从舒亢亟仂仄 enum-从仍舒亠 从仂仄仗亳仍仂 舒于仂仄舒亳亠从亳
仂亰亟舒亠 仗亠亳舒仍仆亶 舒亳亠从亳亶 仄亠仂亟: public static
EnumClass valueOf(String name), 从仂仂亶 于仂亰于舒舒亠 仍亠仄亠仆
仗亠亠亳仍亠仆亳 EnumClass 仆舒亰于舒仆亳亠仄, 舒于仆仄 name.
亳仄亠 亳仗仂仍亰仂于舒仆亳:
String name = "WINTER"; Season season = Season.valueOf(name);
亠亰仍舒: 仗亠亠仄亠仆仆舒 season 弍亟亠 舒于仆舒 Season.WINTER.
仍亳 仍亠仄亠仆 仆亠 弍亟亠 仆舒亶亟亠仆, 仂 弍亟亠 于弍仂亠仆
IllegalArgumentException, 舒 亠仍亳 name 舒于亠仆 null NullPointerException.
47
48. 仍舒 亳 仄亠仂亟
仂仍亠仆亳亠 于亠 仍亠仄亠仆仂于
仗亠亠亳仍亠仆亳
仆仂亞亟舒 仆亠仂弍仂亟亳仄仂 仗仂仍亳 仗亳仂从 于亠 仍亠仄亠仆仂于 enum从仍舒舒 于仂 于亠仄 于仗仂仍仆亠仆亳. 仍 亳 亠仍亠亶 于 从舒亢亟仂仄 enum从仍舒亠 从仂仄仗亳仍仂 仂亰亟舒亠 仄亠仂亟:
public static EnumClass[ ] values()
亳仄亠 亳仗仂仍亰仂于舒仆亳:
System.out.println(Arrays.toString(Season.values()));
于仂亟:
[WINTER, SPRING, SUMMER, AUTUMN]
弍舒亳亠 于仆亳仄舒仆亳亠, 仂 仆亳 仄亠仂亟 valueOf(), 仆亳 仄亠仂亟 values()
仆亠 仂仗亠亟亠仍亠仆 于 从仍舒亠 java.lang.Enum. 仄亠仂 仂亞仂 仂仆亳
舒于仂仄舒亳亠从亳 亟仂弍舒于仍ム 从仂仄仗亳仍仂仂仄 仆舒 舒仗亠
从仂仄仗亳仍亳亳 enum-从仍舒舒.
48
49. 仍舒 亳 仄亠仂亟
亠仂亟 仗亠亠仄亠仆仆仄 亳仍仂仄
舒亞仄亠仆仂于 于 Java
仂亰仄仂亢仆仂 弍仍舒 亟仂弍舒于仍亠仆舒 于 JDK 1.5.
仍 从舒亰舒仆亳 舒亞仄亠仆舒 仗亠亠仄亠仆仆仂亶 亟仍亳仆
亳仗仂仍亰ム 亳 仂从亳 (...). 舒仗亳仄亠:
static void vaTest(int ... v) { }
亅舒 亳仆舒从亳亠从舒 从仂仆从亳 从舒亰于舒亠
从仂仄仗亳仍仂, 仂 仄亠仂亟 vaTest () 仄仂亢亠
于亰于舒 仆仍亠仄 亳仍亳 弍仂仍亠亠 舒亞仄亠仆仂于.
亠亰仍舒亠 v 仆亠磦仆仂 仂弍磦仍磳 从舒从 仄舒亳于 亳仗舒
int [ ]. 丐舒从亳仄 仂弍舒亰仂仄, 于仆亳 仄亠仂亟舒 vaTest ()
亟仂仗 从 v 仂亠于仍磳 亳仗仂仍亰仂于舒仆亳亠仄
亳仆舒从亳舒 仂弍仆仂亞仂 仄舒亳于舒.
49
50. 仍舒 亳 仄亠仂亟
亠仂亟 仗亠亠仄亠仆仆仄 亳仍仂仄
舒亞仄亠仆仂于 于 Java
class VarArgs {
static void vaTest(int ... v) {
System.out.println("仂仍-于仂 舒亞仄亠仆仂于: " + v.length);
for (int i=0;i<v.length;i++) {
System.out.print (v[i] + " ");
}
public static void main(String args[]) {
vaTest (10); //1 舒亞仄亠仆
vaTest (1, 2, 3); //3 舒亞仄亠仆舒
vaTest (); // 弍亠亰 舒亞仄亠仆仂于
}
}
50
51. 仍舒 亳 仄亠仂亟
亠仂亟 仗亠亠仄亠仆仆仄 亳仍仂仄
舒亞仄亠仆仂于 于 Java
于仂亟:
仂仍亳亠于仂 舒亞仄亠仆仂于: 1
10
仂仍亳亠于仂 舒亞仄亠仆仂于: 3
123
仂仍亳亠于仂 舒亞仄亠仆仂于: 0
51
52. 仍舒 亳 仄亠仂亟
亠仂亟 仗亠亠仄亠仆仆仄 亳仍仂仄
舒亞仄亠仆仂于 于 Java
仄亠亠 仗舒舒仄亠仂仄 仗亠亠仄亠仆仆仂亶 亟仍亳仆 仄舒亳于
仄仂亢亠 仂亟亠亢舒 仂弍仆亠 仗舒舒仄亠. 亟仆舒从仂
仗舒舒仄亠 仗亠亠仄亠仆仆仂亶 亟仍亳仆 亟仂仍亢亠仆 弍
仗仂仍亠亟仆亳仄 仗舒舒仄亠仂仄, 仂弍磦仍亠仆仆仄 仄亠仂亟仂仄.
舒仗亳仄亠:
int dolt(int a, int b, double , int ... vals) //于亠仆仂!
int dolt (int a, int b, double , int ... vals, boolean
stopFlag) // 仂亳弍从舒!
亠仂亟 亟仂仍亢亠仆 仂亟亠亢舒 仂仍从仂 仂亟仆亳 仗舒舒仄亠
亳仗舒 varargs.
int dolt (int a, int b, double , int ... vals, double ...
morevals) // 仂亳弍从舒!
52
53. 舒从亠
仂仆亳亠 仗舒从亠舒
Java 仂弍亠仗亠亳于舒亠 仗亠亳舒仍仆亶 仄亠舒仆亳亰仄 亟仍
舒亰亟亠仍亠仆亳 仗仂舒仆于舒 亳仄亠仆 从仍舒仂于 仆舒
亳仄亠仆仂于舒仆仆亠 仂弍仍舒亳. 亅仂 仄亠舒仆亳亰仄
仆舒亰于舒亠 束仗舒从亠損 (packages). 舒从亠 仂
从仂仆亠亶仆亠 亟仍 从仍舒仂于, 于 仗亠亟亠仍舒 从仂仂仂亞仂
亟仂仍亢仆舒 仂舒仆 仆亳从舒仍仆仂 亳仄亠仆
从仍舒仂于.
弍舒 仂仄舒 仂仗亠亟亠仍亠仆亳 仗舒从亠舒:
package <pkg_name>;
53
54. 舒从亠
亠舒亳 仗舒从亠仂于
亠舒亳 仗舒从亠仂于:
package pkg1[.pkg2[.pkg3]];
丼仂弍 舒仆亳 仗舒从亠, Java 亳仗仂仍亰亠
从舒舒仍仂亞亳 舒亶仍仂于仂亶 亳亠仄. Class舒亶仍 亟仍 于亠 从仍舒仂于, 仗亳仆舒亟仍亠亢舒亳
从 仂亟仆仂仄 仗舒从亠, 亟仂仍亢仆 弍 仂舒仆亠仆
于 从舒舒仍仂亞亠, 仆舒亰于舒仆亳亠 从仂仂仂亞仂
仂于仗舒亟舒亠 亳仄亠仆亠仄 仗舒从亠舒 (亠亞亳 于舒亢亠仆).
package java.awt.image;
javaawtimage
舒亰仄亠亠仆亳亠仄 从仂仆 仍ミ頴笑 亳亠舒亳亳 仗舒从亠仂于 于 舒亶仍仂于仂亶
亳亠仄亠 仗舒于仍磳 仗亠亳舒仍仆舒 仗亠亠仄亠仆仆舒 仂从亢亠仆亳
CLASSPATH.
54
55. 舒从亠
仄仗仂 仗舒从亠仂于
仂仍仆仂亠 亳仄 从仍舒舒 于从仍ム舒亠 于 亳亠舒亳 仗舒从亠仂于.
仄仗仂 从仍舒舒 亳仍亳 仗舒从亠舒:
import pkg1[.pkg2].(classname|*);
1. 仄仗仂亳仂于舒仆亳亠 从仍舒舒 仆亳从舒从 仆亠 于仍亳磳 仆舒
仂于亠仆 亟仂仗舒 从 亠亞仂 仍亠仄亠仆舒仄 !!!
2. 仍ミ英 Java-仗仂亞舒仄仄 舒于仂仄舒亳亠从亳
亳仄仗仂亳亠 仗舒从亠 java.lang.* !!!
55
56. 舒从亠
丕仂于仆亳 亟仂仗舒 亠仂仄 仗舒从亠仂于
package p1;
package p2;
public class A {
public class D extends A {
public int pub;
}
protected prot;
public class E {
int def;
}
private int priv;
}
public class B extends A {
}
public class C { }
56
57. 舒从亠
丕仂于仆亳 亟仂仗舒 亠仂仄 仗舒从亠仂于
A
B
C
D
E
public
+
+
+
+
+
protecte
d
+
+
+
+
-
<default>
+
+
+
-
-
private
+
-
-
-
-
57
58. 舒从亠
丕仂于仆亳 亟仂仗舒 亠仂仄 仗舒从亠仂于
1. 仂仗 仆舒 仂于仆亠 从仍舒舒:
-
public - 从仍舒 于亳亟亠仆 于亠亰亟亠
-
<default> - 从仍舒 于亳亟亠仆 于 仗亠亟亠仍舒
于仂亠亞仂 仗舒从亠舒
2. 仂仗 仆舒 仂于仆亠 仍亠仆仂于 从仍舒舒:
仂亟亳亳从舒仂
仆亳 仂仄 亢亠
从仍舒舒
仗舒从亠亠
仂亟从仍舒 于
亟亞仂仄
仗舒从亠亠
仂亳亰于仂仍仆亶
从仍舒 于 亟亞仂仄
仗舒从亠亠
public
+
+
+
+
protected
+
+
+
-
<default>
+
+
-
-
private
+
-
-
58
59. 弌从舒 Java-仗仂亞舒仄仄
-
仗亠于仂亶 仂从亠 舒亶仍舒 仄仂亢亠
弍 1 仆亠仂弍磶舒亠仍仆亶 仂仗亠舒仂
package
-
仍亠亟ム亳 仂从舒 仄仂亢亠 弍
1 亳仍亳 仆亠从仂仍从仂 仆亠仂弍磶舒亠仍仆
仂仗亠舒仂仂于 import
-
舒仍亠亠 亳亟 仂仗亳舒仆亳 从仍舒仂于 亳
亳仆亠亠亶仂于
弌亠亟亳 从仍舒仂于, 仂仗亳舒仆仆 于 仂亟仆仂仄
舒亶仍亠, 仂仍从仂 仂亟亳仆 仄仂亢亠 弍
仂弍磦仍亠仆 仄仂亟亳亳从舒仂仂仄
public.
59