Java菜鸟学习日记5

UML类图
UML:统一建模语言(Unified Modeling Language
在一个类中
属性表示这类事物的性质(描述它的数据)
方法表示这类事物的功能(用代码实现就意味着写流程)
Java菜鸟学习日记5
可见性
Java中默认的可见性是包内可见
private将可见性限制在本类内部,在类的外部,即使同一个包也不能访问
public将可见性完全放开,所有地方都可以访问
protected子类可见
可见性是语言编译器和JVM级别的,这些信息保存在类的源数据中。
类的源数据:
  • 类的全名
  • 类中的成员名
    • 如果是方法则包含参数/返回值等详细信息
  • 方法代码的位置(内存地址)
Java菜鸟学习日记5
程序启动
  • java/javaw——开始运行的时候(此时还没有调用main方法)
  • 加载类(class文件、字节码)并保存在代码区
  • 把类中的静态成员/数据初始化到静态区
  • 还会生成类的元素对象(在类的元数据区)
找到main方法并调用
  • 在栈(Stack)中会产生main方法的栈帧
  • Circle c = new Circle()
  • 会在堆(heap)区为c对象分配一块内存空间
  • 调用Circle的构造函数(没有定义会自动生成空构造)
    • 构造函数会初始化实例属性(没有指定值的话初始化为0)
  • 对象初始化完毕后,栈帧中会有一个局部变量c指向这个对象
实例属性和静态属性
实例属性:
  • 每个对象都有自己单独的一份实例属性,实例属性的数据保存在堆区。
  • 随着对象的创建而产生,可以随时创建。
  • 会随垃圾回收清理掉,从而释放它占据的内存空间。
静态属性:
  • 一个类只有一份静态属性,无论创建多少个对象,静态数据只有一份。静态数据存放在静态区。
  • 在类加载时被初始化,而类通常在启动时加载,通过反射才能在运行过程中加载。
  • 一旦加载就一直存在。
实例属性和实例方法
实例方法
在实例方法中访问实例属性,相当于this.属性名,(this可省略)
默认的上下文环境是this,也就是当前对象
在实例方法中可以访问静态属性,相当于类名.属性名(本类中类名可省略)
静态方法
在静态方法中,可以访问静态属性,相当于类名.属性名(在本类中类名可省略)
在静态方法中不能使用this,也就是不能访问实例属性。
构造方法(Constructor)
构造方法与类名相同
没有返回值
连void都没有
具有可见性
不写时,编译器默认生成一个无参构造方法
将所有实例属性初始化为0
如果程序编写了一个构造方法,则不再自动生成构造方法
无参构造方法
无参构造方法可以方便地创建对象无论是人工创建还是通过反射创建都很方便
无参构造方法创建的对象,属性值为该参数的默认值、
通常在使用之前还需要再次给属性赋一个有用的值
在java中有一个概念---bean
bean类要求有一个无参构造方法
可以使用工具自动创建对象
Java菜鸟学习日记5
Getter/Setter 访问器方法
目的是不让属性直接暴露出来,而是通过方法(getter/setter)间接的访问属性
好处是
  • 可以控制只读,只写
  • 还可以在赋值时进行转换、验证等操作
  • 可以在获取值时,可以进行转换或修改
继承
Java菜鸟学习日记5
没有指定父类,默认都从Object类继承
使用extends关键字可以指定父类
如果要覆盖或重写父类的方法,最好标记@Override
注解(Annotation)
注解是可以附加到类元数据上的对象
反射是获取类元数据信息的编程接口
在继承体系中,子类可以通过super关键字访问父类
super();=调用父类构造方法
super.属性名=调用父类属性
this();=调用本类构造方法
this.属性名=调用本类属性
抽象(abstract)
抽象类
不需要实例化,只为继承而存在
可以有抽象方法与非抽象方法
抽象方法
必须放在抽象类中
不为调用,只为继承
没有方法体
只能放在抽象类中
运用抽象类,继承等方法写程序
Java菜鸟学习日记5
该UML图为构思设计