JavaSE 多态,抽象,接口,String类,异常知识总结

多态:
相同的行为或方法,通过不同对象来使用时,展现的不同状态
实现满足条件:
·依赖于继承
·子类中必须要对父类中的方法进行重写(覆盖,类似toString)
·必须通过父类的引用来调用这些重写
意义:最高的参数统一化
向上转型语法:父类名称 父类引用 = new 子类名称();

方法重写:
有继承关系,子类定义除与父类方法权限不同以外,其他都相同,除向上转型,返回值也都相同
出现圆圈加向上箭头图标
子类权限必须>=父类权限,private不包含
检验:@Override

向下转型:
子类名称 子类实例 = (子类名称) 父类引用;
必须发生在有继承关系的类之间,必须先发生向上转型
具体应用:Object类的equals方法
重写equals方法:
 public boolean equals(Object obj){};
包装类,String都已经覆写了equlas方法,不是地址

final关键字:
称为java终结器,修饰的属性称为常量,修饰的方法不能重写,修饰的类无法被继承

instanceof关键字
引用是否是类的对象
引用名称 instanceof 类名称    //返回布尔值

抽象类:
使用abstract关键字定义抽象类于抽象方法
比普通类多一些抽象方法,是普通类的超集(普通类有的,抽象类都有)
抽象类可以不包含抽象方法,必须有子类,
抽象方法所在的类一定是抽象类,抽象方法只有方法声明,没有方法体,必须被子类重写(子类是普通类),若子类也是抽象类,则可选择性的覆写抽象方法
public abstract void test();

Java中还有一类方法没有方法体,只有方法声明,使用native关键字声明,称为本地方法。
本地方法是指java调用C++实现的代码,具体方法实现在C++代码中,Java只是调用。
JVM本身就是C++实现,有大量C++函数,Java直接调用

接口:接口优先抽象类
接口命名:使用大些I开头
接口中只存在全局变量与抽象方法,接口使用interface关键字来定义,不能存在构造方法,成员变量,是更“纯粹”的抽象类。只有public权限
接口的子类称为实现接口,使用implements关键字,子类必须覆写接口所有抽象方法(子类是普通类)。
子类命名:以父类接口名称开头,以impl结尾
接口无法直接实例化对象,需要通过子类向上转型 
接口定义public static final abstract都可以省略
子类可以实现多个父接口,并继承抽象类,先使用extends继承一个类,再使用imples实现多接口
接口不能使用extends继承类,但可以使用extends继承父接口

JDK中常见接口
1.java.lang.comparable接口
compareTo方法    //比较大小,排序可用
public int compareTo(Object o){};  //类似equals方法
2.java.lang.Cloneable
标记接口,JVM将带Cloneable接口的子类赋予拷贝能力

Object类中clone方法:
public 类型 clone() throws CloneNotSupportedException{return (类型)super.clone;}

浅拷贝:若原对象中包含引用类型,只拷贝地址,不产生新对象
深拷贝:会产生新对象

Object类可以接收所有类的对象,还可以接收数组对象和接口对象

包装类:
Number类直接子类:整型:Byte,Short,Integer,Long;浮点型:Float,Double;
Object类直接子类:Character,Boolean。
JDK1.5之后使用和基本类型一样
·在类中定义属性,推荐使用包装类;
·在方法中定义局部变量,使用基本类型
包装类是引用类型,默认值是null
在-128~127之间第一次使用产生新对象,第二次直接复用已有对象

String类:
字符串对象的产生:
·String s = “abc”;
·String s = new String(“abc”);
·char[] s = {‘a’,’b’,’c’};
  String s = String.valueOf(s);
