观察几个类的设计之后,对面向对象编程思路有了更进一步的理解。
虽然类由成员变量和方法组成,且成员变量可以理解为对象的属性、方法可以理解为操纵属性的功能组合。但实际编程中不必太拘泥于此设计,类的设计可以理解为:变量+方法
变量分为:类共享的静态变量、对象独有的成员变量
变量都是为方法服务,如果某一方法需要一个变量实现功能,那么变量就可以直接写在类变量的位置,对象创建了成员变量就创建了。
虽然是类中,但完全可以类比成正常面向过程编程的顺序,抛开类的概念,变量就是变量,方法就是方法,只不过面向过程的变量是全局,面向对象的变量有一定限制。
public class TestTurnPrint {
public static void main(String[] args) {
WaitNotify wn= new WaitNotify(1,5);//多个线程共享这一份对象
new Thread(()->{
try {
wn.print("a",1,2);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{
try {
wn.print("b",2,3);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
new Thread(()->{
try {
wn.print("c",3,1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
}
}
/*
输出内容 等待标记 下一个标记
a 1 2
b 2 3
c 3 1
*/
class WaitNotify{
//等待标记
private int flag;
//循环次数
private int loopNumber;
//构造方法
public WaitNotify(int flag,int loopNumber){
this.flag=flag;
this.loopNumber=loopNumber;
}
//核心方法-打印
public void print(String str,int waitFlag,int nextFlag) throws InterruptedException {
for(int i=0;i<loopNumber;i++){
synchronized (this){
while(flag!=waitFlag){
this.wait();
}
System.out.println(str);
flag=nextFlag;
this.notifyAll();
}
}
}
}