• 8 面向对象之抽象类+接口+内部类


    1 final关键字

       用法:

      1)使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值。

        2)使用final修饰方法,该方法无法在子类中重写

        3)使用final修饰的类,不能被继承(派生其他子类)

      JDK中常见的final修饰的类: java.lang.Math   java.lang.String

    2 抽象类和抽象方法

      抽象方法:使用abstract修饰的方法。特征: 没有方法体。

      抽象类:使用abstract修饰的类。

     特点:

      1)抽象类中可以包含抽象方法。包含抽象方法的类一定是抽象类,但抽象类中不一定包含抽象方法。

      2)抽象类中可以存在属性,方法,构造方法。

      3)抽象类不能实例化(不能使用new关键字创建对象),但可以在子类调用构造方法。

      作用: 通过抽象类,可以避免子类设计的随意性。

      抽象类就是为被继承而生的。子类一旦继承了抽象类,就必须重写抽象类中的抽象方法,或者子类本身也是一个抽象类。

    3 设计模式

       1)单例模式

      单例模式:保证一个类只能有一个实例。

      特征:构造方法私有化,提供一个静态的方法获取实例

      常见的实现方法: ①饿汉式:使用时再创建对象。②懒汉式:加载时创建对象。

       2)简单工厂模式

      简单工厂模式又叫静态工厂方法,可以通过其生成产品,可以降低因生成生成产品而导致的耦合性过强。(解耦合)

      工厂模式的命名:xxxFactory--->生成xxx

       如何实现工厂模式:

       1.编写父类和子类或接口和实现类

       2.编写静态的工厂方法,返回值类型为父类或接口。--->多态

       3.根据用户的需求动态创建子类的实例,并返回。

    4 接口

    4.1接口定义和特点

      定义: 使用interface关键字

        [修饰符] interface 接口名 [extends 父接口1,父接口2...]{

           //常量的声明

           //方法的声明

         }

       接口成员的特点:

       1)接口中所有的成员变量是常量,默认修饰符为public static final

       2)接口中所有的方法都是抽象方法,默认修饰符为:public abstract

       3)接口不能实例化,接口不能构造方法(抽象类不能实例化,但可以有构造方法)

       4)java类是单继承,但接口可以是多继承

       5)一个非抽象类实现实现接口,必须重写接口中的抽象方法,抽象类实现接口可以重写部分抽象方法。

       6)一个类只能继承一个父类,但可以实现多个接口

      如果一个类继承父类并实现了接口如何编写?

         [修饰符] class 类名 [extends 父类名 implements 接口名1,接口名2..]{

         }

          public class E extends D implements A,B{

         }

    4.2 Comparable接口

      java.lang.Comparable接口:此接口强行对实现它的每个类的对象进行整体排序。

      排序规则在compareTo()方法中定义。当调用java.util.Arrays类中sort(Object[] objs)时,程序会调用compareTo()方法对对象进行比较,

      如果该方法返回正整数(1)时,代表当前对象大于待比较对象;如果返回0,代表当前对象等于待比较对象;如果该方法返回负整数(-1)时,代表当前对象小于待比较对象。

      实现思路:

      1)实现Comparable接口,并重新其compareTo方法

      2)compareTo方法中定义比较规则。返回值应该是正整数,零和负整数。

      3)在调用Arrays.sort(Object[] objs)方法的过程中,sort方法的内部对调用compareTo方法进行比较。

    4.3 Comparator接口

        java.util.Comparator接口:比较器

      int compare(Object o1, Object o2):比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。

      java.util.Arrayssort(Object[] objs,Comparator c):按照指定的比较器对指定数组进行排序。

    5 内部类

      定义:将一个类定义置入另一个类定义中就叫作“内部类”

        特点:

      1)内部类可以访问外部的成员,但外部类不能访问内部的成员。

        2)外部类的修饰符只有两种:public和默认,而内部类的修饰符可以是public,protected,默认,private

        3)内部类成员只有在内部类的范围之内是有效的。

        4)用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。

      内部类的分类:成员内部类,静态内部类,方法内部类,匿名类。

      成员内部类:将一个类作为另外一个类的成员。

      静态内部类:使用static修饰的内部类。静态内部只能访问外部的静态成员。

      方法内部类:在方法中定义的内部类。如果方法内部类中需要访问方法中局部变量,该局部变量必须使用final修饰。

      匿名内部类:没有名称的内部类,可以实现一个接口或继承一个父类。适合创建那种只需要一次使用的类,不能重复使用。匿名内部类要使用外部类的局部变量,必须使用final修饰该局部变量。

    6 java垃圾回收机制

      Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,程序员无法精确控制,称为垃圾回收机制(Garbage Collection)

      GC机制的优点:

      1)提高编程效率,摈弃了C/C++中的指针,避免因遗忘释放内存而导致的内存泄漏。

      2)保证了程序的完整性。

      3)降低性能开销。

      GC原理:JVM中有一个线程专门用于回收堆内存中不使用对象,常用的方法:

      1)定时扫描堆中不使用的对象

      2)通过计数控制回收时机。

      垃圾回收机制只回收JVM堆内存里的对象空间,对其他物理连接,比如数据库连接、输入流输出流、Socket连接无能为力。

      垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

      可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

      程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。

    垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新激活对象)。

      永远不要主动调用某个对象的finalize方法,应该交给垃圾回收机制调用。

  • 相关阅读:
    freetype2 下载编译以及测试代码
    mysql报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    git diff左右对比
    AcWing 1304. 佳佳的斐波那契
    AcWing 1303. 斐波那契前 n 项和
    AcWing 1305. GT考试
    AcWing 1312. 序列统计
    AcWing 1310. 数三角形
    AcWing 1315. 网格
    AcWing 1309. 车的放置
  • 原文地址:https://www.cnblogs.com/nicepanda/p/6978874.html
Copyright © 2020-2023  润新知