提示:本文继续讲解面向对象

一、实例初始化

1、构造器

        我们发现我们new完对象时,所有成员变量都是默认值,如果我们需要赋别的值,需要挨个为它们再赋值,太麻烦了。我们能不能在new对象时,直接为当前对象的某个或所有成员变量直接赋值呢。

        可以,Java给我们提供了构造器。

1.1、构造器的作用

        new对象,并在new对象的时候为实例变量赋值。

1.2、构造器的语法格式

        构造器也叫构造方法,有参构造和无参构造,它的语法为:

        

注意事项:

(1)构造器名必须与它所在的类名必须相同。

(2)它没有返回值,所以不需要返回值类型,甚至不需要void

(3)如果你不提供构造器,系统会给出无参数构造器,并且该构造器的修饰符默认与类的修饰符相同

(4)如果你提供了构造器,系统将不再提供无参数构造器,除非你自己定义。

(5)构造器是可以重载的,既可以定义参数,也可以不定义参数。

(6)构造器的修饰符只能是权限修饰符,不能被其他任何修饰

1.3、同一个类的构造方法互相调用
  • this():调用本类的无参构造

  • this(实参列表):调用本类的有参构造

  • this()和this(实参列表)只能出现在构造器首行

  • 不能出现递归调用

1.4、继承时构造器如何处理
  • 子类继承父类时,不会继承父类的构造器。只能通过super()或super(实参列表)的方式调用父类的构造器。

  • super();:子类构造器中一定会调用父类的构造器,默认调用父类的无参构造,super();可以省略。

  • super(实参列表);:如果父类没有无参构造或者有无参构造但是子类就是想要调用父类的有参构造,则必须使用super(实参列表);的语句。

  • super()和super(实参列表)都只能出现在子类构造器的首行

1.5、IDEA生成构造器:Alt + Fn +Insert /Alt + Insert

2、非静态代码块

2.1、作用

        和构造器一样,也是用于实例变量的初始化等操作。

2.2、执行特点

        在new对象时自动执行一次,先于构造方法执行

2.3、语法格式

        

3、静态代码块

        与非静态代码块语言,也是用于实例变量的初始化等操作。但静态代码块发生在类加载的时候,它在类加载的时候执行,先于非静态代码块。

基本语法:

【修饰符】 class 类{
    static{
        静态代码块
    }
    【修饰符】 构造器名(){
        // 实例初始化代码
    }
    【修饰符】 构造器名(参数列表){
        // 实例初始化代码
    }
}

二、关键字和API

1、this和super关键字

this:可以理解为当前类的实例

  • 在构造器和非静态代码块中,表示正在new的对象

  • 在实例方法中,表示调用当前方法的对象

super:指向当前对象中父类部分的引用

无论是this和super都是和对象有关的。

2、使用格式

  • this

    • this.成员变量:表示当前对象的某个成员变量,而不是局部变量

    • this.成员方法:表示当前对象的某个成员方法,完全可以省略this.

    • this()或this(实参列表):调用另一个构造器协助当前对象的实例化,只能在构造器首行,只会找本类的构造器,找不到就报错

  • super

    • super.成员变量:表示当前对象的某个成员变量,该成员变量在父类中声明的

    • super.成员方法:表示当前对象的某个成员方法,该成员方法在父类中声明的

    • super()或super(实参列表):调用父类的构造器协助当前对象的实例化,只能在构造器首行,只会找直接父类的对应构造器,找不到就报错

3、避免子类和父类声明重名的成员变量

因为,子类会继承父类所有的成员变量,所以:

  • 如果重名的成员变量表示相同的意义,就无需重复声明

  • 如果重名的成员变量表示不同的意义,会引起歧义

三、native关键字

1、native的意义

        native:本地的、原生的

2、native的用法

        native只能修饰方法,表示这个方法的方法体代码不是用Java语言实现的,而是由C/C++语言编写的。但是对于Java程序员来说,可以当做Java的方法一样去正常调用它,或者子类重写它。

四、final关键字

1、final修饰类

        表示这个类不能被继承,没有子类

2、final修饰方法

        表示这个方法不能被子类重写

3、final修饰变量

        final修饰某个变量(成员变量或局部变量),表示它的值就不能被修改,即常量,常量名建议使用大写字母。

五、Object超类

1、什么是超类

        可以理解为所有类的父类

2、Object类其中的五个方法

        (1)toString():返回的是“对象的运行时类型 @ 对象的hashCode值的十六进制形式"

        (2)getClass():获取对象的运行时类型

        (3)equals():判断两个对象是否相等

        (4)hashCode():返回每个对象的hash值。

        (5)finalize():用于最终清理内存的方法

        一般使用时这些方法需要被重写

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