第七课JDK的使用3

二、java.util包的常用类

  除了java.lang之外,JDK中还有一个常用的包是java.util。我们之前用过的Random类就出自这个包。我们再继续介绍java.util包里的常用类。我们可以在JDK help里看一下这个包有哪些内容,也可以看下面这张总结图:

4. Random

  Random类是产生随机数的类,一般用法是:

    Random rand = new Random();    int i = rand.nextInt(100); // 产生一个0~99的整数。

  还可以使用rand.nextFloat方法产生一个大于等于0小于1的浮点数。

5. Calendar

  Calendar类则是日历类,用于获得当前的日期与时间,它是一个抽象类,只能通过它的静态方法getInstance来创建对象。可以用String.format格式化转化为日期时间字符串,还可以使用SimpleDateFormat获得更丰富的时间格式化字符表示。例如:

    Calendar now = Calendar.getInstance();  // 获得当前日期与时间    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss E");    System.out.println(sdf.format(now.getTime())));

  这里用SimpleDateFormat将Date对象格式化为“年-月-日 时:分:秒 星期”的形式。SimpleDateFormat还有很多种不同格式,具体大家可以查找JDK help。

  Calendar类还提供了许多对时间进行运算的方法,比如改变时间值里某个域的值:

    Calendar now = Calendar.getInstance();    System.out.println(String.format("%tF", now));    now.set(Calendar.YEAR, 2011);         // 将年份改为2011年    now.set(Calendar.MONTH, 7);           // 将月份改为8月,序号是从0开始(不知道是什么脑残设计的)    now.set(Calendar.DAY_OF_MONTH, 48);   // 将日期改为月份开始后的第48天    System.out.println(String.format("%tF", now));

运行结果为:

  上面代码中,日期部分给的是48天,程序赋值时是天数往后顺延,因此成了9月。还可以调用set方法的重载形式来完整地指定时间,如下:

    Calendar now = Calendar.getInstance();    now.set(2011, 8, 17, 4, 8, 0);    System.out.println(String.format("%tF %1$tT", now));

运行输出结果为:2011-9-17 04:08:00

  Calendar类中还用get方法来得到某一个时间域的值,如get(Calendar.DAY_OF_WEEK)返回星期几(注意1是星期日,7是星期六),还提供了对日期时间进行比较的after、before方法等。对日期时间进行操作的方法都要在这个类中去查找。

  除了Calendar类之外还有一个Date类也是日期时间的类,同学们自己找资料的时候可能会看到这个类。但是Java官方推荐用Calendar来代替Date。Calendar类提供了getTime方法将Calendar对象转换成Date对象,也有setTime方法接受Date对象的赋值。

6. Timer与TimerTask

  Timer是一个定时器类,可以在指定时间之后执行一次或每隔指定时间都执行一次任务。使用Timer定时需要配合TimerTask类使用,这是一个实现了Runnalbe接口的抽象类,使用时要继承TimerTask并重写其run方法,定时器设定后启动一个线程,并在这个线程中执行run方法中的代码。示例如下:

Timer timer = new Timer();TimerTask task = new TimerTask() {  // 用匿名类继承TimerTask并重写run方法    @Override    public void run() {        // 工作代码    }};timer.schedule(task, 0, 1000);      // 立即启动定时器,并每隔1000毫秒执行一次

  我们现在可以用Timer类来再次实现前面的时钟显示功能,代码如下:

import android.widget.TextView;import java.util.*;import android.os.*;
public class MainActivity extends AppCompatActivity { private TextView txtResult;
private Handler handler = new Handler(){ // 匿名类继承Handler类并重写其handleMessage方法,并创建对象 @Override public void handleMessage(Message msg) { txtResult.setText(String.format("%tT", Calendar.getInstance())); //在主线程中对文本进行操作,显示当前时间 } };
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
txtResult = (TextView)findViewById(R.id.txtResult); Timer timer = new Timer(); TimerTask task = new MyTimerTask(handler); timer.schedule(task, 0, 1000);/**/ }}
class MyTimerTask extends TimerTask { private Handler handler;
public MyTimerTask(Handler handler){ this.handler = handler; }
@Override public void run() { Message meg = new Message(); handler.sendMessage(meg); }}

  用定时器来实现时钟可以给程序在时间的设定上带来更多的灵活性。


第一季 零基础学习Android开发

第一课 第一个Android程序(1)

第一课 第一个Android程序(2)

第二课 Java语言基础1(1)

第二课 Java语言基础1(2)

第三课 Java语言基础2-1

第三课 Java语言基础2-2

第四课 Java语言基础3-1

第四课 Java语言基础3-2

第五课 类与面向对象编程1

第五课 类与面向对象编程1-2

第五课 类与面向对象编程1-3

第六课 类与面向对象编程2-1

第六课 类与面向对象编程2-2

第六课 类与面向对象编程2-3


文章转载自微信公众号:跟陶叔学编程

类似文章