面向对象的三优点
- 封装 封装的意思就是属性封装在对象内部,提供方法访问来确保属性安全性
- 继承 继承是子类可以继承父类的方法和属性,来实现代码复用
- 多态 多态就是父类的引用指向子类的对象。这样做的好处就是可以消除类型之间的耦合关系,编译多态重载运行时多态重写
java的基本类型
- byte 大小为1字节
- boolean 大小为1字节
- char 大小为2字节,所以一个char是能存放一个汉字的
- int 大小为4字节,
- float 大小为4字节,
- double 大小为8字节
- long 大小为8字节
- string 不算基本单位,是一个不可变对象
java中整形默认是int,浮点数默认是double类型,所以 float a=0.8是错误的
String类型
String 是一个不可变类,class被final修饰不基础,属性被final修饰不可修改。所以String s+="a"这种操作=StringBuilder.append("a");String作为不可变类有以下几个优点
- 线程安全,每个线程操作都会返回新的对象
- 由于不可变对象的val不会变,导致hashcode也不会变,所以适合做为hash容器的key StringBuilder 由于String是一个不可变对象每次添加操作都会返回一个新对象,导致内存的浪费,所以由StringBuilder,它是有append的操作,来实现底层char数组的复用。
StringBuffer 和StringBuilder一样的,但是它是一个同步容器,方法被Synchornized关键字修饰
包装类
基本类型没有对象的特性,所以java提供了一些包装类,例如Integer,Double等。同时java也支持Integer A=10;int b=A; 这样的操作,这个是java提供的语法糖叫做装箱和拆箱,在代码编译的时候时候Integer A=Integer.of(10);int b=A.valueOf()。java为了提高效率,整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理。
异常体系
JAVA的异常分为2大类,Error(错误)和Exception(异常),它们2个都是Throwable的子类
error是不可以被抓catch的,当发现error的时候jvm会自动打印错误信息并退出.
exception是可以catch的,当我们手动catch后可以进行手动抛出或者进行异常屏蔽,exception又分为2大类。\
1 checkedException,在我编写代码的时候必须显示的写上try/catch代码块,比如SQLException, IOException
2 runtimeException,在运行的时候依然会出现的异常,比如OutOfMemoryError, IllegalArgumentException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等
hashcode和equals
hashcode 和 equalas都是Object的方法。当我们写自定义类的时候一般都需要重写这2个方法,为了能正常使用hash容器,比如hashMap或者hashSet
hashcode的默认实现是调用的object的hashcode,他是跟进线程当前状态生成的一个hashcode,并且保存在对象头部的markword中
equals的默认实现也是调用object的equals,比较的是对象地址,不符合我们的比较定义。
equals重写一般是要满足这3点
- 自反性 x.equals(x)=true
- 对称性 x.equals(y)=y.equals(x);
- 传递性 x.equals(y)=y.equals(z)==> x.equals(z)=y.equals(z);