使用静态块的好处:只要在类被加载时,static块就会被调用,整个过程就调用这么一次,不会在后面的对象处又不断的调用。如果不使用它就会出现,new一个对象,我就要调用一次这些内容,重复被调用,从而增加开销。
这个程序就是用静态方法块,测试输入一个人的出生日期,判断是否在给定出生日期范围内出生,如果是就返回true,否则返回false。
package com.liaojianya.chapter5; import java.sql.Date; /** * This program will demonstrate the use of staticBlock. * @author LIAO JIANYA * */ public class StaticBlock { public static void main(String[] args) { Person1 p = new Person1(Date.valueOf("1998-11-12")); Person1 p1 = new Person1(Date.valueOf("1988-11-12")); System.out.println("Is this p born between 1980 and 1990:" + p.isBornBoomer()); System.out.println("Is this p1 born between 1980 and 1990:" + p1.isBornBoomer()); } } class Person1 { private Date birthDate; private static Date startDate, endDate; static { startDate = Date.valueOf("1980-01-11"); endDate = Date.valueOf("1990-01-11"); } public Person1(Date birthDate) { this.birthDate = birthDate; } boolean isBornBoomer() { return birthDate.compareTo(startDate) >= 0 && birthDate.compareTo(endDate) < 0; } }
结果显示:
Is this p born between 1980 and 1990:false Is this p1 born between 1980 and 1990:true
TIP:先前写这个程序的时候,遇到的问题就是在Person1 p = new Person1();l
这个时候,我尝试在括号里赋日期值,报各种错误,然后才发现需要用到一个java.lang.sql里的Date.valueOf("YYYY-MM-DD")格式,而不能直接赋一个数字年份。
查了一下API如下:
public static Date valueOf(String s)
将 JDBC 日期转义形式的字符串转换成 Date 值。
参数:
s - 表示 "yyyy-mm-dd" 形式的日期的 String 对象
返回:
表示给定日期的 java.sql.Date 对象
抛出:
IllegalArgumentException - 如果给定日期不是 JDBC 日期转义形式 (yyyy-mm-dd)。
时间: 2024-11-05 22:48:58