第二章:对象与类
类
- 通俗说类就是构造对象的模板或蓝图。
类之间的关系:
- 依赖:如果一个类的方法使用或操纵另一个类的对象,那么就是这个类依赖另一个类,应该把类之间的依赖尽可能的减少。
- 聚合:一个order对象里包含若干个item对象
- 继承:通过扩展一个类来建立另外一个类的过程叫做继承
封装
- 将数据和行为组合在一个包中,并对对象的使用者隐藏具体的实现方式。按照我的理解,就是把类封成一个黑盒子,只暴漏有限的特定功能。而使用者也不需要关心这个类是怎么实现的,只需要调用他暴露出来的特定功能即可。
对象
三个主要特性
- 行为或方法(action):可以对对象完成什么操作,或者对对象应用什么方法
- 状态或属性(attr):调用对象的方法时,对象会进行什么样的响应。
- 标识(flag):如何区分具有形同行为与状态的不同对象
打印日历
//指明属于哪个软件包
package com.shuaige.Person;
//引入相关的类
import java.time.DayOfWeek;
import java.time.LocalDate;
class Test2{
public static void main(String[] args) {
// 声明一个日期对象
LocalDate date = LocalDate.now();
// 获取月份
int month = date.getMonthValue();
// 获取天
int today = date.getDayOfMonth();
// minusDays 生成当前日期-x天的日期
date = date.minusDays(today - 1);
// getDayOfWeek 返回星期几,比如星期三就是MONDAY,返回值是大写
DayOfWeek weekday = date.getDayOfWeek();
// 这里的getValue 会返回1,因为此处的date是2022-08-01,而1号是星期一,所以getValue返回的就是1
int value = weekday.getValue();
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for (int i = 1; i <value ; i++) {
System.out.print("");
}
// 如果月份是8月份的话,就进入while循环
while (date.getMonthValue() == month){
// 打印日期,
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();
}
}
}
}
类的结构
基本的类结构
class demoClass{
private name;//私有属性
public demoClass(){
//构造器,可以有参数,可以无参数,一般都写两个构造器,一个有参数的,一个没有参数的,
//构造器必须与类同名,
//并且没有返回值,
//构造器总是跟new一起使用
}
//类的方法
public String getName(){
return name;
}
}
静态字段和静态方法
- 如果将一个字段修饰为static字段,那么每个类中就只有这样一个字段,而非静态的,则类的每个实例都会有这一个字段的副本,
- 静态常量:就是不可修改的常量
对象构造
-
方法的重载
定义:
-
在同一个类中,定义了多个同名方法,这些同名的方法具有同样的功能
-
每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
注意:与返回值无关
-
-
方法得重写
- 书写格式:跟他要重写得方法一样就行。
- @Override重写注解:
- @override是放在重写后得方法上,检验子类重写时语法是否正确
- 加上注解后如果有红色波浪线,就表示语法错误
- 只有在虚方法表里得方法才可以被重写,虚方法不包括:private的方法,static的方法,final的方法
类设计技巧
- 一定要保证数据私有
- 一定要对数据进行初始化
- 不要在类中使用过多的基本类型
- 不是所有的字段都需要单独的字段访问器和字段更改器
- 分解有过多职责的类,就是过于臃肿的类
- 优先使用不可变的类
第二章完,其实少了一部分内容,但是嘞,感觉并不是那么特别需要做笔记。还是等下一次重读的时候再说吧!