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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© c3345136 初级黑马   /  2018-4-8 07:43  /  1645 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第七天


一.继承
        通过 extends 关键字可以实现类与类的继承
        继承格式
                publicclass 子类名 extends 父类名{}
        继承的好处
                提高了代码的复用性
                        多个类相同的成员可以放到同 一个类中
                提高了代码的维护性
                        如果功能的代码需要修改,修改一处即可
                让类和类之间产生了关系 是多态的前提
        继承的弊端
                好处的第三点同时也是继承的弊端
                        类与类之间产生了关系 让类的耦合性增强了
                        设计原则:高内聚低耦合
        java中类只支持单继承 不支持多继承 可以多层继承       
        java继承中成员变量的特点
        成员变量名称不一样,使用的时候非常简单
        成员变量 名称一样的情况 :
                在子类中访问变量:(就近 原则)
                        在方法的局部范围找,如果有就使用
                        在子类的成员范围找,如果有就使用
                        在父类的成员范围找 如果有就使用
                        如果还找不到 就报错
二.super
        super的用法和this很像
                this代表本类对象的引用
                super代表父类存储空间的标识(可以理解为父类对象引用 )
                用法(this和super均可如下使用)
        访问成员变量
                this.成员变量 super.成员变量
        访问构造方法
                this(...) super(...)
        访问成员方法
                this.成员方法() super.成员方法()
三.java继承中构造方法的特点
        子类中所有的构造方法默认都会访问父类 中空参的构造方法
        为什么呢?
                因为子类会继承父类的中的数据.可能还会使用父类的数据 所以 子类初始化之前 一定要先完成父        数据的初始化
        每一个构造方法的第一句默认语句都是super
        如果父类中没有构造方法 改怎么办呢?
                 在父类中加一个无参的构造方法
                通过使用super关键字去心事的调用父类的带参构造方法
                通过这里我们发现第一种解决方案 最简单
                所以建议永远自己给出无参构造方法
四.java中继承中成员方法的特点
        通过子类对象去访问一个方法
                首先在子类中找
                然后再在父类中找
                如果还是没有就会报错
五.方法重写
        方法重写:子类中出现了和父类一模一样的方法声明
        应用
        当子类需要父类的功能 而功能主体子类有自己特有的内容时 可以重写父类中的方法 这样重写父类中的方法         这样既沿袭了父类的功能 又定义了子类特有的功能
        注意事项
        注解
                @Override
                表明该方法重写父类的方法
        父类中私有方法不能被重写
        子类重写父类方法时 访问权限不能更低
        子类重写父类方法时 建议访问权限一模一样
六.多态
        多态概述
                某一个事物 在不同时刻表现出来的不同状态
        多态的前提和体现
                有继承 挂你
                有方法重写
                有父类引用只想子类对象
        成员访问特点
                成员变量访问特点
                        编译看左边 运行看左边
                成员方法访问特点
                        编译看左边 运行看右边
        多态的好处和弊端
                多态的好处
                提高了程序的拓展性
                多态的弊端
                        不能访问子类特有功能
                        那么如何访问子类的特有功能呢
                                通过多态中的转型
        多态中的转型问题
                向上转型
                        从子向父
                        父类引用只想子类对象
                向下转型
                        从父到子
                        父类引用转为子类对象

第八天

一.final
        修饰类 类不能被继承
        修饰成员变量 变量就变成了常量 只能被赋值一次
        修饰成员方法 方法不能被重写
二.Static
        被类的所有对象共享
        这也是我们判断是否使用static的条件
        可以通过类名直接调用
        优先于对象存在
        随着类的加载而加载
        可以修饰成员变量 成员方法
        静态方法只能访问静态的成员变量和成员方法
        静态方法中没有this super关键字
                静态的内容是随着类的加载而加载,this和super是随着对象的创建而存在
三.抽象类
        抽象类和抽象方法必须用abstract关键字修饰
        格式:
        public abstract class 类名 {}
        public abstract void 方法名();
        抽象类不一定有抽象方法
        有抽象方法的类一定是抽象类
        抽象类不能实例化
                那么如何实例呢?
                按照多态的方式,由具体的子类实例化.其实这也是多态的一种 抽象类多态
        抽象类的子类
        要么是抽象类
        要么重写抽象类中的所有抽象方法

        抽象类成员特点:
        成员变量
                可以是常量,变量
        构造方法
                有构造方法 但是不能实例化
                那么构造方法的作用是什么呢
                        用于子类访问父类数据的初始化
        成员方法
                可以有抽象方法 限定子类必须完成某些动作
                也可以有非抽象方法,提高代码复用性
