例:
分别计算多个类中,完成不同任务所需要的时间,
AA类 计算1+…+1000000所花的时间
BB类 计算1*…500000的时间
…
思路:在两个类中分别通过 结束时间-开始时间 去计算不同类完成某工作的时间
public class AA {
public static void main(String[] args) {
long start = System.currentTimeMillis();//获取当前时间
long sum = 0;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
long end = System.currentTimeMillis();
System.out.println("AA 所花的时间 "+(end - start));
}
}
public class BB {
public static void main(String[] args) {
long start = System.currentTimeMillis();//获取当前时间
long sum = 0;
for (long i = 0; i < 500000; i++) {
sum *= i;
}
long end = System.currentTimeMillis();
System.out.println("BB 所花的时间 "+(end - start));
}
}
以上解法,可以看出方法比较繁琐,两个类中有共同的语句了,所以,我们可以通过将主要的计算方法单独包装成一个方法,然后再用的时候去调用即可,优化后代码:
public class AA {
public static void main(String[] args) {
long start = System.currentTimeMillis();//获取当前时间
work();
long end = System.currentTimeMillis();
System.out.println("AA 所花的时间 "+(end - start));
}
//将主要计算功能单独成一个方法,然后在main方法中去调用即可
public static void work(){
long sum = 0;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
}
}
public class BB {
public static void main(String[] args) {
long start = System.currentTimeMillis();//获取当前时间
work();
long end = System.currentTimeMillis();
System.out.println("BB 所花的时间 "+(end - start));
}
//将主要计算功能单独成一个方法,然后在main方法中去调用即可
public static void work(){
long sum = 0;
for (long i = 0; i < 500000; i++) {
sum *= i;
}
}
}
以上方法明显比第一个简单一点,但是还是比较繁琐,要是当要计算的类比较多的时候,这样写也是很繁琐的,所以,通过以上代码我们可以看出来,不同类的基本结构都是一样的,都是先获取开始时间,然后运行功能方法,运行完后获取结束的时间,然后用结束时间去 - 开始时间 ,这样就可以获得类完成功能的时间,所以,我们可以将具体的功能方法封装成一个abstract抽象方法,子类具体去实现,然后将时间具体时间也给封装成一个方法。
优化后的代码
public class AA extends Template {
//将主要计算功能单独成一个方法,然后在main方法中去调用即可
public void work(){
long sum = 0;
for (long i = 0; i < 1000000; i++) {
sum += i;
}
}
}
public class BB extends Template{
//将主要计算功能单独成一个方法,然后在main方法中去调用即可
public void work(){
long sum = 0;
for (long i = 0; i < 500000; i++) {
sum *= i;
}
}
}
public abstract class Template {
public abstract void work();//定义一个抽象的方法,利用子类去重写
public void calculateTime(){//编写一个计算时间的方法去计算时间
long start = System.currentTimeMillis();//获取当前时间
work();
long end = System.currentTimeMillis();//获取结束时间
System.out.println("执行时间:"+(end - start));
}
}
public class Abstract04 {
public static void main(String[] args) {
new AA().calculateTime();
new BB().calculateTime();
}
}