- Class
Declaring Classes
范例
class MyClass extends MySuperClass implements YourInterface {
// field, constructor, and
// method declarations
}
1.可以用public,private等修饰
2.继承extends
3.实现implements
Declaring Member Variables
public int cadence;
public int gear;
public int speed;
1.权限修饰符
2.类型
3.名字
Defining Methods
public double calculateAnswer(double wingSpan, int numberOfEngines,
double length, double grossTons) {
//do the calculation here
}
1.权限修饰符。
2.返回值类型
3.方法名称
4.参数列表
5.异常列表
6.方法体:代码,局部变量。
public class DataArtist {
...
public void draw(String s) {
...
}
public void draw(int i) {
...
}
public void draw(double f) {
...
}
public void draw(int i, double f) {
...
}
}
JAVA通过方法名+参数类型,个数唯一确定一个方法。
Providing Constructors for Your Classes
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
构造器:名字和类名相同且没有返回值。
new 调用了构造函数
new Bicycle(30, 0, 8)
在内存中创造了对象并初始化fields
也可以有无参构造函数。
你不一定要提供构造函数,编译器去找父类的无参构造函数,如果你没有显示的指定你的父类,所有的类都有一个父类Object。
构造器就是来构造对象的,如果不能调用某个类的构造函数则不能直接创造该类的对象(言外之意可以间接创造)。
Passing Information to a Method or a Constructor
public double computePayment(
double loanAmt,
double rate,
double futureValue,
int numPeriods) {
double interest = rate / 100.0;
double partial1 = Math.pow((1 + interest),
- numPeriods);
double denominator = (1 - partial1) / interest;
double answer = (-loanAmt / denominator)
- ((futureValue * partial1) / denominator);
return answer;
}
参数就是方法声明的时候变量列表,Argument是实际传进来的值。
Parameter Names
参数名在它的作用域内必须唯一,不能和本地变量名一样。
public class Circle {
private int x, y, radius;
public void setOrigin(int x, int y) {
this.x=x;
}
}
参数和类的成员一样,用this.访问。
Passing Primitive Data Type Arguments
原始参数给方法传的时候传的是value。我把我的值给你,你改不改变和我没什么关系。
public class PassPrimitiveByValue {
public static void main(String[] args) {
int x = 3;
// invoke passMethod() with
// x as argument
passMethod(x);
// print x to see if its
// value has changed
System.out.println("After invoking passMethod, x = " + x);
}
// change parameter in passMethod()
public static void passMethod(int p) {
p = 10;
}
}
Passing Reference Data Type Arguments
引用数据类型,比如object,也是传value的,当这个方法返回的时候,引用的还是之前就引用的,只是值可以被改变如果访问等级合适的话。
public void moveCircle(Circle circle, int deltaX, int deltaY) {
// code to move origin of circle to x+deltaX, y+deltaY
circle.setX(circle.getX() + deltaX);
circle.setY(circle.getY() + deltaY);
// code to assign a new reference to circle
circle = new Circle(0, 0);
}
circle一开始指向myCircle,方法改变了myCircle的坐标值,这个改变是永久的。circle指向的对象已经更改,但是原来的mycircle指向的对象没有改变。