黑马程序员技术交流社区

标题: 石家庄校区javaEE6期javaSE(1-6)阶段总结 [打印本页]

作者: 赵嘉鑫    时间: 2017-12-21 17:21
标题: 石家庄校区javaEE6期javaSE(1-6)阶段总结
就业班前6天学习总结




  继承



概念: 从已有类派生出新的类, 已有类称为父类, 派生类称为子类, 这种子类对父类的关系就是继承

作用: 如果多个类中有共同的成员, 则可以将其抽取到同一个类中, 将这个类作为父类, 让其他类去继承, 继承后子类就具有了父类非私有的成员

关键字: extends

定义位置: 子类类名后, 父类类名前

格式: public class 子类类名 extends 父类类名 {}

Java语言中继承的特点

支持单继承, 多层继承

不支持多继承

注意: Java中所有类都直接或间接的继承Object类

继承关系下的成员

成员变量

子类可以获取父类的非私有成员变量

就近原则:

如果有局部变量, 则使用局部变量

如果没有局部变量, 有本类成员变量, 则使用本类成员变量

如果没有局部变量, 也没有本类成员变量, 则使用父类成员变量

如果都没有, 报错

成员方法

方法的重写: 在子父类继承关系中, 子类定义了和父类完全一样的方法(方法声明一样, 方法体无关), 子类就重写了父类的方法

注解: @Override

方法重写和重载的区别

定义位置不同

重写: 子父类关系中

重载: 同一个类中

方法定义不同

重写: 方法声明必须完全一样, 和方法体无关

重载: 方法名一样, 参数列表不同, 和返回值, 形参名称, 方法体无关

重写的特点:

子类如果重写了方法, 则调用子类重写的方法

子类如果没有重写父类方法, 则调用父类的方法

重写的应用场景

当父类方法无法满足子类需求时, 子类可以重写方法

注意事项

父类私有的方法不能重写

子类重写的方法权限必须大于等于父类方法的权限

构造方法

子类构造方法中默认会调用父类的空参构造

this和super

this

this(有参或无参): 可以调用本类其他构造方法

this.成员: 使用当前对象的引用调用成员

this在子类没有定义成员变量时, 会到父类中寻找父类的变量

super

super(有参或无参): 可以调用父类的构造方法

super.成员: 使用当前对象的父类引用调用父类的方法

特点:

只能在构造方法的第一行出现

两者只能调用其中一个

子类构造方法中至少有一个会调用父类的构造方法

执行顺序

创建子类对象时, 会先调用父类的构造方法

匿名对象



概念: 没有名字, 实际上是没有变量引用的对象

匿名对象调用成员

new 类名().成员变量

new 类名().成员方法()

使用场景: 适用于只需要使用对象一次的行为, 相当于一次性筷子

final关键字

概念: 是一个修饰符, 能够修饰类, 方法, 变量

作用:

修饰类: 不能被继承

修饰方法: 不能被子类重写

修饰变量: 该变量是自定义常量, 一旦初始化则无法改变其值

抽象类

什么是抽象: 无法具体描述的, 但是能够表达出共性

关键字: abstract, 能够修饰类, 方法

作用:

抽象类

使用abstract修饰的类

含有抽象方法的类必须定义为抽象了你

抽象方法

没有方法体的方法: 修饰符 abstract 方法名();

抽象方法必须被子类重写

抽象类和类的关系

抽象类也是类

一个类继承了抽象类后只有2种选择:

重写父类的抽象方法

将该类本身修改为抽象类

抽象类的特点:

抽象类和抽象方法必须用abstract修饰

抽象方法只能定义在抽象类中

抽象类中并不一定需要抽象方法, 抽象类中也可以有非抽象的方法

抽象类不能创建对象, 但是可以有构造方法(对成员进行初始化)

抽象类和类之间也存在继承关系

一个类继承了抽象类后只有2种选择:

重写父类的抽象方法

将该类本身修改为抽象类

抽象类成员的特点:

成员变量:

可以有成员变量

可以有常量

成员方法:

可以有抽象方法

可以有非抽象的方法

构造方法

可以有, 通过子类调用super()来实现抽象类成员的初始化

abstract不能与final和private一起用

final: 因为抽象方法必须被重写, 而final修饰的方法不能被重写, 有冲突

private: 因为抽象方法必须被重写, 而private方法子类看不见, 所有有冲突

抽象思想的作用: 起到规范的作用

包的特点
可以有多层
不同的包下的文件名可以重复
相同包下的类可以直接访问
类的全名: 包名.类名
不同包下的互相访问
1.使用类的全名
2.使用关键字 import java.util.*
注意* 代表通配符,代表导入这个包下的所有类
-----------------------
权限修饰符
private当前类
default当前类,当前包
public 当前类 ,相同包下不同的类,不同包下的类
protected当前类,当前包,不同包的子类
--------------------------
          类        成员变量      成员方法     构造方法
public     y          y             y            y
default    y          y             y            y
protected             y             y            y
private               y             y            y
abstract   y                        y
static                y             y
final      y          y             y
------------------------------
内部类
成员内部类:类中 方法外
局部内部类: 方法中
匿名内部类: 方法中或方法参数中
接口 权限修饰符 interface 接口名{}
弥补局限性  扩展功能
实现接口  权限修饰符 class 类名 implements 接口名
接口与接口 继承关系
接口与抽象类都是抽取共性的内容
接口只能有静态常量public static final修饰
抽象类可以有成员变量
接口中只能有抽象方法public abstract修饰
抽象类可以有非抽象方法
多态
子父类存在继承关系
子类重写父类方法
父类引用指向子类对象
成员变量  编译看左边  运行看右边
静态方法   -----左边  ------左边
成员方法   -----左边  -------右边
多态的优点
可以提高可维护性
提高代码的可扩展性
缺点
无法直接访问子类特有成员
方法转型向下(强制)
instanceof语句
作用 判断一个对象是否是某个类的对象
格式  对象的变量名 instanceof 类名
定义的类  没有抽象方法 则定义为普通类

