第四天总结

多态

    * 子类对象可以存到父类的变量中

    * 前提条件

      * 子父类关系

      * 方法重写

      * 父类引用指向子类对象

    * 好处

      * 提高代码的复用性和扩展性

    * 缺点

      * 不能使用子类对象的特有方法

    2. 多态成员访问的特点

      * 编译看左边,运行看左边

        * 成员变量

        * 静态方法

      * 编译看左边, 运行看右边  ,只要子类中重写了,一定执行子类的方法

        * 非静态成员方法 (全遮挡)

    3. 多态转型

      * 向上转型 (子类转父类)

      * 线下转型 (父类转子类,有危险), 转之前,要使用 instanceof关键字判断一下

    4. final

      * 最终的, 无法被改变  , 只能赋值一次

      * 修饰的特性

        * 修饰类, 类不能被继承

        * 修饰方法, 方法不能被重写

        * 修饰变量, 变量只能赋值一次

      * 修饰成员变量时

        * 在初始化完毕之前必须要赋值

        * 静态是类初始化完毕前

        * 非静态是对象初始化完毕前

    5. 抽象类

      * abstract关键字

      * 制定规则

      * 一个类中如果有抽象方法,这个类也必须是抽象类

      * 抽象类中可以没有抽象方法

      * 抽象不能实例化(创建对象) , 不安全, 抽象方法用不了

      * 抽象类的子类可以是抽象类, 不用重写抽象方法

      * 抽象类的子类可以是非抽象类, 必须重写抽象方法

    6. java传递值得方式

      * 基本数据类型传递的是值, 引用数据类型传递的是址, String稍微特殊

    7. 接口

      * interface implements

      * 接口中全部都是抽象方法

      * 接口中的成员变量

        * 都是公开的, 静态的, 最终的  public static final

      * 作用

        * 指定规则

        * 思考的过程

        * 代码的框架

      * 我们在思考过程中, 用来记录业务逻辑.

    8. 类和接口之间的关系

      * 类和类: 继承 单继承, 多层继承

      * 类和接口: 实现, 可以多实现

      * 接口和接口: 继承, 可以多继承

模板模型

  * 实现类和接口中的内容保持一致

  * 好处: 提高了代码的扩展性

 

2. 成员内部类

 

  ​        类中方法外

 

  * 当类中的成员过多时, 使用成员内部类再次分组

  * 成员内部类一般来说是为外部类服务的

  * 特性

    * 内部类可以直接调用外部类的成员

    * 外部类需要先创建对象才能调用内部类的成员

    * 内外部类都可以调用对方的私有化成员

    * 创建内部类对象前必须先创建外部类对象

 

3. 静态内部类

  * 基本用法和成员内部类相似

  * 就是给内部类加上static关键字, 唯一的作用是可以让用户跳过外部类直接访问到内部类

  * 内部类是静态的,绝不能认为内部类中的成员也是静态的,这些成员还是原先的调用方式

  * 如果内部类中有静态成员,那么这个内部类也必须是静态的


4. 局部内部类

  * 当一个类只能在当前方法中被用到时,我们没有必要将他写道外部去, 可能会干扰其他类的使用

  * 局部内部类中如果使用局部变量, 那么,这个变量要变成常量


5. 匿名内部类

  * 创建某个类或接口的子类对象, 类只被使用一次

  * new 父类 () { } ;


6. 异常

  * 异常在Java中普遍存在, 并且有存在的意义

  * 可能发生异常的地方 ?

    * 运行时

    * 代码警告

    * 语法错误(自己改)

  * 解决异常的办法

    * 抛出

    * try...catch处理

      * 代码可以继续运行 ,手动书写处理过程


7. 自定义异常

  * 异常最终要的是类名

  * 继承Exception就是编译时异常

  * 继承RuntimException就是运行时异常

二维数组

  * 数组中存放的还是数组

2. 权限修饰符

  * public protected 默认  private

3. java中的包

  * jvm识别类,要知道全名(包名+类名)

  * 编译器有自动补全功能,  从类本上开始找 -- > import  -- > package

4. Object

  * toString

  * hashCode

  * equals

  * getClass

  * == 和 equals的区别

  * equals相等的两个对象 hashCode一定相等, equals不等的两个对象, hashCode也有可能相等 (两个方法同步重写)

String 类


1. **定义**


  * String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。我们可以将字符串看作是String, 但是严格严格意义上来说, String还是一个类,只是比较特殊罢了


2. **特殊性**


  * String 类型的变量可以引用地址

  * String 类型的变量可以直接指向常量

  * String 对象的长度是不可变的,如果两个字符串拼接成一个字符串,其实是创建了一个新的字符串对象


  ```java

  public static void main(String[] args) {

    String str = new String();// 指向地址值

    String str2 = "abc"; //指向常量

  }

  ```


3. **常用的构造方法**


  - public String():空构造

  - public String(byte[] bytes):把字节数组转成字符串

  - public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串

  - public String(char[] value):把字符数组转成字符串

  - public String(char[] value,int index,int count):把字符数组的一部分转成字符串

  - public String(String original):把字符串常量值转成字符串

  - **测试题**

    - 判断定义为String类型的s1和s2是否相等?

      - String s1 = "abc";

      - String s2 = "abc";

      - System.out.println(s1 == s2);

      - System.out.println(s1.equals(s2));

    - 下面这句话在内存中创建了几个对象?

      - String s1 = new String("abc");

        - 答案: 创建了两个看对象,一个在常量池,一个在堆内存

    - 判断定义为String类型的s1和s2是否相等

      - String s1 = new String("abc"); 

      - String s2 = "abc";

      - System.out.println(s1 == s2);

      - System.out.println(s1.equals(s2));

    - 判断定义为String类型的s1和s2是否相等?

      - String s1 = "a" + "b" + "c";

      - String s2 = "abc";

      - System.out.println(s1 == s2); 

      - System.out.println(s1.equals(s2));

    - 判断定义为String类型的s1和s2是否相等?

      - String s1 = "ab";

      - String s2 = "abc";

      - String s3 = s1 + "c";

      - System.out.println(s3 == s2);

      - System.out.println(s3.equals(s2));


