复习
一、继承:
Object 是所有类的一个祖先类
即:class A —> class A extends Object{}
二、final 关键字:可以修饰类 / 修饰方法 / 修饰变量
三、abstract 关键字:可以修饰类 / 修饰方法
四、接口(interface)
1、接口的定义语法`
interface 接口名称 [extends 其他接口] { //接口可以多继承
抽象方法列表
void method(); //自动给方法加修饰public abstract
int a = 10; //自动给变量加public static final
//了解
static void staticMethod(){ //静态方法
}
default void method(){ //接口中的默认方法
}
}
2、类实现接口的语法:
class 类名 [implements 接口] { //同时实现多个接口
覆写接口中的所有抽象方法 or 把自己声明成抽象类,实现部分方法
}
3、接口看出契约 / 合同
五、多态
1、引用:指向对象的线索
2、向上转型(把引用类型转换成另一个引用类型(或类型层级属于其上层的))
3、引用有引用自己的类型:
(1)接口类型的引用:List a;
指向实现接口的类类型的对象
(2)类类型的引用:ArrayList a;
指向本类或者本类的子类的类类型的对象
(3)数组类型的引用:int[] a;
Object[] a = new String[10];
4、表现:
(1)定义时:
List a = new ArrayList();
(2)用在返回中:
List method (){
return new ArrayList();
}
(3)用在形式参数中:
void method (List list){}
method (new ArrayList() );
六、方法使用和执行
1、编译期间,由引用类型决定可以调用哪些调用;
2、运行期间,由实际的对象类型决定执行的是哪个方法;
3、了解:运行期间的静态方法,随引用类型
非重要:
List a = new ArrayList(); //有一天,需要调用只有ArrayList 支持的方法
ArrayList b = (ArrayList)a; //需要保证a指向的对象,可以被ArrayList 引用指向,即是ArrayList的子类类型的对象
//如果不满足,会有运行异常
为了安全,有instanceof可以做运行时的检查
=======================================
一、数据结构:
线性表 List
栈和队列 Queue / Stack / Deque
二叉树
堆 PriorityQueue
排序 Arrays.sort | List.sort
搜索 Set / Map
搜索树
哈希表
Map 是映射关系:
例如同学的道勤次数
姓名 (Key)映射 上课次数(Value)
其中,Key 不允许重复,Value允许重复
1、Collection 接口的常用方法说明:
方法的举例使用:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
public class CollectionDemo {
public static void main(String[] args) {
Collection<String> list=new ArrayList<>();
System.out.println(list);
System.out.println(list.size());
System.out.println(list.isEmpty());
System.out.println("+++++++++++++++++++++++++++++++");
System.out.println(list.add("B"));
System.out.println(list.add("T"));
System.out.println(list.add("S"));
System.out.println(list);
System.out.println(list.size());
System.out.println(list.isEmpty());
Object[] array=list.toArray();
System.out.println(Arrays.toString(array));
for(String s:list){
System.out.println(s);
}
System.out.println("+++++++++++++++++++++++++++++");
list.remove("S");
System.out.println(list);
System.out.println(list.size());
System.out.println(list.isEmpty());
System.out.println("+++++++++++++++++++++++++++++");
list.clear();
System.out.println(list);
System.out.println(list.size());
System.out.println(list.isEmpty());
System.out.println("+++++++++++++++++++++++++++++");
}
}
2、Map 常用方法说明:
代码举例说明:
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map<String,String> map=new HashMap<>();
System.out.println(map);
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println("====================================");
System.out.println(map.get("组合名称"));
System.out.println(map.getOrDefault("组合名称","某国际知名组合"));
System.out.println(map.containsKey("组合名称"));
System.out.println(map.containsValue("某国际知名组合"));
System.out.println(map);
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println("++++++++++++++++++++++++++++++++++++++++++");
map.put("组合名称","BTS");
map.put("粉丝名称","ARMY");
map.put("关系","防永阿永");
System.out.println(map.get("组合名称"));
System.out.println(map.getOrDefault("组合名称","某国际知名组合"));
System.out.println(map.containsKey("组合名称"));
System.out.println(map.containsValue("某国际知名组合"));
System.out.println(map.containsValue("BTS"));
System.out.println(map);
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
for(Map.Entry<String,String> e:map.entrySet()){
System.out.println(e);
System.out.println(e.getKey()+" = "+e.getValue());
}
}
}
二、静态内部类:
定义在类的成员级别(member-level),同时被static修饰的一种类
class LinkedList{
public/default/protected/private static class Node{
int val ;
Node next ;
}
}
最大的作用就是一个类从概念上应该属于另一个的范围;
使用上:
1、在 LinkedList 内部使用:和普通类没有区别
Node n = new Node();
2、在 LinkedList 外部使用:指明所属关系
LinkedList.node n = new LinkedList.node();
三、泛型:
1、泛型的引入:
2、泛型:
(1)泛型类:重点学会使用
(2)泛型方法:
class MyArrayList<E>{
private E[] array;
private int size;
}
MyArrayList<String>//概念上可以认为是定义了 String[] array ;
//但实际不是
class MyMap<K,V>{
}
MyArrayList<Person> list = new MyArrayList<Person>();
MyArrayList<Person> list = new MyArrayList<>();//这两个定义实际上是一样的,,类能自己推导出来,类型推导
list.add(new Person());
list.add(new Book());//编译错误
Person p=list.get(0);//不再是向下转型,不需要类型转换
Book b=list.get(0);//编译错误
重点!!!!
!!!
泛型作用在编译期间
MyArrayList<String>和MyArrayList<Person>和MyArrayList<Book>运行期间都是同一个类型MyArrayList,这个过程叫做类型擦除
类型擦除!!!!
本质上E被擦除成Object 类型了
泛型总结:
四、包装类:
之前说的泛型是针对引用类型,而基本数据类型则是通过包装类来实现
| 基本数据类型 | 包装类 | | byte | Byte | | short | Short | | int | Integer | | long | Long | | flfloat | Float | |
double | Double | | char | Character | | boolean | Boolean |
例如:
// 装箱操作,新建一个 Integer 类型对象,将 i 的值放入对象的某个属性中
Integer ii = Integer.valueOf(i);
Integer ij = new Integer(i);
// 拆箱操作,将 Integer 对象中的值取出,放到一个基本数据类型中
int j = ii.intValue();
1、装箱过程会生成Integer 的对象
2、i 的值的改变,不影响ii 指向对象的内部的值
五、list 的使用
常见的方法: