1.解释
-Java中的成员分为两种:实例成员和静态成员。使用关键字static声明的成员成为静态成员,否则为实例成员;
- 实例成员属于对象,创建了实例后才能通过对象访问实例成员变量和调用实例成员方法;
- 静态成员属于类,即使没有创建实例,也可通过雷鸣访问静态成员变量和调用静态成员方法;
2.注意
- 在类内部可以直接访问静态成员,省略类名。静态成员也可以通过对象引用。在静态成员方法体重,不能访问实例成员,不能使用this引用;
- 在声明时可对静态成员变量赋值,也可使用static声明静态初始化块,对静态成员变量进行初始化,语法格式如下:
static
{
静态成员变量初始化;
}
3.使用
package EqualTest;
public class MyDateB {
private int year,month,day;
private static int thisYear;
static
{
thisYear=2015;
}
public MyDateB(int year,int month,int day)
{
this.set(year,month,day);
}
public MyDateB()
{
this(2000,7,5);
}
public MyDateB(MyDateB d)
{
this.set(d);
}
public void set(int year,int month,int day)
{
this.year=year;
this.month=(month>=1&&month<=12)?month:1;
this.day=(day>=1&&day<=31)?day:1;
}
public void set(MyDateB d)
{
set(d.year,d.month,d.day);
}
public int getYear()
{
return this.year;
}
public int getMonth()
{
return this.month;
}
public int getDay()
{
return this.day;
}
public String toString()
{
return year+"年"+String.format("%02d", month)+"月"+String.format("%02d",day)+"日";
}
public static int getThisYear()
{
return thisYear;
}
public static boolean isLeapYear(int year)
{
return year%400==0||year%100!=0&&year%4==0;
}
public boolean isLeapYear()
{
return isLeapYear(this.year);
}
public boolean equals(MyDateB d)
{
return this==d||d!=null&&this.day==d.day&&this.month==d.month&&this.year==d.year;
}
public static int daysOfMonth(int year,int month)
{
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
return 31;
case 4:case 6:case 9:case 11:
return 30;
case 2:
return MyDateB.isLeapYear(year)?29:28;
default:
return 0;
}
}
public int daysOfMonth()
{
return daysOfMonth(this.year,this.month);}
public void tomorrow()
{
this.day++;
if(this.day>this.daysOfMonth())
{
this.day=1;
this.month++;
if(this.month>12)
{
this.month=1;
this.year++;
}
}
}
public MyDateB yesterday()
{
MyDateB date=new MyDateB(this);
date.day--;
if(date.day==0)
{
date.month--;
if(date.month==0)
{
date.month=12;
date.year--;
}
date.day=daysOfMonth(date.year,date.month);
}
return date;
}
public static void main(String[] args)
{
System.out.println("今年是"+MyDateB.getThisYear()+",闰年?"
+MyDateB.isLeapYear(MyDateB.getThisYear()));
MyDateB d1=new MyDateB(2016,7,5);
MyDateB d2=new MyDateB(d1);
MyDateB d3=new MyDateB();
System.out.println("今年是"+d1.getYear()+",闰年?"
+d1.isLeapYear());
System.out.println("今年是"+d3.getYear()+",闰年?"
+d3.isLeapYear());
System.out.println("d1:"+d1+",d2:"+d2+",d1==d2?"+(d1==d2)+",d1.equals(d2)?"+d1.equals(d2));
System.out.println(d1+"的明天是");
d1.tomorrow();
System.out.println(d1+"\n"+d1+"的昨天是"+(d2=d1.yesterday()));
}
}
解释:
1.访问静态成员获得年份:
System.out.println("今年是"+MyDateB.getThisYear()+",闰年?"
+MyDateB.isLeapYear(MyDateB.getThisYear()));
getThisYear()为定义的获得年份的静态方法,返回静态成员初始化中的静态变量2015;
MyDateB.isLeapYear(MyDateB.getThisYear())通过类名调用静态成员方法isLeapYear();
2.调用拷贝构造方法复制实例
MyDateB d1=new MyDateB(2016,7,5);
MyDateB d2=new MyDateB(d1);
3.调用无参数的构造方法
MyDateB d3=new MyDateB();
4.通过对象调用实例成员方法
System.out.println("今年是"+d1.getYear()+",闰年?"
+d1.isLeapYear());
5.调用无参数构造方法,指定默认日期
System.out.println("今年是"+d3.getYear()+",闰年?"
+d3.isLeapYear());