image.png
详细版脑图


简单的定义类及使用类示例

  1. import java.time.LocalDate;
  2. /**
  3. * 测试类,专门用于测试
  4. */
  5. public class Test {
  6. public static void main(String[] args) {
  7. // 构造一个新的Dog类对象(或者可以说创建一个Dog类的实例),aDog就是对象变量,存储着新构建Dog对象的地址(引用)
  8. Dog aDog = new Dog();
  9. // 调用类的方法来修改实例域
  10. aDog.setColor("black");
  11. aDog.setMasterName("YangYang");
  12. aDog.setType(1);
  13. System.out.println(aDog.getColor());
  14. // 构造另一个Dog类对象
  15. Dog anotherDog = new Dog("yellow", 60.5, "洋洋", 1);
  16. System.out.println(anotherDog.getColor());
  17. }
  18. }
  19. /**
  20. * 定义一个类 ———— 狗
  21. */
  22. class Dog {
  23. /**
  24. * 描述:狗的颜色(类的域)
  25. * 修饰符:private修饰,表示私有,只有Dog类的实例(即构造的对象)才能够访问(封装、对外隐藏)
  26. *
  27. */
  28. private String color;
  29. /**
  30. * 狗主人的名字
  31. */
  32. private String masterName;
  33. /**
  34. * 狗的品种,1:金毛 2:拉布拉多 3:泰迪 4:哈士奇
  35. */
  36. private Integer type;
  37. /**
  38. * 初始化的时间
  39. */
  40. private LocalDate createTime;
  41. /**
  42. * 最近的更新时间
  43. */
  44. private LocalDate updateTime;
  45. // 初始化块,在创建Dog类的实例的时候会执行(建议将初始化块放在域定义之后)
  46. {
  47. type = 1;
  48. }
  49. /**
  50. * 狗的ID【静态域】
  51. */
  52. public static int id = 0;
  53. /**
  54. * 狗有四只脚【静态常量】(静态常量一般全大写,通过下划线_分割每个字符)
  55. */
  56. public static final int FEET_NUM = 4;
  57. // 静态初始化块,在第一次加载类时会触发
  58. static {
  59. id = 1;
  60. }
  61. /**
  62. * 构造方法,名称与类名相同,使用new Dog()时调用的就是这个方法
  63. */
  64. public Dog() {}
  65. /**
  66. * (带参)构造方法,名称也与类名相同,使用new Dog("red", 120, "洋洋", 1)时调用的就是这个方法
  67. * 重载相关的描述:这里构造器Dog其实使用了Java重载的特性,才能有多个相同名称,但不同参数(类型)组合的构造器
  68. */
  69. public Dog(String color, Double size, String masterName, Integer type) {
  70. this.color = color;
  71. this.masterName = masterName;
  72. this.type = type;
  73. this.createTime = LocalDate.now();
  74. // 直接将createTime的引用赋值给updateTime,减少重复构建对象
  75. this.updateTime = this.createTime;
  76. }
  77. /**
  78. * 狗的id是否大于0【静态方法】(只能够访问静态域或静态常量)
  79. */
  80. public static boolean dogIdBiggerThanZero() {
  81. // 访问非静态域/非静态常量,无法执行
  82. // String masterName = this.masterName;
  83. // 但可以访问静态常量和静态域
  84. int feetNum = FEET_NUM;
  85. return id > 0;
  86. }
  87. /**
  88. * 定义类的方法,用于Dog类的实例(即构造的对象)获取内部数据或修改内部数据
  89. * 如:getColor方法用于获取颜色(访问器方法),setColor用于修改颜色(更改器方法)
  90. * 其中setColor后面括号包含的color即为显示参数,方法内的this.color即为隐士参数
  91. */
  92. public String getColor() {
  93. return this.color;
  94. }
  95. public void setColor(String color) {
  96. this.color = color;
  97. }
  98. public String getMasterName() {
  99. return this.masterName;
  100. }
  101. public void setMasterName(String masterName) {
  102. this.masterName = masterName;
  103. }
  104. public Integer getType() {
  105. return this.type;
  106. }
  107. public void setType(Integer type) {
  108. this.type = type;
  109. }
  110. }

提问环节

  1. Java8新的时间类与旧的Date类有什么区别?
  2. 创一个类的实例的过程中,在Java虚拟机中(JVM)到底发生了什么?
    1. 参考JVM内存区域与内存溢出内容
    2. 更多参考
  3. 几种访问权限详解?它们之间到底有什么差别?
    1. 菜鸟教程 | Java修饰符描述的比较详细了
  4. 类中的静态域、静态常量、静态方法是在类第一次加载的时候会触发,那么什么时候会进行类的第一次加载?
    1. 参考JVM类的加载实际与记载过程
  5. 超类Object到底是一个怎么样的类?它底层又是如何实现的?
    1. 链接