本帖最后由 昵称12138 于 2018-7-26 10:09 编辑
Object类、常用API和Collection java.lang.object类是Java语言的根类,即所有类的父类,任何类都直接或者间接的继承Object 构造方法: Object(); 方法:
- public String toString(): 返回该对象的字符串表示形式
Object类中定义的该方法:return getClass().getName() + "@" +Integer.toHexString(hashCode()); 即类的全路径 @ 哈希码值() 一般我们会重写自定义类的toString()方法,Idea中为我们提供了自动生成的toString方法
- public boolean equals(Object obj): 返回参数对象是否与此对象”相等“
Object类中定义的该方法:return (this == obj);即比较对象和参数对象的地址值 一般我们会重写自定义类的equals()方法,Idea中为我们提供了自动生成的toString方法 [Java] 纯文本查看 复制代码 if (this == o) return true;//先比较地址,地址相同内容肯定相同
if (o == null || getClass() != o.getClass()) return false;//再判断对象是否为null,或者对象是否为同类
Person person = (Person) o;//向下转型,将Object对象转成Person对象
return age == person.age && Objects.equals(name, person.name);//引用对象String需要使用equals比较
3. Objects Object类的工具类 在比较两个对象时(比较的对象和被比较的对象),如果比较的对象为空,Object中的equals()方法会抛出空指针异常,而Objects中的equals方法优化了这个问题 public static boolean equals (Object a, Object b) 源码为: return (a == b) || (a != null && a.equals(b));
java.util.Date类,表示特定的瞬间,精确到毫秒,可以通过方法来设定自己所表示的时间,可以表示任意的时间 构造方法: public Date():创建的是一个表示当前系统时间的Date对象,默认为当前系统时间 public Date(long date):根据“参数时间”创建Date对象,参数是一个毫秒值,是距1970-1-1 00:00:00 GMT(格林尼治)的时间 方法: getTime();返回当前Date对象时间距基准时间的毫秒差值 注意: 直接打印Date对象得到的是标准格式的当前系统时间 Thu Jul 12 15:55:51CST 2018 星期 月份 日期 时间 时区 年份 [Java] 纯文本查看 复制代码 Date date = new Date();
System.out.println(date);//Thu Jul 12 15:55:51 CST 2018
System.out.println("===============");
Date date2 = new Date(0);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970
System.out.println("===============");
Date date3 = new Date(1000 * 60 * 60);
System.out.println(date3);//Thu Jan 01 09:00:00 CST 1970
System.out.println(date.getTime());//1531382151431
java.text.DateFormat类,是日期/时间格式化子类的抽象类,不能直接创建对象,可以完成日期和文本之间的转换 格式化:按照指定的格式,从Date对象转换为String对象 解析:按照指定的格式,从String对象转换为Date对象 子类:SimpleDateFormat 构造方法: SimpleDateFormat(String pattern),参数为规则yyyy-MM-dd HH:mm:ss 方法: public String format(Datedate):将日期对象格式化为指定类型的字符串 public Date parse(Stringstr):将字符串按照指定类型解析为日期对象
java.util.Calendar日历类,是抽象类,不能直接创建对象,可以通过静态方法创建子对象 静态常量 YEAR MONTH DAY_OF_MONTH/DATE 静态方法 getInstance():返回当前系统时间的日历对象 方法: public int get(int field):返回当前日历参数字段的值 public void set(int field, int value):将当前日历该参数字段值更改为value public void add(int field, int amount):为给定的日历字段添加或减去指定的时间量 public final DategetTime():返回一个表示此日历时间值(从历元至现在的毫秒偏移量)的 Date 对象 注意: 直接打印Calendar对象得到的是一组包含所有日历信息的数据
java.lang.System类为final类,不能有子类,同时System类中构造方法私有,也不能创建对象 System类中的方法都由static修饰,可以直接类名.方法名调用 方法:
- public long native currentTimeMillis();返回当前时间距历元时间的毫秒值
- static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
注意: 如果目标数组指定位置存在元素,将会被替换。
java.lang.StringBuilder,又称为可变字符序列,它是一个类似于String的字符串缓冲区,提供了在自己空间中操作字符串的方法 构造方法 public StringBuilder(),构造一个空的StringBuilder容器 public StringBuilder(Stirngstr),构造一个StringBuilder容器,并将字符串添加进去 方法 public String append(...) 添加任意类型数据的字符串形式,并返回当前对象自身
java.util.Collection中定义的是所有单列集合中共性的方法,所有的单列集合都可以使用共性的方法,没有带索引的方法 集合和数组的区别 1. 数组的长度固定,集合长度可变 2. 数组中的元素必须是同一种,可以是基本类型,也可以是引用类型集合可以存储不同类型的对象(一般我们都存储同一类型),只能存储引用类型常用的方法 public boolean add(E e) :把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素。 public boolean remove(E e) :把给定的对象在当前集合中删除。 public boolean contains(E e) :判断当前集合中是否包含给定的对象。 public boolean isEmpty(): 判断当前集合是否为空。 public int size() : 返回集合中元素的个数。 public Object[] toArray() :把集合中的元素,存储到数组中。
迭代:在Collection中可以作为获取元素的一种方式
java.util.Iterator<E>迭代器接口, Collection中获取迭代器的方法 Iterator<E> iterator() 方法: E next() 获取元素,获取之后指向下一个元素 boolean hasNext() 判断是否还有元素遍历 使用步骤:
- 使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
- 使用Iterator接口中的方法hasnext()判断还有没有下一个元素
- 使用Iterator接口中的方法next()取出集合的下一个元素
迭代器的实现原理 迭代器使用指针来跟踪元素,开始时指针在-1的位置,next()方法依次向后移动指针 注意:
- 迭代完成后,如果想重新遍历,需要再次创建迭代器对象
- 迭代器获取元素时不能使用集合的方法进行修改,否则会发生异常ConcurrentModificationException,并发修改异常
原因:迭代器是依赖于集合的,可以看作是集合的副本,迭代器在操作的时候,如果发现和集合不一样,则抛出异常 foreach:增强for循环,所有实现了Iterable接口的类都可以使用foreach,所有的单列集合都可以使用foreach 格式: for(元素的类型 变量名 : 集合或者数组对象名) { sout(变量名); } 注意:在增强for循环中不能修改集合,否则会出现并发修改异常,因为增强for循环底层也是迭代器 增强for,普通for,迭代器比较: 优点:获取元素很方便,格式简单 缺点:没有索引,没有迭代器对象可以进行元素的增删 应用场景: 适用于遍历获取数组和集合元素的场景 2. 普通for: 优点:有索引可以使用,可以在遍历过程中增删元素 缺点:格式繁琐 应用场景: 需要用到索引的场景 3. 迭代器: 优点:可以使用迭代器对象的方法操作元素 缺点:格式繁琐
应用场景: 需要在迭代过程中增删元素的场景
使用集合存储自定义对象时,如果不使用泛型,默认为Object类型 由于集合可以存储任意类型的对象,当我们存储了不同类型的对象,就有可能在向下转型的时候出现类型转换异常 ClassCastException:学生对象不能转换成字符串 java为了解决这个问题,给我们提供了一种机制,叫做泛型,限制了集合中存储元素的类型,在编译期间就可以检查错误
泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点 泛型好处:避免类型转换异常的问题,简化代码的书写 把运行期异常,提升到了编译期
泛型的定义和使用 泛型可以使用在不同的类、方法、接口当中,将数据类型作为参数进行传递,赋值给代表泛型的变量 定义格式:修饰符 class 类名<代表泛型的变量>{} 泛型在定义的时候不具体,使用的时候才具体 在创建对象的时候确定泛型 ArrayList<String> list = newArrayList<>(); 注意:泛型是没有继承概念的,不能接收除了指定类型的其它类型 含有泛型的类 泛型类的定义格式 修饰符 class类名<泛型>{} 代表未来的类型 一旦确定了泛型的类型,那么MVP就变成了具体的类型
含有泛型的方法 定义格式 修饰符 <泛型类型> 返回值类型 方法名(参数列表){}
含有泛型的接口 定义格式 修饰符 Interface 接口名称 <泛型> {} 注意:如果实现类也没有确定具体类型,那么实现类的类名也要加上泛型
泛型通配符 当使用泛型类或者接口时,接收参数时,泛型类型不确定,可以通过通配符<?>表示, 但是一旦使用了通配符,只能使用Object类中的共性方法,集合中元素自身方法无法使用
受限泛型 ? extends Number 设定了泛型的上限,只能接收Number及其子类 能接收的类型 Number Integer ? super Number 设定了泛型的下限,只能接收Number及其父类 能接收的类型 Number Object
|