美文网首页
Java学习笔记

Java学习笔记

作者: YLiuY | 来源:发表于2019-04-02 11:02 被阅读0次

    一. 面向对象

    1. 初始化块

    • 初始化块是构造器得补充,总是在构造器执行前执行。
    • 初始化块是固定执行得一段代码,无需接受任何参数。
    • 静态初始化块属于静态成员,静态成员不能访问非静态成员得原则,所以静态初始化块不能访问实例变量和方法。
    • 静态初始代码块和静态变量语句得执行顺序和代码顺序有关。

    2. Object类

    所有的Java对象都是Object的实例,可以调用该类中定义的方法。

    • 打印对象toString方法,默认返回“类名+@+hashcode”。
    • ==:比较两个变量是否相等,是否为同一对象
    • equals:默认和==一样,但可以重写该方法,使其值相等。
    • 常量池:用来保存在编译时期就已经确定的值,并保存在class文件中。

    3. 类成员

    使用static修饰的成员就是类成员,类成员属于整个类,不属于单个实例。static不能修饰构造器。静态成员不能访问、使用实例变量和方法。可以通过实例访问静态成员。
    一个重要的用途:单例类。

    class SingleTon {
       //缓存创建的类
        public static SingleTon instance;
        //构建器设为private,只能自己调用
        private SingleTon() {
        }
        //在实例化该类之前,不存在对象,所以只能使用staic类方法
        public static SingleTon getInstance() {
            if (instance==null) {
                instance = new SingleTon();  //调用构建器
            }
            return instance;
        }
    }
    

    4. final修饰符

    final修饰变量时表示该变量一旦获得初始值就不可被改变。可以用来定义“宏变量”

    • final修饰的方法不可以有子类
    • 创建不可变类:实例变量不可改变。8个包装类和string类都是不可变类。

    5. 抽象方法和抽象类

    abstract修饰符修饰的方法和类称为抽象方法和类。抽象方法一定在抽象类中,抽样类中可以没有抽象方法。

    • 抽象类不能被实例化,即不能使用new类调用构造器。但拥有构造器,可以被子类调用。
    • 抽象方法不能有方法体(即没有大括号{}和大括号中的部分)。例:abstract void test()
    • abstract修饰的方法必须由子类重写,因此abstractfinal、private不能同时使用。
    • 模板模式:编写一个父类,父类为子类提供多个通用方法,并把一个或多个方法留给子类实现。

    6. 接口

    接口可以有多个直接父接口,但只能继承接口,不能继承类。

    [修饰符] interface 接口名 extends 父接口1,父接口2...
    {
        零到多个常量定义...
        零到多个抽象方法定义...
        零到多个内部类、接口、枚举定义...
        零到多个默认方法或类方法...
    }
    
    • 接口的访问权限都是public
    • 变量只能是静态常量(不能更改值),方法只能是抽象方法、类方法、默认方法(default修饰)
    • 默认方法不能有static修饰,由于没有static修饰,所以不能使用接口直接调用该方法,需要接口的实现类的实例调用。
    • 类方法可以由接口直接调用
    • 接口支持多继承,子接口会获得父接口中定义的所有抽象方法和常量
    • 类可以实现多个接口,但只能继承一个类。实现接口使用implements。若这个类没有重写接口中的所有抽象方法,那么这个类只能是抽象类。
    • 实现接口时必须使用public关键词,因为接口是public修饰的,重写它必须使用访问权限大于等于它的关键词。
      接口和抽象类的区别:
    1. 接口体现了一种规范,规定了实现者必须提供某些服务。类似于一个系统的“总纲”,制定了系统个模块的标准,因此接口不应该经常改变。
    2. 抽象类体现了一种模板设计,被当成系统实现过程中的中间品,已经实现了某些功能,但不是最终产品。
    3. 接口只能有类方法和默认方法,不能有普通方法提供方法实现。抽象类可以有普通方法
    4. 接口没有静态方法,抽象类有
    5. 接口只能定义静态常量,抽象类可以定义各种成员变量
    6. 接口不包含构造器;抽象类包含构造器,是让子类调用这些构造器完成对抽象类的初始化操作。
      接口的使用场景:1.简单工厂模式 2.命令模式

    7. 内部类

    定义在其他类内部的类称为内部类。匿名内部类适合用于创建那些仅需要使用一次的类。

    • 非静态内部类不能拥有静态成员。静态内部类可以有静态成员和非静态成员。
    • 局部内部类(定义在方法中)和匿名内部类不是类成员
    • 外部类不能直接访问内部类的成员,需要显示调用内部类对象或内部类访问
    • 静态内部类只能访问外部类的静态成员。
    • 接口内可以定义内部类,接口内部类只能是静态内部类。
      内部类的使用
    • 外部类使用非静态内部类OuterInstance.new InnerConstructor
    • 外部类使用静态内部类new outerClass.innerCoustrucor
      匿名内部类
      匿名内部类适合创建只使用一次的类,创建时会立即创建该类的实例。不能重复使用
    new 实现接口 ()| 父类构造器()   //只能实现或继承一个接口或父类
    {
      //匿名内部类的方法体
    }
    
    • 匿名内部类不能是抽象类,因为在创建时,他会立即实例该类
    • 匿名内部类不能定义构造器,因为没有类名,无法定义。
    • 匿名内部类会继承父类的构造器
    • 局部变量被匿名内部类访问,该变量自动被final修饰。

    8. Lambda表达式

    Lambda表达式支持将代码块作为方法的参数。

    • Lambda表达式的类型是函数式接口类型。函数使接口只能有一个抽象方法。

    相关文章

      网友评论

          本文标题:Java学习笔记

          本文链接:https://www.haomeiwen.com/subject/hvvvbqtx.html