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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 哒哒哒~~ 初级黑马   /  2018-4-14 17:41  /  486 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-20 10:41 编辑


【石家庄校区】学习总结


继承
extendsJava继承特点
  • 不支持多继承 ,单一继承,但支持多层继承,
  • 继承的变量特点:


    • 子类只能获取父类的非私有成员;
    • 子父类变量名不一样的时候调用父类的;
    • 子父类变量名一样获取子类的(就近原则);



关键字
  • super (调用父类);
  • this (调用子类)


  • 子父类局部变量名一样时:


    • super. 变量名>>调用父类;
    • this . 变量名>> 调用子类;



方法重写
  • 子父类 方法完全一样  子类重写父类;
  • 子类没有方法 则直接调用父类的方法;
  • 就想用父类重写前的 可以用super 调用父类的;


重写注意


    • 不能重写父类的私有方法;
    • 权限必须大于父类;



执行顺序
  • 子父类继承中调用子类构造会优先调用父类无参构造;


    • 可以使用关键字 super( ) 调用父类的



抽象 abstract特点
  • 抽象方法只能在抽象类中 必须写 sbstaract
  • 抽象类不可以创建对象(也就是不可以实例化);
  • 抽象类中可以有非抽象方法
  • 抽象类和类的关系也是继承
  • 一个类继承抽象类


    • 重写抽象类的方法;
    • 或者自己也是抽象类;


  • 成员变量:


    • 可以有成员变量;
    • 可以有成员方法;


  • 成员方法:


    • 可以有抽象方法;
    • 可以有非抽象方法;


  • 构造方法:


    • 可以有构造方法(需要对抽象类的成员变量初始化);



final 关键字(最终的意思);
  • 可以修饰类 (不能被继承);
  • 成员变量(是常量)(格式全部大写_多个单词以下划线分割);
  • 成员方法 (不可以被重写);


接口 interface接口的特点
  • 只能有抽象方法
  • 只能有常量(默认使用 public static final修饰)
  • 默认使用public 修饰 只能使用(默认) 使用abstract修饰;


注意: !!
  • 接口不能创建对象(实例化)
  • 类与接口的关系是实现关系 类必须全部是先接口;implements 关键字


    • 类与类 : 继承关系,单一继承,多层继承;
    • 类与接口: 实现关系,多实现;
    • 接口与接口: 继承关系 多继承;



多态多态的前提
  • A 子父类继承关系
  • B 方法重写
  • C父类引用指向子类


多态的成员特点
  • 成员变量
  • 成员方法
  • 静态方法


    • 编译时都看左边
    • 运行时成员方法看右边  (  其余看左边  )



成员内部类
  • 类中方法外
  • 与成员方法 成员变量位置一致;


    • 调用---->xxx=new 类1().new类2();



成员内部类修饰符


    • privately 私有 无法在其他类中访问
    • static 静态 可以直接类名调用,不用创建外部对象;
    • abstract . final 修饰 [很少用]  


      • 抽象需要内部类继承;



    局部内部类
  • 出了方法无法使用


匿名内部类
  • 没用名字的局部内部类
  • 定义在方法中
  • 定义对的时候必须创建他的对象



  • new 类/接口(){
        如果是继承 需要重写父类方法;
        如果是接口 需要全部实现方法;
    }.继承重写 或者实现的 方法;


获取字节码对象
  • 通过父类调用getclass()    Class clazz=x.getclass()
  • 通过类调用 class  类名.class
  • .....class 静态方法 forName(全路径名) Class clazz= class.forName(全路径名 包类等);  反射会用到;
  • 注意:


    • 同一个类的字节码对象只有一个, 地址值是相同的, 无论创建了多少个对象
    • Class和class区别?


      • Class是一个类, 表示字节码文件的类
      • class是一个关键字, 用于定义一个类



  • 获取类的全类名快捷键:


    • 光标移到类名, 鼠标右键, 点击Copy Qualified Name



System类
  • static void arrayCopy(Object src, int srcPos, Object dest, int destPos, int length): 复制源数组中指定长度个元素到一个新数组中


    • src: 源数组
    • srcPos: 指定从源数组的哪个索引开始复制
    • dest: 目标数组
    • destPos: 指定目标数组接收元素的索引位置
    • length: 目标数组接收元素的个数


  • 注意: 复制时注意数组长度, 不要超出索引, 否则会出现数组越界异常返回系统时间
    返回系统时间
  • System.currenTimemillis( )返回当前系统时间;毫秒单位;
    结束程序
  • System.exit(0)j结束虚拟机 0表示正常结束; 非0表示异常结束


Date类 从1970年1月1号0:00:00开始格式Date date=new Date(); 倒包
  • syso(date)返回的是当前系统时间;
  • syso(date.tolocalestring) 格式成可以看懂的系统时间;
  • date.getTime()  获取当前系统时间的毫秒值;Long类型;
  • date.setTime(xxlong)给其设定时间


