面向对象的概念
什么是类
同时将具有相同特征的对象抽象成一种新的数据类型—-类
(具有相同特征和行为的多个对象的集合)
封装的好处
一个类把属性算法(逻辑处理)封装起来,只留必要的方法(接口)让用户使用,一个类该暴露什么,不该暴露什么,由类的设计者更具需求设计决定的.private 属性用户不能直接访问,如果设计者提供相应的接口方法,那么用户可以通过该接口方法访问.
一个类,不直接修改属性而通过方法来修改,可以在方法里做相应的处理避免用户输入的一些非法数据而造成系统故障
什么是构造方法
- 构造方法是与类同名的方法
- 没返回值,也不能写 void
- 主要作用是完成新建对象的初始化工作
- 一般不能显式地直接调用,而是用 new 来调用(后面会存在使用 this/super 调用)
- 创建一个类的新对象的同时,系统自动调用该类的构造函数,为新建对象的初始化
构造方法重载
- 构造方法是一种特殊的方法,它也能重载
- 构造函数的重载是指同一个类中存在着若干个具有不同参数列表的构造函数
this 关键字
this 用于表示当前对象自身的引用,可以用于访问被局部变量隐藏的成员变量,也可以将本对象作为参数传递给其他对象操作
类初始化代码块 static
static 代码块的执行时机
- 用 Class.forName(类名)显式加载的时候(反射、JDBC 时详细讲解)
- new 或反射实例化一个类的对象时候
- 调用类的 static 方法的时候(后续详细讲解)
- 调用类的 static 变量的时候(后续详细讲解)
- 调用类的静态常量(后续详细讲解)的时候,是不会加载类的,即不会执行 static{}语句块当访问类的静态常量时,如果编译器可以计算出常量的值,则不会加载类,否则会加载类
- 用 Class.forName()形式的时候,也可以自己设定要不要加载类,如将
Class.forName("Test")改为Class.forName("Test",false,StaticBlockTest.class.getClassLoader()),你会发现 Test 没有被加载,static{}没有被执行