A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 毕业后八块腹肌 于 2018-11-14 17:15 编辑

object类和日期类和集合类等常用API

Object类的特点:
1. 是类层次的根类,每个类(直接或者间接地)使用object类作为父类
2. 所有类的对象都可以使用object类中定义的方法
public String toString() :返回该对象的字符串表示
   作用:
任何类的对象都可调用 toString(), 得到一个对象的字符串表示形式, 默认使用Object类中定义的方式 如果不想使用默认方式, 子类可以重写toString()方法, 转换为自己想要的内容
注意:
一般都要输出JavaBean的属性名和属性值, Alt + Insert 选择 toString() 即可重写
重写equals()的作用:
不重写时, 自定义对象默认继承Object类的equals()方法,
通过 == 比较地址值 但开发时,
一般要重写equals()方法, 让对象"根据属性值"来判断是否相等
IDEA快捷键: Alt+Insert, 选 equals() and hashCode()
Date类
注意: 不要导错包! 有2个包中都有Date类, 一个是java.sql.Date, 另一个是java.util.Date 我们用的是 java.util.Date
  date():创建date对象,表示当前时间
  Date(long date):创建Date对象把指定的毫秒值作为时间处理
  long getTime():获取Date对象保存的毫秒值
  void setTime(long time):修改Date对象的时间
Dateformat类和SimpleDateFormat类
String format(Date date): 格式化, 从Date对象转换为String对象
Date parse(String source): 解析, 从String对象转换为Date对象


java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
Calendar c = Calendar.getInstance(); // 代表了当前时间
int get(int field): 获取指定日历字段的值 int date = cal.get(Calendar.DAY_OF_MONTH)
void set(int field, int value): 修改指定日历字段为指定的值
void set(int year, int month, int date): 快速设置年月日
void add(int field, int amount): 调整指定日历字段的值. 正数增加, 负数减少
Date getTime(): Calendar转Date
void setTime(Date d): Date转Calenda

System类: currentTimeMillis()和arrayCopy()方法
static long currentTimeMillis(): 返回当前系统时间的毫秒值
static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中

StringBuilder
StringBuilder(): 构造一个空的StringBuilder容器
StringBuilder(String str): String转StringBuilder
StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象

包装类: 基本数据类型对应的引用数据类型
装箱: 从基本类型转换为对应的包装类对象装箱原理://Integer i1 = new Integer(1);//Integer i2 = new Integer("1");Integer i3 = Integer.valueOf(1); //使用包装类中的静态方法valueOf()拆箱: 从包装类对象转换为对应的基本类型拆箱原理:int num = i.intValue();


集合和数组的区别:
1. 数组长度不可变; 集合长度可变
2. 数组可以存基本类型或引用类型, 只能存同一种类型; 集合只能存储引用类型元素, 可以是多种类型元素


学习方法:
学习顶层:顶层接口/抽象类中共性的方法, 所有子类都可以使用
使用底层: 使用底层子类/实现类创建对象


Collection接口中定义了哪些方法, 分别有什么作用
java.util.Collection接口:
// 成员方法(子类都会实现)
boolean add(E e): 把给定的对象添加到当前集合中
void clear(): 清空集合中所有的元素
boolean remove(E e): 把给定的对象在当前集合中删除
boolean contains(E e): 判断当前集合中是否包含给定的对象
boolean isEmpty(): 判断当前集合是否为空(没有元素)
int size(): 返回集合中元素的个数
Object[] toArray(): 把集合中的元素,存储到数组中

迭代器iterrator接口
类似于遍历, 判断是否有下一个元素, 有则取出下一个, 直到没有
使用迭代器遍历集合的3步:
1. 使用集合对象的 iterator() 获取迭代器对象, 用 Iterator 接口接收.(多态)
2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素
3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素


// 使用迭代器遍历集合的标准写法:
Iterator<元素类型> iterator = 集合对象.iterator();
while (iterator.hasNext()) {
元素类型 变量名 = iterator.next();
}


迭代器的并发修改异常
并发修改异常的原因:
在使用迭代器迭代的过程中, 如果执行了改变集合长度的操作 (如 add(), remove(), clear()), 则会抛 出 ConcurrentModificationException 并发修改异常.

如何规避:
  1. 迭代过程中不要修改集合长度
  2. 在迭代的过程中添加, 删除元素, 要使用迭代器自带的方法, 而不能使用集合的方法 Iterator中的 remove() 方法 ListIterator中的 add(), remove() 方法

增强for, 普通for, 迭代器的区别:
增强for:
优点: 获取元素很方便, 格式简单
缺点: 没有普通for中的索引, 没有迭代器对象可以进行元素的增删
应用场景: 适用于遍历获取数组和集合元素的场景
普通for:
优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素
缺点: 格式繁琐
应用场景: 需要用到索引的场景
迭代器:
优点: 可以使用迭代器对象的方法操作元素
缺点: 格式繁琐
应用场景: 需要在迭代过程中增删元素的场景


泛型:
Generic Type. JDK 5 增加. 是一种未知的数据类型 定义集合时, 某些方法不知道使用什么类型时, 就可以使用泛型
创建集合对象时, 需要确定泛型具体的类型
泛型可以看作是一个"变量", 用来接收数据类型

不使用泛型的问题:
集合实际存储的是 Object 类型, 存入的元素无论是什么类型, 都会被提升为 Object, 取出来的也是 Object, 要想调用元素特有方法, 就要向下转型, 有可能发生类型转换异常 ClassCastException
泛型的好处:
1. 避免了类型转换的麻烦
2. 将运行时的类型转换异常, 转移到了编译时期 (有利于程序员提前发现问题)
定义带有泛型的类
修饰符 class 类名<代表泛型的名字>{}
定义泛型的方法和使用:
修饰符 <代表泛型的名字> 返回值类型 方法名(参数){}
定义泛型接口:
         修饰符 interface 接口名<代表泛型的变量>{}
public interface GenericInterfaceee<I>{
void method(I i);
}
实现类实现了泛型接口后可以有两种选择:
1:"定义实现类时", 确定泛型的具体类型
public class A implements GenericInterface {
@Override
public void method(String i) {}
}// 所有使用泛型的地方都会确定具体类型
2.定义实现类时仍然沿用泛型, 直到"创建该实现类对象时"才确定泛型的具体类型
public class A implements GenericInterface {
@Override
public void method(I i) {}// 泛型不需要确定具体类型, 当创建该类对象时再确定
}
A a = new A<>();
a.method(1);
A a2 = new A<>();
a2.method("dsfdsaf");

泛型通配符
不知道使用什么类型来接收时, 此时可以使用 来表示未知通配符
注意:只能接受数据,不能调用方法存储元素

List list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素
List list 其实是一个变量, 所以可以将一个集合赋值给它
如: List list = new ArrayList(); // 正确
但是不能直接new 泛型为?的集合对象:
如: List list = new ArrayList(); // 错误
使用方式:
不能创建对象使用
只能作为方法参数使用. (减少方法重载)
泛型的上限:
格式: 类型名称 <? extends Number> 对象名称
作用:只能接受泛型为该类型及其子类的对象(Number及其子类的泛型)
泛型的下限:
格式: 类型名称 <? super 类名>对象名称
作用: 只能接收泛型为该类型及其父类型的对象 (Number及其父类的泛型)


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马