2.1. 对象交互
如何识别对象?例如
设计一个显示类从0递增到极限复0
package clock;
public class Display {
private int value=0;
private int limit=0;
public Display(int limit) {
// TODO Auto-generated constructor stub
this.limit=limit;
}
public void increase() {
value++;
if(value==limit) {
value =0;
}
}
public int getValue() {
return value;
}
public static void main(String[] args) {
Display d=new Display(24);
for( ; ;) {
d.increase();
System.out.println(d.getValue()); }
}
}
public class clock {
private Display hour=new Display(24);
private Display minute=new Display(60);
public void start() {
while(true) {
minute.increase();
if (minute.getValue()==0) {
hour.increase();
}
System.out.printf("%02d:%02d\n",hour.getValue(),minute.getValue());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
clock c=new clock();
c.start();
}
}
2.2. 访问属性
private:私有属性,只有这个类内部可以访问。类内部指类的成员函数和定义初始化;这个限制是对类的而不是对对象的
public:任何人都可以访问。任何人指的是在任何类的函数或定义初始化中可以使用;使用指的是调用、访问或定义变量
一个编译文件(.Java文件)是一个编译单元
2.3. 类变量
static函数只能调用static函数,只能调用static变量。
static修饰的变量只会在类进入到程序时(类加载时)进行初始化,static对象的初始化和对象的创建没关系
3. 练习
有秒计时的数字时钟
()
在上文的基础上我们需要给时钟程序加上一个表示秒的Display,然后为Clock增加以下public的成员函数:
public Clock(int hour, int minute, int second);
用hour, minute和second初始化时间。
public void tick();
“嘀嗒”一下,时间走1秒。
public String toString();
返回一个String的值,以“hh:mm:ss“的形式表示当前时间。这里每个数值都占据两位,不足两位时补0。如“00:01:22"。注意其中的冒号是西文的,不是中文的。
class Display {
private int value=0;
private int limit=0;
public Display(int limit) {
// TODO Auto-generated constructor stub
this.limit=limit;
}
public void increase() {
value++;
if(value==limit) {
value =0;
}
}
public int getValue() {
return value;
}
public void setValue(int v) {
value=v;
}
}
class Clock {
private Display hour=new Display(24);
private Display minute=new Display(60);
private Display second=new Display(60);
public String toString() {
String h=hour.getValue()<10?"0"+hour.getValue():String.valueOf(hour.getValue());
String m=minute.getValue()<10?"0"+minute.getValue():String.valueOf(minute.getValue());
String s=second.getValue()<10?"0"+second.getValue():String.valueOf(second.getValue());
return h+":"+m+":"+s;
}
public void start() {
minute.increase();
if (minute.getValue()==0) {
hour.increase();
}
}
public void tick() {
second.increase();
if (second.getValue()==0) {
start();
}
}
public Clock(int h,int m,int s) {
// TODO Auto-generated constructor stub
int tempH=h>23?h%24:h;
hour.setValue(tempH);
if (m>59) {
minute.setValue(m%60);
hour.increase();
}else{
minute.setValue(m);
}
if (s>59) {
second.setValue(s%60);
start();
} else {
second.setValue(s);
}
toString();
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
java.util.Scanner in = new java.util.Scanner(System.in);
Clock clock = new Clock(in.nextInt(), in.nextInt(), in.nextInt());
clock.tick();
System.out.println(clock);
in.close();
}
}