黑马程序员技术交流社区
标题:
左某人前两天的学习笔记(ctrl+v)
[打印本页]
作者:
859182973
时间:
2018-11-20 16:18
标题:
左某人前两天的学习笔记(ctrl+v)
Object类
类 Object 是类层次结构的根类。
每个类都使用 Object 作为超类。
所有对象(包括数组)都实现这个类的方法。
Object 是所有类的父类.
Object类: toString方法
任何类的对象都可调用 toString(), 得到一个对象的字符串表示形式, 默认使用Object类中定义的方式 如果不想使用默认方式, 子类可以重写toString()方法, 转换为自己想要的内容
.equals
1.
任何对象都能用
Object
类型进行接收
2.
equals
()
方法具有对称性
,
也就是
a.
equals
(b)
和
b.
equals
(a)
效果一样
3.
如果比较双方一个常量一个变量
,
推荐把常量字符串写在前面
: "abc".
equals
(str).
可以避免空指针异常的可能
重写equals()的作用: 不重写时, 自定义对象默认继承Object类的equals()方法, 通过 == 比较地址值 但开发时, 一般要重写equals()方法, 让对象
"根据属性值"
来判断是否相等IDEA快捷键: Alt+Insert, 选 equals() and hashCode()
日期时间相关的类
long和Date对象互转
string和Date对象互转
calendar对象和Date对象互转
毫秒值的概念和作用
时间原点是
从
0
时区
1970-01-01 00:00:00
开始
1(秒)=1000(毫秒)
十位数字精确到秒
十三位数字精确到毫秒
Date类: 构造方法, 成员方法
创建一个Date对象是表示当前的系统时间
Date date =
new
Date();
System.
out
.println(date);
Collecttion泛型 集合工具类
集合: 长度可变容器, 可以存储多个对象集合和数组的区别: 1. 数组长度不可变; 集合长度可变 2. 数组可以存基本类型或引用类型, 只能存同一种类型; 集合只能存储引用类型元素, 可以是多种类型元素
集合框架
Collection
接口
:
单列集合顶层
|_ List
接口
:
元素存取有序
,
可重复
,
有索引
|_ Set
接口
:
不可重复
,
无索
Collection接口中定义了哪些方法, 分别有什么作用
// 多态创建对象: 父类引用指向子类对象
ArrayList list =
new
ArrayList();list.共有方法();list.特有方法();Collection<String> coll =
new
ArrayList<>();
// 多态调用方法
coll.共有方法();
boolean add(E e): 把给定的对象添加到当前集合中 void clear(): 清空集合中所有的元素 boolean remove(E e): 把给定的对象在当前集合中删除 boolean contains(E e): 判断当前集合中是否包含给定的对象 boolean isEmpty(): 判断当前集合是否为空(没有元素) int size(): 返回集合中元素的个数 Object[] toArray(): 把集合中的元素,存储到数组中 Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到) Iterator接口: 迭代器
迭代器
Iterator<E>
iterator
()
:
获取集合的迭代器对象
迭代
:
类似于遍历
,
判断是否有下一个元素
,
有则取出下一个
,
直到没有
迭代器
:
用于遍历集合的对象
增强for循环
增强
for
, 普通
for
, 迭代器的区别: 增强
for
: 优点: 获取元素很方便, 格式简单 缺点: 没有普通
for
中的索引, 没有迭代器对象可以进行元素的增删 应用场景: 适用于遍历获取数组和集合元素的场景 普通
for
: 优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素 缺点: 格式繁琐 应用场景: 需要用到索引的场景 迭代器: 优点: 可以使用迭代器对象的方法操作元素 缺点: 格式繁琐 应用场景: 需要在迭代过程中增删元素的场景
泛型
泛型: Generic Type. JDK
5
增加. 是一种未知的数据类型 定义集合时, 某些方法不知道使用什么类型时, 就可以使用泛型 创建集合对象时, 需要确定泛型具体的类型 泛型可以看作是一个
"变量"
, 用来接收数据类型
不使用泛型的问题
:
集合实际储存的是Object
类型
,
存入的元素无论是什么类型
,
都会被提升为
Object,
取出来的也是
Object,
要想调用元素特有方法
,
就要向下转型
,
有可能发生类型转换异常
ClassCastException
泛型的好处
避免了类型转换的麻烦
将运行时的转换异常,转移到了编译时期(有利于程序yuan提前发现问题)
定义和使用含泛型的类
定义泛型 <泛型名> 泛型的
"定义"
和
"使用"
泛型在
"定义"
时,
"不能是"
具体的类型, 只是一个变量名:
public
class ArrayList<E> {} 泛型在
"使用"
时,
"必须是"
具体的数据类型 ArrayList<Integer>
// 带有泛型的类定义格式
修饰符 class 类名<代表泛型的名字> {
// 泛型的变量一般用一个大写字母表示, 但也可以是多个字母
} 类中的泛型,
"在创建对象时"
, 确定泛型的具体类型
方法中的泛型定义位置: 修饰符 和 返回值类型 之间 // 带有泛型的方法定义格式 修饰符 <代表泛型的名字> 返回值类型 方法名(参数){ } 方法中定义泛型后, 返回值类型和参数类型都可以使用泛型方法泛型的使用: "在调用方法时"确定泛型的具体类型
定义与使用含有泛型的接口
定义泛型接口与定义泛型类一样
// 带有泛型的类定义格式
修饰符 interface 接口名<代表泛型的变量> { }
public
interface GenericInterface<I> { void method(I i); }实现类实现了泛型接口后可以有
2
种选择:
1
.
"定义实现类时"
, 确定泛型的具体类型
public
class A implements GenericInterface<String> {
@Override
public void method(String i) {}
// 所有使用泛型的地方都会确定具体类型
}
2
. 定义实现类时仍然沿用泛型, 直到
"创建该实现类对象时"
才确定泛型的具体类型
public
class A<I> implements GenericInterface<I> {
@Override
public void method(I i) {}
// 泛型不需要确定具体类型, 当创建该类对象时再确定
} A<Integer> a =
new
A<>(); a.method(
1
); A<String> a2 =
new
A<>(); a2.method(
"dsfdsaf"
);
泛型定义总结: 定义在类上的泛型: 有效范围: 整个类中都有效 何时确定具体类型: 创建该类对象时确定泛型的具体类型 定义在方法上的泛型: 有效范围: 方法中(包括返回值类型和参数类型)有效 何时确定具体类型: 调用方法传参时确定泛型的具体类型 定义在接口上的泛型: 有效范围: 接口中 何时确定具体类型: 1. 子接口或实现类定义时确定泛型的具体类型 2. 创建实现类对象时确定泛型的具体类型
泛型通配符
泛型通配符: 不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符 示例: List<?> list 接收泛型是任意类型的List对象 public void addAll(List<?> list){
// ...
} ArrayList<Integer> list1 =
new
ArrayList<>(); ArrayList<String> list2 =
new
ArrayList<>(); addAll(list1); addAll(list2); 注意: 只能接收数据, 不能调用方法存储元素 List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素 List<?> list 其实是一个变量, 所以可以将一个集合赋值给它 如: List<?> list =
new
ArrayList<String>();
// 正确
但是不能直接
new
泛型为?的集合对象: 如: List<?> list =
new
ArrayList<?>();
// 错误
使用方式: 不能创建对象使用 只能作为方法参数使用. (减少方法重载)泛型的上限: 格式: 类型名称<? extends 类名> 对象名称 示例: List<? extends Number> list 作用: 只能接收泛型为该类型及其子类的对象 (Number及其子类的泛型)泛型的下限: 格式: 类型名称<?
super
类名> 对象名称 示例: List<?
super
Number> list 作用: 只能接收泛型为该类型及其父类型的对象 (Number及其父类的泛型)
Ctrl+C
Ctrl+V
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2