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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

day01 Object类 常用API
Object类Object类概述
java.lang.Object类: 根类, 所有类的父类
        // 成员方法
        String toString() :返回该对象的字符串表示
        boolean equals(Object obj) :指示其他某个对象是否与此对象"相等"
Object类的特点:
        是所有类的父类, 任何一个类都直接或间接地继承自Object类, 并可以使用Object类中定义的方法
        一个类如果没有指定继承某个父类, 则默认继承Object类
Object类之toString方法
public String toString() :返回该对象的字符串表示
        作用:
                任何类的对象都可调用toString(), 得到一个对象的字符串表示形式, 默认使用Object类中定义的方式
                如果不想使用默认方式, 子类可以重写toString()方法, 转换为自己想要的内容
一般我们都要输出JavaBean的属性名和属性值, Alt + Insert 选择 toString() 即可重写
Object类之equals方法
public boolean equals(Object obj) :指示其他某个对象是否与此对象"相等"
重写equals()的作用:
        不重写时, 自定义对象默认继承Object类的equals()方法, 通过 == 比较地址值
        但开发时, 一般要重写equals()方法, 让对象根据属性值来判断是否相等
IDEA快捷键: Alt+Insert, 选 equals() and hashCode()
DateFormat类及其构造方法
java.text.DateFormat抽象类: 用于格式化和解析时间. 提供了方便的方法
        // 常用成员方法 (抽象类不能创建对象, 但可以有非抽象的方法供子类使用)
        String format(Date date): 格式化, 从Date对象转换为String对象
        Date parse(String source): 解析, 从String对象转换为Date对象
Calendar对象的获取方式java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
        // 静态方法
        static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象, 表示当前系统时间      
// 获取日历对象的示例
Calendar c = Calendar.getInstance();  // 代表了当前时间
Calendar.getInstance() 会根据当前系统获取合适的子类对象, 我们获取到的是 GregorianCalendar
System类System类之获取时间毫秒值
java.lang.System类: 系统相关功能
        // 静态方法
        static long currentTimeMillis(): 返回当前系统时间的毫秒值
StringBuilder类字符串拼接问题
+号拼接字符串的问题:
        String是不可变的, 使用加号进行字符串拼接, 会创建很多额外的对象, 浪费内存空间
补充:
实际上+加号在最终执行时, 会被翻译为:
        new StringBuilder("原字符串").append("要拼接的字符串").toString();
额外创建了多余的StringBuilder对象
StringBuilder概述与构造
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
        // 构造方法
        StringBuilder(): 构造一个空的StringBuilder容器
        StringBuilder(String str): String转StringBuilder
StringBuilder常用方法
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串. 底层使用数组保存
        // 常用方法
        StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象
        String toString(): 将当前StringBuilder对象转换为String对象
补充:
String和StringBuilder互转: 利用StringBuilder
        StringBuilder(String str): String转StringBuilder
        String toString(): StringBuilder转String
day02--Collection 泛型
Collection集合概述
集合: 长度可变容器, 可以存储多个对象
集合和数组的区别:
        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(): 把集合中的元素,存储到数组中   
        Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到)
        Iterator接口: 迭代器
测试Collection接口的方式:
        使用多态方式创建对象: Collection c = new ArrayList();
        编译看左边, 这样只能调用Collection接口中定义的方法, 不会出现子类特有方法
迭代器迭代器Iterator接口介绍和迭代步骤
迭代: 类似于遍历, 判断是否有下一个元素, 有则取出下一个, 直到没有
迭代器: 用于遍历集合的对象
java.util.Collection<E>接口:
        // 成员方法(子类都会实现)
        Iterator<E> iterator(): 获取集合的迭代器对象   
java.util.Iterator<E>接口: 迭代器
        // 成员方法
        boolean hasNext(): 判断是否有下一个元素
        E next(): 获取下一个元素
        void remove(): 删除next指向的元素   
使用迭代器遍历集合的3步:
        1. 使用集合对象的 iterator() 获取迭代器对象, 用 Iterator 接口接收.(多态)
        2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素
        3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素
迭代器的实现原理
集合和迭代器对象的关系:
        每个集合都有对应的一个迭代器对象
迭代器的原理:
        迭代器有一个指针(其实就是个变量保存索引值), 最初指向集合的 -1 索引
        hasNext() 方法可以判断下一个索引是否有元素
        next() 方法移动指针到下一个索引, 并返回元素
