0402-对象和类(访问器 更改器 日期类)
OOP:面向对象程序设计
类:构造对象的模板或蓝图
类构造对象的过程称为创建类的实例
封装:对外隐藏数据的真实实现方式,提供简单的方法 (类比方向盘)
对象:本质上是内存中的一小块空间
识别类:不同的类有不同的特征
预定义类:Java提供的各类方法
构造器(构造方法):new的时候调用的那个方法;与类名完全一致
Date类:
new Date()
LocalDate类:
LocalDate.now() 创建新对象
LocalDate.of(1999,12,31) 指定创建特定日期
getYear() getMonthValue() getDayOfMonth()
更改器(能够做修改)与访问器(访问数据):
package 第四章对象和类;
import java.time.LocalDate;
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
// LocalDate.now();
// LocalDate newYear=LocalDate.of(2004, 3, 6);
// System.out.println(newYear);
// int year=newYear.getYear();
// System.out.println(year);
// int month=newYear.getMonthValue();
// System.out.println(month);
// int day=newYear.getDayOfMonth();
// System.out.println(day);
Person xx=new Person();
// xx.flag1=10;
// System.out.println(xx.flag1);
// //xx.flag2??
// xx.setFlag2(30);
System.out.println(Arrays.toString(xx.getFlag3()));
int[] arr=xx.getFlag3();
arr[0]=111;
arr[1]=222;
System.out.println(Arrays.toString(xx.getFlag3()));//,flag3没有提供更改器,但会将flag3更改
//
}
}
package 第四章对象和类;
public class Person {
// public int flag1;//所有的类都可以访问到
// private int flag2=130184;//只能在当前的类访问
//想要访问private可以通过访问器
//访问器
// public int getFlag2() {
// return flag2;
// }
//更改器 能够修改
// public void setFlag2(int flag2) {
// //当前对象
// this.flag2=flag2;
// }
private int[] flag3= {1,2,3,4};
//引用类型默认的访问器和更改器不安全:会暴露地址
public int[] getFlag3() {
//默认访问器:浅拷贝
// return flag3;
//安全写法:深拷贝
int[] temp=new int[flag3.length];
for(int i=0;i<flag3.length;i++) {
temp[i]=flag3[i];
}
return temp;
}
private String flag4="hello";
//安全:因为字符串不可变,即使暴露了也没关系
public String getFlag4() {
return flag4;
}
}
LocalDate类:日历
package 第四章对象和类;
import java.time.DayOfWeek;
import java.time.LocalDate;
public class CalendarTest {
public static void main(String[] args) {
//打印当前月份的日历
// 获取当前日期
LocalDate date=LocalDate.now();
// 获取当前月份
int month=date.getMonthValue();
// 获取今天是几号
int today=date.getDayOfMonth();
// 将日期设置为当月第一天(减去今天的天数-1)
date=date.minusDays(today-1);
// 获取当月第一天是星期几
DayOfWeek weekday=date.getDayOfWeek();
// 获取星期几对应的数值(1=星期一,...,7=星期日)
int value=weekday.getValue();
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for(int i=1;i<value;i++)
System.out.println(" ");
// 循环打印当月所有日期
while(date.getMonthValue()==month) {
// 打印日期(右对齐,占3位)
System.out.printf("%3d",date.getDayOfMonth());
// 如果是今天,在日期后加*标记
if(date.getDayOfMonth()==today)
System.out.print("*");
else
System.out.print(" ");
// 日期加1天
date=date.plusDays(1);
// 如果是周日,换行
if(date.getDayOfWeek().getValue()==1)
System.out.println();
}
// 如果最后一天不是周日,换行
if(date.getDayOfWeek().getValue()!=1)
System.out.println();
}
}