静态 A:含义: Static是一个关键字,静态修饰符. B:作用: (1)用来修饰成员变量,被修饰的成员变量被该对象所有对象共享 (2)修饰类 C:特点 (1)静态成员被该类所有对象共享 (2)静态成员可以直接可以使用类名调用 (3)静态成员的加载时机优先于对象(静态成员与类的生命周期相同,非静态成员与当 前类的对象生命周期相同 D访问规则 (1)静态方法中只能调用静态成员 (2)非静态方法中可以调用静态和非静态成员 (3)静态方法中不可以使用this 自定义工具类 (1)定义一个类 (2)使用private修饰无参构造方法(使外界无法创建该类的对象) (3)使用public static修饰工具方法 代码块 继承 A格式: 权限修饰符 class 子类名 extends 父类名{} B特点 (1)只支持单一继承:只能继承一个直接父类 (2)不支持多继承 (3)支持多层继承:子继父,父继爷 C继承中成员变量特点 (1)子类只能获取父类非私有成员 (2)就近原则(局部变量--本类成员变量--父类成员变量--报错) D this与super this 使用本类中成员方法或变量 Super 使用父类中成员方法或变量 E继承中成员方法特点 方法重写:在继承关系中,子类的一个方法和父类声明完全相同(权限要大于等于父类)此时若要调用方法,调用的是子类中的方法 | | | | | | | | 方法名相同参数列表不同,与返回值,形参名,方法体无关 |
C应用场景 (1)父类方法不能完全满足子类需求时 (2)在重写方法中使用super..方法名()调用父类方法,既可以保留父类方法,也可以实现自身特有功能. D注意事项 (1)父类的private方法不能重写 (2)子类重写方法的权限需要大于等于父类方法的权限 E继承中的构造方法 (1)如果子类构造方法的第一行代码,没有调用其他构造方法,则会默认调用父类的无参构造 (2)子类的构造方法中,至少有一个构造方法调用父类的构造方法 this | | 调用子类成员变量 this.name 调用子类成员方法this.show() 子类构造方法第一行调用子类其他构造方法,当子类没有父类某个成员变量或方法时,也可调用父类的 | 调用父类成员变量 调用父类成员方法 子类构造第一行,调用父类构造方法 |
匿名对象 A定义 没有名字没有变量引用的对象 B格式 (1)调用属性 new 类名().属性; (2)调用方法 new 类名().方法(); (3)作为参数 C应用场景 (1)当方法属性只调用一次时 (2)当对象作为方法参数传递时 Final关键字 A作用 (1)修饰类:被修饰的类不能被继承 (2)修饰方法:不能被子类重写 (3)修饰变量:会变成自定义变量,不能被修改,而且在使用前一定要初始化(命名规则:字母全部大写,不同单词之间用下划线分割 YOUR_NAME ) 抽象类 A抽象方法 (1)用abstract修饰,没有方法体直接以();结尾 (2)抽象方法修饰符只能是public或者protected B抽象类 (1)用abstract修的类 (2)子类继承抽象类后有两种选择1,把父类抽象方法全部重写2,将自身也改为抽象类 C特点 (1)抽象类和抽象方法必须被abstract修饰 (2)抽象方法只能被定义在抽象类中 (3)抽象类中可以有抽象方法,也可以有非抽象方法,也可以只有非抽象方法 (4)抽象类不能创建对象,但可以定义构造方法 D抽象类成员 (1)成员变量 可以有成员变量 可以有自定义常量 (2)成员方法 可以有抽象方法可以有非抽象方法 (3)构造方法 可以有构造方法,子类通过调用super()使抽象类成员进行初始化 E细节 (1)abstract不能与final private共存 (2)抽象类不能创建对象,但可以有构造方法来进行初始化 (3)抽象类可以没有抽象方法 接口 A概念 是功能的集合,比抽象类更加抽象的类.接口只描述所应该具备的方法,并没有具体 的实现,具体的实现由接口的实现类来完成.必须用实现来重写方法,或者用一个抽象类来作为实现类 B格式 Public interface 接口名{抽象方法1......抽象方法n}; C接口的使用 接口中的方法全都是抽象方法,不可以new接口 类与接口之间的关系为实现关系,类实现接口(与继承类似) 实现格式 class 类名 implement 接口{重写接口中的方法} D接口的成员特点 (1)只能有抽象方法 (2)默认使用public abstract 修饰方法(就是不写也可以,会默认添加) (3)只能使用public abstract修饰(建议手动添加) E成员变量 (1)只能有常量 (2)默认使用public abstract final 来修饰成员变量 F类与接口的关系 (1)实现关系,可以多实现(一个类可以实现多个接口) (2)接口与接口的关系:继承关系,可以多层继承,也可以多继承 G接口的优缺点 (1)打破了继承的局限性 (2)对外提供规则 (3)降低了程序的耦合性,实现了模块化开发,定义好了规则每个人实现自己的模块,提高了开发的效率 H类与接口的使用场景 类/抽象类 当父类可以描述子类时 接口 当父类只是用于扩展某功能,不能完全描述子类时 I接口与抽象类的区别 | | | | | | | | | | 只能有抽象方法,有默认的修饰符public abstract | | | | |
J应用 在面对一个现实的需求时 (1)分析:有下至上 不断地向上抽取共性 (2)实现:由上至下 先实现共性(先写父类和接口) (3)使用:使用具体的子类 多态 A多态的使用前提 (1)有子父类的继承关系 (2)方法的重写 (3)父类引用指向子类对象 father f=new son(); B动态绑定 运行期间调用的方法,是根据子类的具体类型来决定的 C格式 D成员特点 E多态的转型 | | | | 当有子类对象赋值给一个父类引用时.多态本身就是向上转型的过程 | 一个已经向上转型的子类对象可以使用强制转换类型的格式,将父类引用转换为子类引用(如果是直接创建父类对象是无法向下转型的) | | | |
F多态的优缺点 可以提高维护性,提高代码的可扩展性 无法直接访问子类的特有成员 内部类 A概念 将类写在其他类的内部,可以写在其他类成员位置和局部位置,称为内部类,其他的称为外部类 B使用场景 在描述事物时,若一个事物内部还包含有其他事物 C成员内部类 (1)定义在外部类中的成员位置,与类中成员变量相似,可通过外部对象进行访问 (2)class 外部类{修饰符 class 内部类{其他代码}} (3)访问方法 外部类名.内部类名 变量名=new 外部类名().new内部类名(); (4)可用的修饰符 private public protected final static abstract D局部内部类 定义在外部类方法中的局部位置,与访问方法中的局部变量相似,可通过调用方法访问 Class 外部类 {修饰符 返回值类型 方法名(参数){class 内部类 {代码}}} 访问方法:在外部方法中,创建内部类对象进行访问 E匿名内部类 (1)是创建某个类型子类或接口的实现类对象的快捷方式 (2)格式 new 父类或接口(){方法重载} 直接调用方法 new父类或接口(){重写方法}.方法名(); 创建对象并赋值 父类或接口 对象名=new 父类或接口(){}; Object A概念 是java中的根类,是所有类的父类,描述的方法子类都可以使用.在创建对象时,最终找的父类就是object 获取字节码对象 A object类的Class getClass()方法 示例: Class clazz = student.getClass(); 类名.class属性 示例: Class clazz = Student.class; 扩展: 实际上.class是一种特殊形式, 称为类字面常量, class是关键字不能作为 属性名, 且Object类中并没有定义这个属性 B Class类的静态方法forName(String className) 示例: Class clazz = Class.forName("com.itheima.Student"); 注意: 因为该方法使用字符串来寻找类, 有可能并没有该字符串对应的类, 所以会抛出ClassNotFoundException类无法找到的异常 Object类的equals方法Object类boolean equals(Object obj): 比较两个对象是否"相等"其实是比较的地址值 System类 System 类包含一些有用的类字段和方法。它不能被实例化。 A 成员方法 数组的复制 static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数据源和目的地 src:源数组 srcPos:指定从哪个索引位置开始复制 1 dest:目标数组 destPos:指定目标数组接收元素的索引位置 length:目标数组接收元素的个数 (3)static long currentTimeMillis() 返回以毫秒为单位的当前时间 (4)static void exit(int status) 终止当前正在运行的 Java 虚拟机 Date A 表示特定的瞬间 精确到毫秒 可以通过方法来黑设定自己所表示的时间,可以表示任意时间 B 构造方法 Date(): 创建一个表示当前系统时间的Date对象 Date(longdate)根据指定时间创建Date对象(1970-01-01是起点) C常用方法 设置时间方法: 毫秒值--Date void setTime(long time) 获取时间方法: Date---毫秒值 long getTime(); simpleDateFormat A 构造方法 simpleDateFormat() 使用默认模式进行对象构建 simpleDateFormat(String pattern)使用指定模式进行对象构建 B格式化 转化为想要的格式 Date--String Date format(Date date) C解析 转化为毫秒 String--Date Date parse(String source) 格式必须和字符串的格式相同 yyyy-MM--dd Calendar A 日历 提供了一些可以操作年月日的方法 Date---calendar void setTime(Date date) 静态方法 B获取 Int get (int field) 返回给定日历字段的值 Calender c=Calendar.getInstand();创建对象 Int year=c,get(Calendar.YEAR);获取年 Int month=c.get(Calendar.MONTH)+1 最小值为0所以要+1 Int day =c.get(Calendar.DAY_OF_MONTH);获取年中的日 C修改 Void set (int field,int value) 把指定的字段修改成指定的值 D添加 Void add(int filed,int value) 在指定的字段添加指定的值 Collection Collection c=new ArrayList(); 利用多态创建对象 A利用迭代遍历集合 Iterator it =c.iterator(); 调用iterator 方法 While(it.hasNext()) 遍历集合 {it.next()}可以直接输出或者用一个数据类型接收 B添加元素 利用list接口中的listiterator方法.直接添加会发生并发修改异常 ListIterator li=it.listIterator(); While (Li.hasNext()) 遍历 {String x=(String)li.next(); 接收 If(x.equals(“”)){ 判断 Li.add(“”)} 添加 } Collection接口(单列集合体系的顶层) | * boolean add(E e): 添加元素, 添加成功返回true, 否则false | * void clear(): 清空集合中的元素 | * boolean contains(Object o): 判断集合中是否包含指定的对象 | * boolean isEmpty(): 判断集合中是否没有元素. 与null区分 | * boolean remove(Object o): 从集合中删除一个元素, 删除成功返回true, 否则false | * int size(): 获取集合的长度(元素的数量) | * Object[] toArray(): 将集合转换为Object[]数组 | * Iterator<E> iterator(): 获取集合的迭代器对象 |- List接口(元素存取有序, 元素可重复, 有索引) | | * void add(int index, E e): 添加元素到指定索引上 | | * E remove(int index): 删除索引上的元素, 并返回 | | * E set(int index, E e): 修改指定索引上的元素, 并返回被替换的元素 | | * E get(int index): 获取指定索引上的元素 | | * ListIterator listIterator(): 获取List特有的迭代器对象 | |- ArrayList类(底层是数组, 查询快, 增删慢) | |- LinkedList类(底层是链表, 查询慢, 增删快) | * void addFirst(E e): 添加元素到集合的开头 | * void addLast(E e): 添加元素到集合的末尾 | * E getFirst(): 获取集合开头的元素 | * E getLast(): 获取集合末尾的元素 | * E removeFirst(): 删除开头的元素, 并返回 | * E removeLast(): 删除末尾的元素, 并返回 |- Set接口(元素存取无序, 元素不可重复, 无索引) | * `boolean add(E e)`: 添加成功返回true; 添加失败(重复了)返回false |- HashSet类(底层哈希表) Map接口(双列集合体系的顶层, 以键值对方式存储, 键不可重复, 值可以重复) | * `V put(K key, V value)`: 添加键值对 | * `V get(Object key)`: 通过指定键获取值 | * `int size()`: 获取集合长度 | * `containsKey(Object key)`: 是否包含指定的键 | * `containsValue(Object value)`: 是否包含指定的值 | * `boolean isEmpty()`: 是否为空 | * `void clear()`: 清空集合 | * `V remove(Object key)`: 删除指定键的值(key和value都会删除) | * `Set<Map.Entry<K, V>> entrySet()`: 获取键值对的Set集合 | * `Set<K> keySet()`: 获取所有键的Set集合 | * `Collection<V> values()`: 获取所有值得Collection集合 |- Map.Entry(Map内部接口, 表示键值对对象) | * `K getKey()`: 获取键 | * `V getValue()`: 获取值 |- HashMap类 Iterator接口(迭代器) | * boolean hasNext(): 判断是否有下一个元素 | * E next(): 获取下一个元素 | * void remove(): 删除迭代器返回的最后一个元素 |- ListIterator接口(List体系专用迭代器) * void add(E e): 使用迭代器添加元素到集合 * void remove(): 删除迭代器返回的最后一个元素 Collections工具类 * `static int binarySearch(List list, T key)`: 使用二分查找来查找元素在指定列表的索引位置 * `static void copy(List dest, List src)`: 将源列表中的数据覆盖到目标列表 * `static void fill(List list, Object obj)`: 使用指定对象填充指定列表的所有元素 * `static void reverse(List list)`: 反转集合中的元素 * `static void shuffle(List list)`: 随机打乱集合中元素的顺序 * `static void sort(List list)`: 将集合中的元素按照元素的自然顺序排序 * `static void swap(List list, int i, int j)`: 将指定列表中的两个索引进行位置互换
|