4. **常用的判断方法**


  * boolean equals(Object obj): 比较字符串的内容是否相同,区分大小写


  * boolean equalsIgnoreCase(String str): 比较字符串的内容是否相同,忽略大小写


  * boolean contains(String str): 判断大字符串中是否包含小字符串


  * boolean startsWith(String str): 判断字符串是否以某个指定的字符串开头


  * boolean endsWith(String str): 判断字符串是否以某个指定的字符串结尾


  * boolean isEmpty(): 判断字符串是否为空


  * **案例**


    - 需求:模拟登录,给三次机会,并提示还有几次。

    - 用户名和密码都是admin


    ```java

    public static void main(String[] args) {

      Scanner scanner = new Scanner(System.in);

      int i = 1;

      while(i<=3){

        System.out.println("请输入用户名");

        String name = scanner.nextLine();

        System.out.println("请输入密码");

        String password = scanner.nextLine();

        if("admin".equals(name)&&"admin".equals(password)){

        System.out.println("恭喜您,登录成功");

        break;

        }

        System.out.println("用户名或密码错误,请您重新输入,您还有"+(3-i)+"次机会机会");

        i++;

      }

      scanner.close();

      }

    ```


  * 测试题


      * 查询一个某个班级中所有姓张的学生

      * String[] strs = {"李张蛋","张三","张飞","李伟","刘明"};


5. **常用的获取方法**


  * int length(): 获取字符串的长度


  * char charAt(int index): 获取指定索引位置的字符


  * int indexOf(int ch): 返回指定字符在此字符串中第一次出现处的索引, ch是字符的码表值


  * int indexOf(String str): 返回指定字符串在此字符串中第一次出现处的索引


  * int indexOf(int ch,int fromIndex): 返回指定字符在此字符串中从指定位置后第一次出现处的索引


  * int indexOf(String str,int fromIndex): 返回指定字符串在此字符串中从指定位置后第一次出现处的索引


  * int lastIndexOf  同上


  * String substring(int start):从指定位置开始复制字符串,默认到末尾


  * String substring(int start,int end):从指定位置开始到指定位置结束复制字符串


  * **案例**


    * 需求:遍历字符串


    ```java

    public static void main(String[] args) {

      String str = "abcdkekdkgallsd";

      for (int i = 0; i < str.length(); i++) {

      System.out.println(str.charAt(i));

      }

    }

    ```


  *  测试题


      * 需求:不准使用charAt(),遍历字符串


6. **常用的转换方法**


  * byte[] getBytes(): 把字符串转换为字节数组


  * char[] toCharArray():把字符串转换为字符数组


  * static String valueOf(char[] chs):把字符数组转成字符串


  * static String valueOf(int i):把int类型的数据转成字符串


    * 注意:String类的valueOf方法可以把任意类型的数据转成字符串


  * String toLowerCase():把字符串转成小写(了解)


  * String toUpperCase():把字符串转成大写


  * String concat(String str):把字符串拼接


  * **案例**


    * 需求:把一个字符串的首字母转成大写,其余为小写


    ```java

    public static void main(String[] args) {

      String str = "abCdkeHgDlsd";

        String str2 = str.substring(0,1).toUpperCase().concat(str.substring(1).toLowerCase());

      System.out.println(str2);

    }

    ```


7. **替换方法**


  * String replace(char old,char new) : 将字符串中的一部分字符用新的代替

  * String replace(String old,String new) : 将字符串中的一部分字符串用新的代替


8. **切割方法**


  * String[] split(String regex) : 按照规则来切割字符串

  * String[] split(String regex, int limit) : 按照规则来切割字符串 limit 表示总共切成几段(也就是数组的长度)


9. **其他常用方法** abc


  * trim() : 去除字符串前后的空格

  * int compareTo(String anotherString) : 按字典顺序比较两个字符串(大小写)

  * int compareToIgnoreCase(String str) : 按字典顺序比较两个字符串(忽略大小)

总结:这三天的内容主要介绍了java中多态的使用以及注意事项,final关键字的作用,抽象类的使用,接口的作用以及使用时机,内部类和异常的作用,二维数组的使用,权限修饰符的作用范围以及object类和string类的使用,string类作为一个特殊类,java中所有的字符串字面值都是该类的实例实现

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • package cn.itcast_01;/* 字符串:就是由多个字符组成的一串数据。也可以看成是一个字符数组。 ...
    蛋炒饭_By阅读 577评论 0 0
  • java中String的常用方法 1、length()字符串的长度 例:char chars[]={'a','b'...
    赤赤有名阅读 2,025评论 0 10
  • DAY 05 1、 public classArrayDemo { public static void mai...
    周书达阅读 649评论 0 0
  • String类和正则表达式 今天的主要内容 Scanner类概述Scanner获取数据出现的小问题及解决方案 St...
    须臾之北阅读 1,913评论 0 3
  • Java String 面试题以及答案 1.判定定义为String类型的st1和st2是否相等,为什么 packa...
    攻城狮阿犯阅读 579评论 0 1