文章目录
1. 多态
一句话就是在设计一个方法时,该方法拥有一定的通用性。在同一个方法中,这种由于参数类型不同而导致执行效果各异的现象就是多态,继承是多态得以实现的基础。为实现多态允许父类类型的变量来引用一个子类类型的对象。 优点: 解决方法同名的问题,可拓展,可维护。
- 对象类型的转换
将子类对象当作父类类型来使用(Java环境中叫向上转型)
注意此时不能通过父类变量调用子类的特有方法
如果想用 强制父类转化子类对象(Java环境中叫向下转型)
传入的参数是否是所需要的类 判断 关键字(入 instance of 要)
1.1 Object类
类层次结构的根类
常见方法:
- equals()
- getClass()
- hashCode()
- toString()
1.2 匿名内部类
在类里面定义的类称为内部类,它是外部类一个成员
成员内部类,方法内部类,匿名内部类 →→实现接口
方法中的参数有一个类构成即 add(new person(){…});
2.异常(Exception)
解释:程序运行过程中,磁盘空间不足,网络连接中断,被装载的类不存在等情况
大量的异常类都extends java.lang.Throwable类 就是抛出异常
关系图如下:
Throwable 常用方法
- String getMessage()
- void printStackTrace()
- void printStackTrace(PrintStream s)
2.1 try…catch…和finally 异常的捕获
finally 无论是否发生异常都执行finally{…}代码,比如说释放系统资源
如果调用别人的方法不知道有没有异常,请用throws关键字抛出异常
比较 编译时异常 与 运行时异常
1.Exception类中除了RuntimeException和其他子类都是编译异常
- 使用try…catch…或者throws关键字抛出异常,调用者对其处理
2.RuntimeException和其他子类都是运行时异常一般由程序中的逻辑错误引起,程序运行时无法恢复
自定义异常(网站设计404页面,个性化)
必须继承自Exception或者其子类
3.访问控制
一张表格解决:
4. JavaAPI 常见
4.1 String类和StringBuffer类
-
String类常见操作
int indexOf(int ch),int length(),char[] toCharArray(),int lastIndexOf(int ch),String toLowerCase(),
String [] split("_"),int indexOf(String str),String toUpperCase()… -
StringBuffer类的常见操作
内容和长度可变,字符缓冲区
StringBuffer append(char c), StringBuffer insert(2,“123”), StringBuffer reverse()…
区别: -
String类时字符串常量,StringBuffer字符容器
-
String类覆盖Object类的equals方法, StringBuffer类没有
-
String类可以用“+”拼接, StringBuffer不能
4.2 System类和Runtime类
1.System类常用方法
-
static void exit(int status)
-
static void gc() 垃圾回收机制
-
getProperties()方法
用于获取当前系统的全部属性,该方法会返回一个Properties对象,封装了系统的全部属性,以键值对的形式存在 -
currentTimeMillis()
返回的是一个long类型的值,就是时间戳
4.3 Rumtime类
用于封装Java虚拟机进程
4.4 Math类和Random类
1.Math类
两个静态常量 PI 和 E 表示数学常量Π和e
方法:abs() 绝对值,floor()最大整数,ceil()最小整数,round()四舍五入
2.Random类
两个构造方法:无参构造 Random(),有参构造Random(long seed)指定种子,相同的序列
常见方法:
Boolean nextBoolean()
double nextDouble()
float nextFloat()
int nextInt()
int nextInt(int n)
long nextLong()
4.5 包装类
通过这些包装类可以将基本的数据类型的值包装为引用数据类型的对象
由此引入了“装箱”和“拆箱”的概念
基本数据类型 | 对应的包装类 |
---|---|
byte | Byte |
char | Character |
int | Integer |
short | Short |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
5.集合
Java中的集合类就像一个容器,专门用来存储Java类的对象,位于util包中
- 单列集合Collection,是根接口,重要的子接口是List和Set
List接口实现类有ArrayList和LinkedList
Set接口实现类有HashSet和TreeSet - 双列集合Map是根接口,存储(Key)、值(Value)映射关系的元素
实现类有HashMap和TreeMap
一张图看懂关系:
各自的优缺点???
遍历集合 迭代器Iterator 或者 高级for循环
1.ArrayList和LinkedList
- ArrayList是一个长度可变的数组对象,底层是数组,增删效率低,查询快
- LinkedList为克服上述缺点,集合内部采用的是双向循环链表,修改引用关系即可
set接口和List接口一样extends Collection,但标准更严格无序,唯一
HashSet 根据对象的哈希值确定元素中存储位置(存取,查找)
TreeSet 基于二叉树,集合元素排序
2.双列集合Map常见方法
存 void put()
取 Object get()
键值组 Set keySet()
值组 Collection values()
映射关系 Set<Map.Entry<K,V>> entrySet()
遍历Map集合
- 遍历Map集合中所有的键,键找值
.
.
.
Set keySet = map.keySet();
Iterator it = keySet.iterator();
while(it.hasNext()){
Object key = it.next();
Object value = map.get(key);
syso("")
}
- 获取集合中所有的映射关系,再取出键值对
.
.
.
Set entrySet = map.entrySet();
Iterator it = keySet.iterator();
while(it.hasNext()){
Map.Entry entry = (Map.Entry)(it.next());
Object key = entry.getKey();
Object value = entry.getValue();
syso("")
}
其实程序写出来发现HashMap迭代元素顺序和存入的顺序不一致,可以用子类LinkedHashMap,采用的是双向链表维护元素关系
Map接口中还有一个实现类HashTable,和HashMap相似,但其线程是安全的,存取元素慢,掌握其子类Properties,它是用来存储字符串类型的键值对,setProperty(),getProperty()
6.泛型(Parameterized Type)
集合可以存储任何类型的对象,但是把一个对象存入集合后忘记这个对象的类型,强制转换时易出错,引入参数类型,指定改类中方法操作的数据类型
ArrayList< parameterized type> list = new ArrayList< p…m… type>();
限定只能存储p…m… type 类型的数据