补充:
注意事项:
        1. 迭代器对象迭代完毕后, 指针已经指向最后一个元素, 没有下一个元素了. 如果想再次从头遍历集合, 要获取新的迭代器对象
        2. 在使用迭代器迭代的过程中, 如果执行了改变集合长度的操作 (如add(), remove(), clear()), 则会抛出 ConcurrentModificationException 并发修改异常. 如果要在迭代的过程中添加, 删除元素, 要使用迭代器自带的方法, 而不能使用集合的方法
增强for循环
作用: 遍历数组.遍历集合
增强for对于数组和集合的操作:
        对数组只是写法上的优化, 底层还是普通for循环
        对集合是通过迭代器实现的
补充:
增强for, 普通for, 迭代器的区别:
        增强for:
                优点: 获取元素很方便, 格式简单
                缺点: 没有普通for中的索引, 没有迭代器对象可以进行元素的增删
                应用场景: 适用于遍历获取数组和集合元素的场景
        普通for:
                优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素
                缺点: 格式繁琐
                应用场景: 需要用到索引的场景
        迭代器:
                优点: 可以使用迭代器对象的方法操作元素
                缺点: 格式繁琐
                应用场景: 需要在迭代过程中增删元素的场景
泛型泛型的概述以及不使用泛型产生的问题
泛型: Generic. JDK 5 增加. 是一种未知的数据类型
        定义集合时, 某些方法不知道使用什么类型时, 就可以使用泛型
        创建集合对象时, 需要确定泛型具体的类型        
泛型可以看作是一个变量, 用来接收数据类型
泛型的好处
不使用泛型的问题:
        集合实际存储的是 Object 类型, 存入的元素无论是什么类型, 都会被提升为 Object, 取出来的也是 Object, 要想调用元素特有方法, 就要向下转型, 有可能发生类型转换异常 ClassCastException
泛型的好处:
        1. 避免了类型转换的麻烦
        2. 将运行时的类型转换异常, 转移到了编译时期 (有利于程序员提前发现问题
定义和使用含泛型的类
定义泛型
        <泛型名>
泛型的定义和使用
        泛型在定义时, 不能是具体的类型, 只是一个变量名
        泛型在使用时, 必须是具体的数据类型   
    // 带有泛型的类定义格式
    修饰符 class 类名<代表泛型的名字> {  // 泛型的变量一般用一个大写字母表示, 但也可以是多个字母
    }
类中泛型在创建对象时, 确定泛型的具体类型
定义含有泛型的方法与使用
方法中的泛型定义位置:
        修饰符 和 返回值类型 之间     
        // 带有泛型的方法定义格式
    修饰符 <代表泛型的名字> 返回值类型 方法名(参数){
    }
方法中定义泛型后, 返回值类型和参数类型都可以使用泛型
方法泛型的使用:
        在调用方法时确定泛型的具体类型
定义与使用含有泛型的接口
定义泛型接口与定义泛型类一样
    // 带有泛型的类定义格式
    修饰符 interface接口名<代表泛型的变量> {
    }
实现类实现了泛型接口后可以有2种选择:
        1. 定义实现类时就确定泛型的具体类型
        2. 定义实现类时仍然沿用泛型, 直到创建该类对象时才确定泛型的具体类型
泛型定义总结:
        定义在类上的泛型:
                有效范围: 整个类中都有效
                何时确定具体类型: 创建该类对象时确定泛型的具体类型
        定义在方法上的泛型:
                有效范围: 方法中(包括返回值类型和参数类型)有效
                何时确定具体类型: 调用方法传参时确定泛型的具体类型
        定义在接口上的泛型:
                有效范围: 接口中
                何时确定具体类型:
                        1. 子接口或实现类定义时确定泛型的具体类型
                        2. 创建实现类对象时确定泛型的具体类型
泛型通配符
泛型通配符:
        不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符
        示例: List<?> list  接收泛型是任意类型的List对象
        注意: 只能接收数据, 不能调用方法存储元素
                List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素
                List<?> list 其实是一个变量, 所以可以将一个集合赋值给它
                        如: List<?> list = new ArrayList<String>();
        使用方式:
                不能创建对象使用
                只能作为方法参数使用. (减少方法重载)
泛型的上限:
        格式: 类型名称<? extends 类名> 对象名称
        示例: List<? extends Number> list
        作用: 只能接收该类型及其子类 (Number及其子类的泛型)
泛型的下限:
        格式: 类型名称<? super 类名> 对象名称
        示例: List<? super Number> list
        作用: 只能接收该类型及其父类型 (Number及其父类的泛型)

评分

参与人数 1黑马币 +5 收起 理由
ztxtxwd + 5 很给力!

查看全部评分

1 个回复

倒序浏览
竟然比我的多
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马