四.接口
        用关键字interface 表示
        格式:public interface 接口名 {}
        类实现接口用implements表示
        格式:public class 类名 implements 接口名 {}
        接口不能实例化
                那么接口如何实例化呢?
                按照多态的形式 由具体的实现类实例化 其实这也是多态的一种 接口多态       
        接口的实现类
                要么是抽象类
                要么重写接口中的所有抽象方法
       
        接口中的成员特点
                成员变量只能是常量
                默认修饰符public static final
                没有构造方法
                因为接口主要是扩展功能的 而没有具体存在
                成员方法只能是抽象方法
                默认修饰符public abstract
五.类与类 类与接口 接口与接口的关系
        类与类
                继承关系 只能单继承 但是可以多层继承
        类与接口
                实现关系 可以单实现 也可以多实现 还可以再继承一个类的同时实现多个接口
        接口与接口
                继承关系 可以单继承 也可以多继承
六.抽象类和接口的区别
        成员区别
                抽象类  变量 常量 抽象方法 非抽象 方法
                接口 常量 抽象方法
        关系区别
                类与类 继承 单继承
                类与接口 实现 单实现 多实现
                接口 继承 单继承 多继承
        设计理念区别
                抽象类 被继承的体现是 "is a" 共性功能
                接口 被实现体现的是"like a" 扩展功能
七.包
        其实就是文件夹
        作用:对包进行分类管理
        包的格式
        package 包名
八.四种权限修饰符的概述和访问特点
        要想仅在本类中访问使用private修饰
        要想本包中的类都可以访问出了private修饰符 其他都可以
        要想本包中的类和其他包中的子类可以访问使用protected修饰
        要想所有包中的所有类都可以访问使用public修复


第九天

一.API
        概念
                应用程序编程接口 也称之为帮助文档
        快速使用API步骤
                打开帮助文档
                点击显示 找到索引 看到输入框
                你要学习什么内容 你就在框里输入什么内容
        看成员方法
                调用方法
                        看返回值类型:人家返回什么类型   你就用什么类型接受
                        看方法名:名字不要写错了
                        看形式参数:人家要几个参数 你就给几个 人家要什么数据类型 你就给什么数据类型的
二.Object
        Object:是类层次结构的根类, 所有的类都直接的或间接的继承自该类
        toString();
        equals();
三.String类
        概述
                "abc"是String类的一个实例 或者成为String类的一个对象
                字符串字面值"abc"也可以看成是一个字符串对象
                字符串是常量 一旦被赋值 就不能被改变
                字符串本质是一个字符数组
        构造方法
                String(String original):把字符串数据封装成字符串对象
                String(char[] value):把字符数组的数据封装成字符串对象
                String(char[] value,int index,int count):把字符数组的一部分数据封装成字符串对象

        获取功能
                charAt(int index):返回指定索引处的值
                length():返回字符串中的字符个数, 字符串的长度
四.StringBuilder
        概述
                是一个可变的字符串 字符串缓冲区类
        和String的区别
                String的内容是固定的
                StringBuilder的内容是可变的
        StringBuilder和String通过方法完成相互转换


第十天

一.数组冒泡排序
        概述
                冒泡排序就是相邻的两个元素进行两两比较 把元素值大的元素依次向后排
二.Arrays工具类
        提供类对数组操作的各种方法
        public static String toString(int[] a):把数组转成字符串
        public static void sort(int[] a):对数组进行升序排列
        构造方法的问题
                Arrays类中有构造方法,只不过 构造方法被private修饰 外界是无法使用的 因为外界无法使用 所以                帮助文档中就看不到
        工具类设计思想
                构造方法私有
                成员都用static修饰
三.包装类
        概述
                为了对基本数据类型进行更多更方便打的操作 java就针对每一种基本数据类型提供了一个 对应的                引用类型
        名称
                Integer  Character  其他首字母大写
        用法
                用于和字符串之间进行相互转换
四.Integer
        概述
                Integer类在对象中包装了一个基本数据类型int的值
        构造方法
                Integer(int value)
                Integer(String s)
                        注意:这个字符串必须由数字字符组成
        int和String类型的相互转换
                String. valueOf(int i)
                Integer.parseInt(String s);
五.自动装箱和拆箱
        自动装箱
                把基本数据类型转换为对应的包装类类型
        自动拆箱
                把包装类类型转换为对应的基本数据类型
        开发中的原则
                只要是对象 在使用前就必须进行不为null的判断
六.Date类
        概述
                表示特定的瞬间 精确到毫秒
        构造方法
                Date() 根据当前时间创建的日期对象
                Date(long date) 根据给定的毫秒值创建对象 从1970 年 1月 1日 00:00:00开始
        成员方法
                public long getTime() 获取的是毫秒值 从1970年1月1日00:00:00开始
                public void setTime(long time) 设置时间 给的是毫秒值
七.SimpleDateFormat类
        概述
                是一个以与语言环境有关的方式来格式和解析日期的具体类