格式 Date date=new Date(long类型的 );
  • 给其指定值  date等于 给定的值 从1970年1月1号0:00:00开始开始加


simpleDateFormat
SimpleDateFormat类: 专门用于格式化和解析时间
  • 构造方法:


    • SimpleDateFormat SimpleDateFormat(String pattern): 创建对象同时指定格式


  • 成员方法:


    • 格式化: Date对象 -> 指定格式的字符串, 如2017-05-01 12:34:12


      • String str=sdf.format(Date date): 格式化Date对象返回字符串


    • 解析: 字符串 -> Date对象


      • Date parse(String source): 将字符串解析为Date对象


        • 该方法抛出ParseException解析异常, 因为字符串可能不匹配指定的格式





calendar 日历类
  • 格式


    • Calendar c=Caleandar.getInstance( );



  • 静态字段: 表示时间的某个部分


    • static YEAR: 年份
    • static MONTH: 月份. 注意月份数值是0-11
    • static DAY_OF_MONTH: 日期
    • static HOUR: 小时(12小时制)
    • static HOUR_OF_DAY: 小时(24小时制)
    • static MINITE: 分钟
    • static SECOND: 秒


  • 成员方法


    • int get(int field): 返回给定日历字段的值


      • 例如:


        • 获取日期: int day = c.get(Calendar.DAY_OF_MONTH);



    • void set(int field, int value): 将给定的日历字段设置为给定值


      • 例如:


        • 设置年: c.set(Calendar.YEAR, 2000);
        • 设置月: c.set(Calendar.MONTH, 0);



    • void add(int field, int amount): 为给定的日历字段添加或减去指定的时间量, 如时间字段是天, 增加n天, 时间字段是秒, 增加n秒. 减少用负数


      • 例如:


        • 当前日期增加一天: c.add(Calendar.DAY_OF_MONTHY, 1);
        • 当前日期减少一天: c.add(Calendar.DAY_OF_MONTHY, -1);





包装类
  • 什么是包装类?


    • 包装类是封装了基本数据类型的类, 提供了更多复杂的方法和变量
    • 同时将基本类型的使用转换为了类的面向对象方式


  • 基本数据类型与其包装类的对应关系


    • byte: Byte
    • short: Short
    • char: Character
    • int: Integer
    • long: Long
    • float: Float
    • double: Double
    • boolean: Boolean



string 转int
字符串和整数转换
  • String转int/Integer


    • 方式1: Integer Integer(String s)


      • 如: Integer i = new Integer("56");


    • 方式2:  常用的 static int parseInt(String s)


      • 如: int a = Integer.parseInt("56");


    • 方式3: static Integer valueOf(String s)


      • 如: int b = Integer.valueOf("56");



    int转String
int/Integer转tring
  • 方式1: "" + int值


    • 如: String a = "" + 10;


  • 方式2: String toString()


    • 如: String a = i.toString();


  • 方式3: static String toString(int i)


    • 如: String a = Integer.toString(10);



正则表达式 pattern  使用方法  xxx.matches(自定义正则表达式)
  • 是一种用于匹配字符串的规则
  • 可用于判断字符串是否符合某种规则, 比如是否是邮箱, 是否是手机号等等
  • Pattern类:


    • 创建正则表达式模板, 内有正则表达式规则


    常用规则: 具体查看API文档的Pattern类
    字符意思
    • 字符:


      • x: 一个字符x      a b c   "abc"  "aab"
      • \\: 表示\反斜杠.


        • 为什么有2个? 第一个\是转义的作用


      • [abc]: a或b或c, 即中括号字母中的其中一个  [abc]{2}  "aa"
      • [^abc]: 除a, b, c之外的任何字符.


        • ^表示否定


      • [a-zA-Z]: 小写英文a到z, 以及大写英文A到Z.


        • -表示范围



    • 预定义字符


      • .: 任何字符(对于行结束符, 可能匹配, 也可能不匹配)
      • \d: 数字0-9. 相当于[0-9]


        • d是digital的缩写


      • \D: 非数字. 相当于[^0-9]
      • \s: 空白字符. 相当于[ \t\n\x0b\f\r], 包括空格(第一个空就是空格)


        • s是space的缩写


      • \S: 非空白字符. 相当于[^\s]
      • \w: 单词字符. 相当于[a-zA-Z_0-9]


        • w是word的缩写


      • \W: 非单词字符. 相当于[^\w]


    • Greedy数量词


      • X?: X这个字符出现一次或零次
      • X*: X这个字符出现零次或多次, 包括一次
      • X+: X这个字符出现一次或多次
      • X{n}: X这个字符恰好出现n次
      • X{n, }: X这个字符至少出现n次
      • X{n, m}: X这个字符至少出现n次, 但不超过m次




