java内存:
堆
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
栈
存放基本变量类型(包含这个基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面的具体地址)
方法区
可以被所有线程共享
包含了所有class和static变量
数组分静态和动态两种创建方式
数组的四个特点:
长度是确定的,一旦创建大小不可以改变
元素类型必须相同
元素可以是任何数据类型,包括基本类型和引用类型
数组变量属于引用类型,可以看成是对象,每个元素相当于是成员变量,
数组对象本身也在堆中
常用功能:
fill 给数组赋值
sort 给数组排序
equals 比较数组中的元素值是否相等
binarySearch 查找数组元素,用二分查找法
必须和类的名字相同
必须没有返回类型,也不能写void
为了追求 高内聚 低耦合
属性私有 get set
继承的本质是对某一批类的抽象,为了实现更好的建模。
extends是拓展的意思,子类就是父类的拓展
java中只有单继承,没有多继承
继承是java中类与类的一种关系,除此以外还有依赖、组合、聚合等
子类继承父类,子类就拥有父类所有的方法 (public)
java中所有的类 都默认直接或间接继承Object
this代表当前类
super代表父类
super注意点:
super调用父类的构造方法
super必须只能出现在子类的方法或者构造方法中
super和this不能同时调用构造方法
super和this的区别:
代表的对象不同
前提
this没有继承也可以使用
super只能在继承条件下才可以使用”
构造方法
this()本类的构造方法
super()父类的构造方法
@override 重写 有功能的注释
注意:
重写需要有继承,子类重写父类的方法
方法名必须相同
参数列表必须相同
修饰符的范围可以扩大 public>protected>Default>pribate
抛出的异常 范围可以被缩小 不可以扩大
父类可以指向子类,但是不可以调用子类独有的方法
注意:
多态是方法的多态,属性没有多态
父类和子类,有联系
存在条件,继承关系,方法需要重写,父类引用指向子类对象
static final private方法不可以被重写
父类引用指向子类对象
子类转换为父类,向上转型
父类转换为子类,向下转型 强制转换 可能会丢失一些方法
方便方法的调用,减少重复的代码,有效提升利用率
判断两个类之间是否存在父子关系
引用类型转换
低转高 自动就转换
高转低 强转换
静态变量 类名.变量 多线程 不需要new
静态代码块
static{
}
类一加载就执行 只执行一次
先运行静态方法块,然后运行匿名方法块
最后执行构造方法
abstract来修饰类,类就变成一个抽象类
抽象类可以没有抽象方法,但是有抽象方法的类 一定要声明为抽象类
抽象类不可以用new来创建对象,要用子类来继承
抽象方法只有方法的声明,没有方法的实现,留着给子类实现
子类继承抽象类,就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类
声明接口的关键字是interface
普通类 只有具体的实现
抽象类 具体的实现和抽象方法都有
接口 只有抽象类
接口就是规范,定义的是一组规则,自己无法写方法
专业的抽象
类可以通过implements实现接口,接口可以多继承
作用:
约束
定义一些方法,让不同人去实现
默认方法是public abstract
所有的常量都是public static final
接口不能实例化,接口中没有构建方法
implements可以实现多个接口
实现接口必须要重写接口中的方法
直接在类里面class定义一个类,即内部类
成员内部类
一个java类中可以有多个class类
但是只能有一个public class
写在方法里的 是 局部内部类
还可以写匿名内部类,不需要将实例保存到对象中,直接用
new A().say()
java把异常当做一个对象来处理,并定义一个基类Throwable作为所有异常的超类
主要异常分为Error和Exception两种
Error:灾难性
VirtualMachineError 虚拟机异常
StackOverFlowError
OutOfMemoryError
AWTError 图形界面化异常
Exception:可以被程序处理
IOException 输入输出异常
EOFException
FileNotFoundException
RuntiomeException 运行时异常
ArithmeticException 算术异常
MissingResourceException 资源丢失异常
ClassNotFoundException 找不到类异常
NullPointerException 空指针异常
IllegalArgumentException 非法参数异常
ArrayIndexOutOfBoundsException 数组下标越界异常
UnknowTypeException 未知类型异常
try
catch 捕获异常
finally 无论异常与否都会执行
throw 抛出异常 一般在方法里面去主动抛出异常
throws 方法中处理不了异常,则在方法上抛出异常
在用多重catch捕获异常的时候,最后用catch(Exception)处理可能遗漏的异常
尽量去处理异常 而不是print
尽量添加finally去释放占用的资源
只需要继承Exception类 就可以自定义异常
步骤:
创建自定义异常类
在方法中通过throw关键字抛出异常
如果在当前抛出异常的方法中处理异常,用try-catch捕获并处理,否则在方法声明出通过throws指明抛出的异常
在出现异常方法的调用者中捕获并处理异常