Object类&System类
日期相关类
包装类&正则表达式
------------------------------------
toString()返回对象的字符串表示形式
getClass()获取Class对象,即字节码对象
一个类只有一个字节码对象
通过object类的getClass()来获取
Class clazz=t.getClass();
通过类名调用属性class来获取
Class clazz2=Teacher.class
通过Class类的静态方法forName()获取
Class clazz3=Class.forName("com.itheima_01.Teacher")
Intager toHexString()返回指定参数的十六进制字符串
hashCode() 获取hash值
boolean equals(Object obj)
使用==来比较两个对象是否相等(地址值)   
重写比较内容
---------------------------------------
System类
复制数组static void arraycopy(Objiect src,int srcPos,Object dest,int destPos, int length)
src:源数组
srcPos:指定从哪个索引位置开始复制
dest: 目标数组
destPos:指定目标数组元素的索引位置
length:目标数组接受元素的个数
currentTimeMillis():以毫秒值返回当前系统时间(long类型)(1970-1-1 0:0:0至今够了多少毫秒)
System.exit(0);终止虚拟机
---------------------------------
Date类util包下
Date: 表示特定的瞬间,精确到毫秒
构造方法 Date():创建的是一个表示当前系统时间的Date对象
Date(long date):根据指定时间创建Date对象
long settime()设置Date对象时间
long gettime() 获取Date

SimpleDateFormat
SimpleAttributeSet()使用默认格式
格式化Date--String返回字符串
String format(Date date)
解析String--Date
Date parse(String source)

Calendar c=Calendar.getInstance();
get set add
Calendar.YEAR  年份
----------------------
包装类
封装了基本数据类型的类,为我们提供了更多复杂的方法和一些变量
char Character
int Integer
String ---int
static int perse
int --String
static string tostring
自动装箱和拆箱
------------------
正则表达式
就是一套规则,可以用于匹配字符串
boolean matches

x 字符x
\\ 反斜线字符
[abc] a,b或c
[^abc]  任何字符 除了abc
[a-zA-Z] a到z或A到Z
预定义字符
.: 任何字符(对于行结束符, 可能匹配, 也可能不匹配)
\d: 数字0-9. 相当于[0-9]
d是digital的缩写
\D: 非数字. 相当于[^0-9]
\s: 空白字符. 相当于[ \t\n\x0b\f\r], 包括空格(第一个空就是空格)
s是space的缩写
\S: 非空白字符. 相当于[^\s]
\w: 单词字符. 相当于[a-zA-Z_0-9]
w是word的缩写
\W: 非单词字符. 相当于[^\w]
\w \W 单词  非单词
X?: X这个字符出现一次或零次
X*: X这个字符出现零次或多次, 包括一次
X+: X这个字符出现一次或多次
X{n}: X这个字符恰好出现n次
X{n, }: X这个字符至少出现n次
X{n, m}: X这个字符至少出现n次, 但不超过m次
集合
集合的体系结构
不同的集合它们的功能都是相似的,不断的向上提取,
将共性抽取出来
学习最顶层 使用最底层
顶层Collection
add  添加
clear 清空集合
contains 是否包含指定元素
isEmpty  是否为空
remove  删除元素
size  集合元素个数
Object[] toArray 将集合转换成一个object数组
Iterator:可以用于便立集合
E next():返回下一个元素
hasNext():判断
迭代器是依赖于集合的,相当于集合的一个副本,当迭代器
在操作的时候,如果发现和集合不一样 并发修改异常
Iterator接口:
迭代器
作用:
提供遍历集合的安全方式
获取迭代器:
使用集合对象调用Interator<E> iterator()方法
成员方法
boolean hasNext(): 是否有下一个元素
E next(): 返回下一个元素
void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素

foreach
for(元素的类型变量 变量名: 集合或者数组对象){ }
在增强for循环中不能修改集合,否则并发修改异常
链表 是由链子连接起来的一堆结点
结点: 地址值,值,下一个结点地址值
增删快 查询慢
栈:先进后出
队列: 先进先出
list 有序的(存储和读取的顺序是一样的)
有整数索引   允许重复的  
ArrayList 底层是数组结构  查询快增删慢
LinkedList 底层是链表  查询慢增删快
List接口
继承自Collection接口. 在java.util包下
特点
元素有序(存入和取出的顺序一样)
有整数的索引
元素可以重复
特有功能
void add(int index, E element): 添加元素
E remove(int index): 删除元素
E set(int index, E element): 修改元素
E get(int index): 获取元素
List的子类
ArrayList: 底层数组结构. 查询快, 增删慢
常用方法之前学过
LinkedList: 底层链表结构. 查询慢, 增删快
特有方法, 用于处理开头和结尾的元素
void addFirst(E e): 将元素添加到开头
void addLast(E e): 将元素添加到末尾
E getFirst(): 获取开头的元素
E getLast(): 获取结尾的元素
E removeFirst(): 删除第一个元素, 并返回删除的元素
E removeLast(): 删除最后一个元素, 并返回删除的元素
如何选择: 根据数据结构特点
查询多, 增删少, 用ArrayList
查询少, 增删多, 用LinkedList
不知道, 用ArrayList









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2