String类 字符串切割;
  • String[] split(String regex): 按照正则表达式切分当前字符串为多个部分, 返回每个部分组成的字符串数组, 其中不包含分隔符        


集合 collection  单列集合最顶层   本身是接口
  • 需要多态使用   例如  collection<> c=new  arrayList<>();


常用方法
添加
  • con.add(E e): 向集合中添加元素, 添加成功返回true, 添加失败返回false. 永远能够添加成功


删除
  • c.remove(Object o): 删除元素中的指定元素, 删除成功返回true, 删除失败返回false
  • void   c.clear(): 清空集合中的元素;


判断
  • boolean c.contains(Object o): 判断集合中是否包含指定元素, 包含返回true, 否则false
  • boolean c.isEmpty(): 判断集合是否为空集合, 即没有元素. 没有元素返回true, 否则false


转换
  • c.toArray() 转为 object 数组;         


迭代器的概述和测试
  • Iterator接口:


    • 迭代器
    • 作用:


      • 提供遍历集合的安全方式获取迭代器:        




Iterator it=new 集合.iterator
  • it.hasNext 判断有没有下一个元素
  • it.Next 获取下一个元素;
  • void remove(): 从迭代器指向的 collection 中移除迭代器返回的最后一个元素


并发修改异常
并发修改异常:
  • ConcurrentModificationException


修改:
  • 指的是会改变集合长度的操作


    • 增加元素
    • 删除元素
    • 清空元素
    • list的set(int index, Object o)方法可以修改集合中某个索引处的元素值, 但并不会改变集合的长度, 所以不会发生并发修改异常



怎样解决
  • 添加元素:


    • List接口中的ListIterator listIterator()获取用于List的迭代器, 然后调用ListIterator的add()方法


  • 删除元素: remove()


格式:
ListIterator 是   Iterator  的子类
  • List<> lis=new ArrayList<>();


    • ListIterator lit=lis.listIterator()



List 特有功能
List接口
  • 继承自Collection接口. 在java.util包下
  • 特点


    • 元素有序(存入和取出的顺序一样)
    • 有整数的索引
    • 元素可以重复


  • 特有功能 (都是按索引进行操作的)


    • void add(int index, E element): 添加元素
    • E remove(int index): 删除元素
    • E set(int index, E element): 修改元素
    • E get(int index): 获取元素



有序的查找快 增删慢
无序的增删快 查找慢
List的子类概述, LinkedList特有功能
特有方法 (用于处理开头和结尾的元素)
  • void addFirst(E e): 将元素添加到开头
  • void addLast(E e): 将元素添加到末尾
  • E getFirst(): 获取开头的元素
  • E getLast(): 获取结尾的元素
  • E removeFirst(): 删除第一个元素, 并返回删除的元素
  • E removeLast(): 删除最后一个元素, 并返回删除的元素



Set集合
Set接口:
  • 继承自Collection接口
  • 特点


    • 元素无序(存入和取出的顺序不一致)
    • 元素不能重复(元素唯一)
    • 没有索引



HashSet存储自定义对象并遍历
  • HashSet类: 是Set接口的实现类


    • 成员方法


      • boolean add(E e): 添加成功true, 添加失败(重复了)返回false



    HashSet 需要重写  hashCode()方法和equals()方法

Collections工具
  • 常用静态方法


    • static int binarySearch(List list, T key): 使用二分查找来查找元素在指定列表的索引位置
    • static void copy(List dest, List src): 将源列表中的数据复制到目标列表
    • static void fill(List list, Object obj): 使用指定对象填充指定列表的所有元素
    • static void reverse(List list): 反转集合中的元素
    • static void shuffle(List list): 随机打乱集合中元素的顺序
    • static void sort(List list): 将集合中的元素按照元素的自然顺序排序


      • 自然顺序: 元素要具有比较性


    • static void swap(List list, int i, int j): 将指定列表中的两个索引进行位置互换



Map接口
  • Map<K, V>接口


    • 是双列集合的顶层, 和Collection属于同级
    • 特点


      • 存储方式是key-value(键值对)方式, 即一个键对应一个值
      • 一个键只能映射一个值
      • 键不能重复, 值可以重复
      • 键是无序的



  • Map和Collection的区别


    • Map是双列集合, 用于处理有一一对应关系的数据,键不能重复且键无序
    • Collection是单列集合, 有不同的子体系, List允许重复且有序, Set不允许重复且无序



