• Java学习笔记Day4 面向对象编程-高级类特性2


    对象类型转换catsing:
    范围小 -> 范围大 : 自动类型转换
    范围大 -> 范围小 : 强制类型转换
    无继承关系的引用类型间的转换是非法的

    ==与equals方法:
    ==: 可以比较基础数据类型和引用类型,但是要注意类型兼容(可满足自动类型转换)
    equals(): 只能比较引用类型
    对于引用类型来说,
    普通的类,==与equals方法都是比较是否指向同一对象(对象的内存地址)
    特殊的类, 如String, File, Date, 使用==是否指向同一对象,而equals比较内容(在特殊类中equals方法被重写)

    String对象的创建:

    String str1 = "字面量创建";
    String str2 = new String("new创建");

    字面量创建String对象时,只在字符串常量池中创建一个值不重复的String对象

    new创建String对象时,先在字符串常量池中创建一个值不重复的String对象,之后经过StringBuider在堆中再创建一个整合对象(会重复)

    字面量创建比new创建更加省内存

    包装类Wrapper:8种基本数据类型相应的引用类型

    特别的是 int-integer char-character
    Wrapper类方法可实现基本数据类型与字符串之间的转换: 静态ParseXxx()与valueOf()

    int i = Integer.parseInt("123");//字符串转为int

    String str = String.valueoOf(123);//int转为字符串

    父类Object的toString()方法默认输出当前对象的内存地址(可重写)
    syso(m) 等效 syso(m.toString())

    static关键字:
    static修饰属性,方法,代码块,内部类
    类变量(静态变量),不需要实例化,直接通过类型.属性即可访问, 是类的一部分
    类方法(静态方法): 把多次使用的方法抽取到工具类Utils中做成类方法
    随着类的加载而加载,优先于对象存在,修饰的成员被共享,在访问权限允许的情况下可直接被调用
    static方法里面只能使用该类的静态变量
    重载的方法只能同为static或同为非static

    单例(Singleton)设计模式
    设计模式:实际编程过程中总结出的一些解决问题的套路
    单例:每个类只存在一个实例

    核心:先将类的构造方法私有化,保证在类的外部无法通过new方法来创建对象,之后在类的内部定义一个私有的静态对象变量,然后在一个public的静态方法中返回这个私有的对象

    饿汉式与懒汉式:区别在于new对象的时机

    代码块{}:
    new Person();
    程序执行步骤:属性的默认初始化和显式初始化 -> 执行静态代码块(从上至下)-> 执行非静态代码块(从上至下)-> 执行构造器
    static代码块只能使用静态变量与静态方法,且new多次对象时只会被执行一次
    在匿名内部类中,代码块可以代替构造方法

    Person per = new Person(){

      { //代码块充当构造器,对属性进行显式初始化

        name = "李四"

      }

      @override public void xxx{}

    }

    创建了一个Person的匿名子类 -> 父类引用对象可指向子类对象 多态

    final关键字:最终的
    类不可被继承 方法不可被重写 修饰常量
    常量命名约定大写, 如果多个单词, 用_分隔

    抽象类 abstract class
    提供了一个抽象的模板供特殊对象使用
    既可对属性抽象,也可对方法抽象
    不能被实例化, 可用来作为父类被继承
    含有抽象方法的类必须被声明为抽象类
    抽象方法: 只有方法的声明, 没有方法的实现,以分号结束

    模板方法设计模式TemplateMethod:
    子类具体实现父类的抽象方法,根据子类的不同需要,对父类的抽象方法进行重写

    接口interface:
    特殊的abstract类 只可对方法进行抽象
    用implement关键字实现(应用
    类只能单继承,但是可以实现多个接口
    接口可以继承接口
    类实现接口,必须重写接口的全部抽象方法,否则就要声明本类为抽象类
    先写继承,再写实现
    与继承类似,接口与实现类也存在多态的关系

    工厂方法FactoryMethod

    内部类:
    内部类可以使用外部类的属性与方法
    如果外部类想使用内部类,那么必须先实例化
    内部类可以被private和protected权限修饰符修饰
    内部类主要解决Java不能多重继承的问题:
    类的各个内部类可以分别继承多个父类,变相实现了类的多重继承

    Java异常:
    异常处理机制:防止程序异常中断对后续代码造成影响
    抓抛模型:捕获和抛出
    捕获异常:
    try catch:是为了防止程序中可能出现的异常

    try{
      可能发生异常的代码段
    }catch(Exception e){

    //Exception是所有异常的父类,可有多个catch
      syso(e.getMessage()); //得到有关异常事件的讯息
    //Index 2 out of bounds for length 2
      e.pintStackTrace(); //用来跟踪异常事件发生时堆栈的内容
    //Ljava.lang.StackTraceElement;@5305068a
    }finally{
    //捕获异常的体系中一定最后会执行的部分,一般在io操作与JDBG中使用
    }

    抛出异常:在方法内出现的异常,交给调用方去处理
    public void test() throws Exception{XXX}

    main{try catch}

    重写方法不能抛出比原方法更大的异常

    人工抛出异常:

    public void test() throws Exception{

      XXX

      throw new Exception("Out of range");

    }

     

  • 相关阅读:
    每天一个linux命令(5):rm 命令
    每天一个linux命令(3):pwd命令
    c++11之lambda表达式
    C++11之std::future和std::promise和std::std::packaged_task
    金三银四,为什么面试你总拿不到高薪?
    高并发神器 Nginx,到底该怎么学?
    好文 | MySQL 索引B+树原理,以及建索引的几大原则
    为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?
    Java & 架构硬核福利,速度上车!
    Intellij IDEA 阅读源码的 4 个绝技,我必须分享给你!
  • 原文地址:https://www.cnblogs.com/ziyang1060/p/13584492.html
Copyright © 2020-2023  润新知