详细版脑图
简单的定义类及使用类示例
import java.time.LocalDate;
/**
* 测试类,专门用于测试
*/
public class Test {
public static void main(String[] args) {
// 构造一个新的Dog类对象(或者可以说创建一个Dog类的实例),aDog就是对象变量,存储着新构建Dog对象的地址(引用)
Dog aDog = new Dog();
// 调用类的方法来修改实例域
aDog.setColor("black");
aDog.setMasterName("YangYang");
aDog.setType(1);
System.out.println(aDog.getColor());
// 构造另一个Dog类对象
Dog anotherDog = new Dog("yellow", 60.5, "洋洋", 1);
System.out.println(anotherDog.getColor());
}
}
/**
* 定义一个类 ———— 狗
*/
class Dog {
/**
* 描述:狗的颜色(类的域)
* 修饰符:private修饰,表示私有,只有Dog类的实例(即构造的对象)才能够访问(封装、对外隐藏)
*
*/
private String color;
/**
* 狗主人的名字
*/
private String masterName;
/**
* 狗的品种,1:金毛 2:拉布拉多 3:泰迪 4:哈士奇
*/
private Integer type;
/**
* 初始化的时间
*/
private LocalDate createTime;
/**
* 最近的更新时间
*/
private LocalDate updateTime;
// 初始化块,在创建Dog类的实例的时候会执行(建议将初始化块放在域定义之后)
{
type = 1;
}
/**
* 狗的ID【静态域】
*/
public static int id = 0;
/**
* 狗有四只脚【静态常量】(静态常量一般全大写,通过下划线_分割每个字符)
*/
public static final int FEET_NUM = 4;
// 静态初始化块,在第一次加载类时会触发
static {
id = 1;
}
/**
* 构造方法,名称与类名相同,使用new Dog()时调用的就是这个方法
*/
public Dog() {}
/**
* (带参)构造方法,名称也与类名相同,使用new Dog("red", 120, "洋洋", 1)时调用的就是这个方法
* 重载相关的描述:这里构造器Dog其实使用了Java重载的特性,才能有多个相同名称,但不同参数(类型)组合的构造器
*/
public Dog(String color, Double size, String masterName, Integer type) {
this.color = color;
this.masterName = masterName;
this.type = type;
this.createTime = LocalDate.now();
// 直接将createTime的引用赋值给updateTime,减少重复构建对象
this.updateTime = this.createTime;
}
/**
* 狗的id是否大于0【静态方法】(只能够访问静态域或静态常量)
*/
public static boolean dogIdBiggerThanZero() {
// 访问非静态域/非静态常量,无法执行
// String masterName = this.masterName;
// 但可以访问静态常量和静态域
int feetNum = FEET_NUM;
return id > 0;
}
/**
* 定义类的方法,用于Dog类的实例(即构造的对象)获取内部数据或修改内部数据
* 如:getColor方法用于获取颜色(访问器方法),setColor用于修改颜色(更改器方法)
* 其中setColor后面括号包含的color即为显示参数,方法内的this.color即为隐士参数
*/
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
public String getMasterName() {
return this.masterName;
}
public void setMasterName(String masterName) {
this.masterName = masterName;
}
public Integer getType() {
return this.type;
}
public void setType(Integer type) {
this.type = type;
}
}
提问环节
- Java8新的时间类与旧的Date类有什么区别?
- 创一个类的实例的过程中,在Java虚拟机中(JVM)到底发生了什么?
- 参考JVM内存区域与内存溢出内容
- 更多参考
- 几种访问权限详解?它们之间到底有什么差别?
- 菜鸟教程 | Java修饰符描述的比较详细了
- 类中的静态域、静态常量、静态方法是在类第一次加载的时候会触发,那么什么时候会进行类的第一次加载?
- 超类Object到底是一个怎么样的类?它底层又是如何实现的?