Java基础小结
1. 面向对象
面向对象 | 封装 | 实现业务的抽象,将相同的特征(属性和方法)封装成类 | |
访问控制(修饰符),隐匿实现细节 | public:包外可访问 | ||
protected:包内或子类可访问 | |||
default:仅包内访问 | |||
private:仅当前类可访问 | |||
继承 | 继承父类并扩展父类特征行为 | ||
接口与抽象类:一个类可以实现多个接口但只能继承一个抽象类 | |||
多态 | 存在的三个必要条件:继承、重写、父类引用指向子类对象 | 重载(编译时多态):同一个类中,方法名字相同,参数类型或个数不同,不关注返回值类型 | |
重写(运行时多态):子类对父类方法重写,返回值和参数类型相同 |
2. 数据类型
基础数据类型(byte short int long float double char boolean ) 和引用类(Byte Integer Long String Boolean) |
封装数据类型为引用类,提供类方法 |
equals与 == |
equals:可以重写equals方法,用于判断两个对象是否相同,不要求为同一个对象 ==:比较两个数值或引用变量是否相等,比较对象时判断两个对象是否为同一对象 |
引用类与基础数据类型相互转换时需要拆箱和装箱 | |||
引用类与基础数据类型大小和速度不同;引用类的默认值为null,int默认值为0 |
3. 静态关键字static
静态变量static:静态变量为类成员变量在类初始化时分配内存空间且仅分配一次,普通成员变量在类实例化时分配内存空间 | Java类初始化顺序 | 1. 父类静态成员和static块 | 静态初始化 |
2. 子类静态成员和static块 | |||
3. 父类普通成员和非static块 | 父类初始化 | ||
4. 父类构造函数 | |||
5. 子类普通成员变量和非static块 | 子类初始化 | ||
6. 子类构造函数 |
4. String相关操作
String StringBuffer StringBuilder |
执行速度:StringBuilder>StringBuffer>String(String为字符串常量,其他两个为字符串变量) | |
应用场景 | String适用于少量字符串操作 | |
StringBuffer适用于多线程大量字符串操作 | ||
StringBuilder适用于单线程大量字符串操作 | ||
StringBuilder非线程安全,StringBuffer线程安全 |
5. 反射
反射(java.lang.reflect):必须取得代表字节码的Class | Java中Class类 | Class类是描述类的类,封装了Method、Field、Constructor等属性,每个类都有一个不变的Classs类型对象 | |
所有的java类都继承了Object,Object的方法getclass()用来取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象 | |||
Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建,或通过类装载器中的 defineClass 方法生成 | |||
java反射是指在运行状态中,对于任何一个类都可以知道该类的所有属性和方法,这种动态的获取信息及调用对象的方式称为反射机制 | |||
获取Class对象的三种方式 | 1. Object--getClass(),通过已知对象获取 | ||
2. 任何数据类型(包括基本数据类型)都有一个静态的Class属性,通过类名.class获取 | |||
3. 通过Class类的静态方法:Class.forName(String className) | |||
Class.forName()与ClassLoader:两者均可用于对类进行加载 | Class.forName(ClassName); | Class.forName除将class文件加载到jvm中外,还会对类进行解释,执行类中的static块 | |
ClassLoader loader = ClassLoader.getSystemClassLoader(); Class class = loader.loadClass(ClassName); | classloader仅将class文件加载到jvm中,static中的内容只有在实例化(newinstance)时才会执行 |
6. 异常
异常(Throwable顶层父类) | Error(无法被处理的错误,如内存溢出)和Exception(可以被程序处理的错误);除了Error和RuntimeException外的异常均为被检查的异常(CheckedException,编译异常) | |
try catch finally |throw | 无论是否有异常,finally中的代码一定会被执行 | |
finally代码块中最好不要包含return,程序正常执行时finally中return会在try catch中return前面执行 |
7. final|finally|finalize对比
final:修饰成员变量类和方法,被修饰的成员变量不可改变,方法不能被重写,类不能被继承 |
finally:异常处理关键字 |
finalize:用于类的回收,但不保证垃圾回收器的调用时间,也不保证执行顺序,不常用 |