Map功能概述和测试
  • HashMap类


    • 多态创建对象: (也可以不使用多态)


      • Map<K, V> map = new HashMap<>();


    • 常用方法:


      • 增和改


        • V put(K key, V value): 添加键值对.


          • 注意: 如果key已经存在, 则会使用新的value覆盖原有value, 并将原有value返回





        • void clear(): 清空集合
        • V remove(Object key): 删除指定键的值(key和value都会删除)




        • V get(Object key): 通过指定键获取值
        • int size(): 获取集合长度


      • 判断


        • boolean containsKey(Object key): 是否包含指定的键
        • boolean containsValue(Object value): 是否包含指定的值
        • boolean isEmpty(): 是否为空


      • 遍历


        • Set<Map.Entry<K, V>> entrySet(): 获取键值对的Set集合
        • Set<K> keySet(): 获取所有键的Set集合
        • Collection<V> values(): 获取所有值得Collection集合





Map的第一种遍历方式: keySet()
  • 遍历步骤


    • 通过map.keySet()方法获取到key的Set集合
    • 遍历key的set集合


      • 通过get(K key)方法获取key对应的value




Map的第二种遍历方式: entrySet()
  • 遍历步骤


    • 通过map.entrySet()获取到Entry<K, V>的Set集合
    • 遍历Set集合获取到每一个Entry<K, V>
    • 使用Entry的getKey()获取key, 使用Entry的getValue()获取value


    Set<Entry<String, String>> entrySet = map.entrySet();        for (Entry<String, String> entry : entrySet) {                // 通过entry对象获取键值对                String key = entry.getKey();                String value = entry.getValue();                System.out.println(key + "---" + value);

可变参数
定义格式: 形参数据类型... 形参名
注意事项:
  • 可变参数的数量可以从0个到多个
  • 可变参数只能是同一种数据类型
  • 可变参数的定义位置必须在方法形参列表的最后一个


异常父类为  Throwable
    异常为:程序发生错误。
    Throwable :
        |      
        |-----  error (不应捕获的严重问题, 不能处理的异常)
        |-----  Exception (可以处理的异常)  ~~编译时异常 可以自己抛出
                    |--RuntimeException   ~~运行时异常。常见异常
    ArithmeticException  <数学异常>
    NullPointerException <空指针异常>
    ArrayIndexOutOfBoundException<数组越界异常>异常的处理方式  JVM 处理(抛出)  或者自己处理 try....catch
  • JVM处理异常会将程序结束


    • 自己处理不会停止后续的程序
    • try....catch  捕获异常
    • (对可能发生的异常进行捕获。) 避免程序的终止。


  • 直接抛出异常


    • 需要在方法的声明上使用 throws 异常
    • 不捕获异常 ,直接抛出 ,谁调用谁解决 或者调用者也抛出,
    • 使用 try...catch 语句  捕获异常.  程序可以继续执行



//格式
    try{
        //可能出现的异常
    }catch(NullPointerException e)/*(异常类型 变量名)*/{
              //可以输出
              //也可以查看错误原因
    }
    //try里 执行到和 catch里 异常类型一致的代码后 不会执行 try里异常代码的后续代码直接跳到 catch
   

    多异常代码处理
    try {
    // 可能发生异常的代码
} catch (异常类型1 异常对象名1) {
    // 处理异常1的代码
} catch (异常类型2 异常对象名2/*父类在后*/) {
    // 处理异常2的代码
}finally{
    //无论怎样都会执行的一段代码  (io流关流 释放资源)      
}   
    finally
  • 放在try...catch 的到后面用来关闭流的.


查看异常的方法
  • Throwable 查看异常的方法


    • String getMessage() :获取异常的原因, 没有原因则返回null
    • String toString(): 返回异常的类型和原因
    • void printStackTrace(): 使用标准错误输出流打印异常详情



自己定义异常的方法
  • 定义方法 继承 异常父类(想不解决就继承) Exception (自己解决就继承)  RuntimeException


    • 重写父类的 有参无参构造,


      • 继承Exception 调用可以直接抛出,也可以解决
      • 继承RuntimeException 为了后面的程序运行要捕获到异常 try....catch
      • 调用 throw关键字创建异常 throw new ScoreException()


        • 下面是附加的一段代码演示






//创建一个异常类 继承父类
public class ScoreException extends Exception{

    public ScoreException() {
        super();
    }

    public ScoreException(String message) {
        super(message);
    }
    //---------------------------
   
    //主方法
   
        public static void main(String[] args) {
        try {
            checkScore(101);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }

   //创建的方法继承自己定义的类                  //抛出异常
    public static void checkScore(int score) throws ScoreException {
        if (score > 100 || score < 0) {
            //关键字调用
            throw new ScoreException("分数有误");
        }
        System.out.println("分数正常");
    }
   
递归
  • 把大问题改为小问题 解决小问题 大问题也就解决了


    • 必须有出口 不然就会死循环


      • 注意溢出         





0 个回复

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