静态块
给静态变量赋值,同时无法一行代码完成,这时通常用静态块
JAVA规范:凡是表示种类或情况的int型参数,该类中一般都会有对应的常量定义,一般用常量
浅拷贝与深拷贝
浅拷贝传递引用,不能复制实例
深拷贝创建新实例,复制实例
package day14;
import java.util.Calendar;
public class MyDate {
private int year,month,day;
private static int thisYear;
static{//静态块--给静态变量赋值,同时无法一行代码完成,这时通常用静态块
// Calendar c=new Calendar();//错:权限+抽象
Calendar c=Calendar.getInstance();
//JAVA规范:凡是表示种类或情况的int型参数,该类中一般都会有对应的常量定义,一般用常量
thisYear=c.get(Calendar.YEAR);//Calendar.YEAR=1
}
public MyDate() {
this(0,0,0);
}
public MyDate(MyDate d) {
this(d.year,d.month,d.day);
}
public MyDate(int year,int month,int day) {
set(year, month, day);
}
public static int getThisYear(){
return thisYear;
}
public static void setThisYear(int year){
thisYear=year;
}
public void set(int year,int month,int day){
// new MyDate(year, month, day);//STACK_OVERLOW:无穷递归,栈溢出
this.setYear(year);
setMonth(month);
setDay(day);
}
public int getYear() {
return year;
}
public void setYear(int year) {
this.year = year;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public int getDay() {
return day;
}
public void setDay(int day) {
this.day = day;
}
@Override
public String toString() {
return "year=" + year + ",month=" + month + ",day="+ day;
}
}
package day14;
public class Person {
String name;//基本数据类型
private MyDate bithday;//引用数据类型
public Person(String name, MyDate bithday) {
this.name=name;
// this.bithday=bithday;//浅拷贝
this.bithday=new MyDate(bithday);//深拷贝
}
public Person() {
this("noName",null);
}
public Person(Person p) {
this(p.name,p.bithday);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MyDate getBithday() {
return bithday;
}
public void setBithday(MyDate bithday) {
this.bithday = bithday;
}
@Override
public String toString() {
return "name=" + name + ", " + bithday;//这里会调用MyDate的toString();
}
}
package day14;
public class MyDateEx {
public static void main(String[] args) {
System.out.println(MyDate.getThisYear());//2016
//法一:
// MyDate d1=new MyDate(1996, 10, 11);
// Person p=new Person("小明",d1);
//法二:
Person p=new Person("小明",new MyDate(1996, 10, 11));//匿名对象--只要数据
System.out.println(p);//name=小明, year=1996,month=11,day=10
Person p2=new Person(p);
p2.setName("张三");
System.out.println(p2);//name=张三, year=1996,month=10,day=11
System.out.println(p);//name=小明, year=1996,month=11,day=10
p2.getBithday().setYear(2000);
System.out.println(p2);//name=张三, year=2000,month=10,day=11
System.out.println(p);
//浅拷贝:name=小明, year=2000,month=10,day=11-->深拷贝:name=小明, year=1996,month=11,day=10
}
}