字符串对象的比较相等:
equlas:区分大小写
equlaslgnoreCase:不区分大小写
字符串对象大小比较:
compareTo:区分大小写
compareTolgnoreCase:不区分大小写  //若前面相等,则返回长度差
字符串的转化:
其他类型转为字符串,调用valueOf方法
字符串还原为数值,调用parseXXX方法
字符串查找:
·char charAt(int index)    //返回index位置上的字符
·int indexOf(int ch(或str))    //返回ch第一次出现的位置,没有返回-1
·int indexOf(int ch, int fromIndex)    //从fromIndex位置查找ch第一次出现的位置,没有返回-1
·int lastIndexOf(int ch(或str))    //从后往前找,返回ch第一次出现的位置,没有返回-1
·int lastIndexOf(int ch, int fromIndex)    //从fromIndex往前找ch第一次出现的位置,没有返回-1
·boolean contains(int ch(或str))    //查询当前字符串是否包含指定内容
字符串替换:
·String replaceAll(String regency, String replacement)    //替换所有指定内容
·String replaceFirst(String regency, String replacement)    //替换首个内容
字符串的拆分:
·String[] split(String regex)    //将字符串全部拆分
·String[] split(String regex, int limit)    //将字符串以指定格式拆分,拆分为limit组
拆分时某些特殊分隔符若在程序中有特殊含义,则需要转义处理    //例:“\\.”
字符串的截取方法:
·String substring(int beginIndex)    //从指定索引截取到结尾
·String substring(int beginIndex, int endIndex)    //从开始索引截取到结尾索引
补充方法:
·String trim()    //去掉字符串中左右空格,保留中间空格
·String toUpperCase()    //字符串转大写
·String toLowerCase()    //字符串转小写
·Boolean isEmpty()    //变量是否已经初始化,判断是否有值
笔试面试重点问题:
1.常量池
当字符串对象第一次产生时,就会产生字符串并放入常量池中;当使用直接赋值法再次产生该对象时,常量池中已经包含,直接复用常量池中对象,不会产生新对象。
2.intern方法
public native String intern();手动放入常量池
若常量池中已经包含当前对象,不会将当前对象放入常量池,返回常量池中原有对象地址;若常量池中没有包含当前对象内容,则将当前对象放入常量池中,返回当前对象。
3.字符串的不可变性
String对象一旦产生,字符串对象中保存的值不可改变,通过产生新对象来改变。
JDK另外两个修改字符串内容的类
StringBuffer:线程安全的类,性能较差,一般用在多线程并发修改内容时
StringBuilder:线程不安全的类,性能较高,能满足大部分场景的使用
append(str):将字符串对象转为StringBuilder对象而后拼接在当前对象内部
StringBuilder转String类:调用toString类
StringBuilder类的常用方法:
增:StringBuff append(String str)  //在尾部追加,相当于toString的+=
      StringBuff insert(int offset, String str)  //在offset位置添加
删:StringBuffer deleteCharAt(int index)  //删除index位置字符
      StringBuffer delete(int start, int end)  //删除[start,end)区间内的字符
改:void setCharAt(int index, char ch)  //将index位置的字符设置为ch
      StringBuffer replace(int start, int end, String str)  //将[start, end)位置字符替换为str
查:char charAt(int index)  //获取index位置的字符
      int indexOf(String str)  //返回str第一次出现的位置
      int indexOf(String str, int fromIndex)  //从fromIndex位置查找str第一次出现的位置
      int lastIndexOf(String str)  //返回最后一次出现str的位置
      int lastIndexOf(String str, int fromIndex)  //从fromIndex位置开始找str最后一次出现的位置
转置:reverse()  //将当前字符串逆序处理

List接口:
创建一个动态数组
List<Integer> list = new ArrayList<>();
增:add() 删:remove(int index)//删除指定索引元素
改:set(int index, val)//将指定索引改为val  
查:int get(int index)//查看索引位置元素值 boolean contains(val)//是否包含val
遍历使用for-each循环

异常:

 


Error及其子类一旦发生,当前程序无法解决,属于JVM的内部错误
Exception及其子类发生后,程序可以捕获异常,发生异常之后,正常代码可以执行
异常处理流程:
·LBYL:预防式编程,确保无误再执行
·EAFP:事后认错(try,catch,finally)
打印异常的错误堆栈:e.printStackTrace//一般用在catch中
finally的代码块不管是否异常都会运行,一般不写retyrn
throws用在方法声明,表示当前方法可能存在的异常,且当前方法不处理该异常
throw用在方法内部,人为异常对象抛出,一般搭配自定义异常来使用
·throw new NullPointerException();
受查异常:若编译阶段产生异常,必须进行异常处理//红色框
非受查异常:编译阶段产生异常,可以不进行异常处理,运行时出现问题再解决
自定义异常:需要继承Exception或RuntimeException

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mᴇᴇᴛ ꦿ᭄.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值