第十一天

一.集合
        概述
                是一个容器 是用来存储和获取数据的
        为什么出现集合类
                为了方便对多个对象进行操作 我们就必须把这多个对象进行存储 而要想存储多个对象 就不能是基                本的变量了 应该是一个容器类型的变量 回顾我们学过的知识 有哪些容器类型的呢?
                数组 StringBuilder 结果是字符串  未必能满足我们的需求
        特点
                长度可变
二.Collection
        概述
                是单列集合的顶层接口
        实现               
                jdk不提供此接口的任何直接 实现 它提供更具体的子接口(如 Set和list)实现
                创建Collecttion集合的对象 我们采用的是多态的方式 使用的具体的ArrayList类
        格式
                Collection<E>;
                E是一种特殊的数据类型 泛型  以后再提
                在出现E的地方用引用数据类型替换
        成员方法
                add 添加元素
                remove(Object o) 从集合中移除元素
                clear() 清空集合中的元素
                contains(Object o) 判断集合中是否存在指定的元素
                isEmpty() 判断集合是否为空
                size 集合的长度 也就是集合中元素的个数
        遍历
                Interator<E>iterator():返回在此 collection 的元素上进行迭代的迭代器。
                通过集合对象调用iterator()方法得到迭代器对象
                E next():返回迭代的下一个元素。
                boolean hasNext():如果仍有元素可以迭代,则返回 true。
三.List集合
        特点
                有序  此接口的用户可以对列表中的每个元素的插入位置进行精确的控制
                和Set不同 存储的元素可以重复
        特有方法
                add(int index,E element):在指定位置添加元素
                remove(int index):删除指定位置的元素
                get(int index):获取指定位置的元素
                set(int index,E element):修改指定位置的元素
四.列表迭代器
        概述
                ListIterator<E> listIterator():返回此列表元素的列表迭代器
        特有功能
                E previous():返回列表中的前一个元素。
                boolean hasPrevious():如果以逆向遍历列表,列表迭代器有多个元素,则返回 true

五.并发修改异常
        产生的原因:
                迭代器依赖于集合而存在,在判断成功后,集合中添加了新的元素,而迭代器并不知道,所有就                报错了。
                其实这个问题说的是:迭代器遍历集合中的元素的时候,不要使用集合对象去修改集合中的元素。
                如何解决呢?
                A:迭代器遍历的时候,我可以通过迭代器修改集合中的元素
                        元素是跟在刚才迭代的元素后面的
                B:集合遍历的时候,我可以通过集合对象修改集合中的元素
                        元素是在最后添加的
六.增强for
        概述
                是for循环的一种
        格式
                for(元素的数据类型 变量名 : 数组名或者Collection集合对象名) {
        好处
                简化了数组和Collection集合的遍历
        弊端
                目标不能为null。如何保证呢?在遍历前先对目标进行不为null的判断。
七.数据结构
        栈        先进后出
        队列        先进先出
        数组        查询快 增删慢
        链表        查询慢 增删快

第十二天

一.Set集合
        概述
                元素唯一 存储元素无序 一个不包含重复的 collectction
        HashSet
                它不保证set的迭代顺序; 特别是它不保证改顺序恒久不变
        HashSet保证元素唯一性的原理?
                通过查看add方法的源码,我们知道了添加功能的执行过程中,是进行了数据的判断的。
                这个判断的流程是:
                首先比较对象的哈希值是否相同,这个哈希值是根据对象的hashCode()计算出来的。
                如果哈希值不同,就直接添加到集合中
                如果哈希值相同,继续执行equals()进行比较,
                        返回的是true,说明元素重复,不添加。
                        返回的是false,说明元素不重复,就添加。
                如果我们使用HashSet集合存储对象,你要想保证元素的唯一性,就必须重写hashCode()和                equals()方法。
二.Map集合
        概述
                将键映射要值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值
                public interface Map<K,V>
        成员方法
                put(K key,V value):添加元素
                remove(Object key):根据键删除键值对元素
                clear():移除所有的键值对元素
                containsKey(Object key):判断集合是否包含指定的键
                containsValue(Object value):判断集合是否包含指定的值
                isEmpty():判断集合是否为空
                size():返回集合中的键值对的对数
        获取功能
                V get(Object key):根据键获取值
                Set<K> keySet():获取所有键的集合
                Collection<V> values():获取所有值的集合
        遍历
                思路1
                        Map看成是一个夫妻对的集合
                        A:把所有的丈夫给集中起来
                        B:遍历丈夫的集合,获取到每一个丈夫
                        C:根据丈夫去找对应的妻子
                转换1
                        A:获取所有键的集合
                        B:遍历键的集合,获取到每一个键
                        C:根据键去找值       

1 个回复

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