黑马程序员技术交流社区
标题: 课堂笔记 [打印本页]
作者: 韶华白首zy 时间: 2018-4-14 17:18
标题: 课堂笔记
静态
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)`: 将指定列表中的两个索引进行位置互换
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |