【小白转码】07

第七章

一、构造器

1.作用

在new对象的时候,直接为实例对象赋值,节省了创建对象后,再调用get()去赋值的麻烦。

 

2.语法格式

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

注意事项:

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

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

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

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

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

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

 

3.this调用本类构造器

- this():调用本类的无参构造

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

- this(【实参列表】)只能出现在构造器内首行

  注意:不能出现构造器递归调用

4.super调用父类构造器

在继承关系中,子类不会继承父类的构造器,子类构造器可以通过super(【实参列表】)来调用父类构造器。

  • 子类的每个构造器中默认隐藏super(),即默认调用父类的无参构造器。

  • 子类构造器中可以显示使用super(【实参列表】)来调用父类无参或有参构造器,那么默认隐藏的super()不再存在。

  • 如果父类没有无参构造,则必须在子类构造器中显示使用super(实参列表)来调用父类构造器。

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

总之:使用子类任意构造器创建对象时,必须要直接或间接通过super(【实参列表】)先调用执行父类构造器。

 

二、非静态代码块

1.作用

和构造器一样,也是用于实例变量的初始化等操作,所以也称为构造代码块。

如果多个重载的构造器有公共代码,并且这些代码都是先于构造器其他代码执行的,那么可以将这部分代码抽取到非静态代码块中,减少冗余代码。

2.执行特点

所有非静态代码块中代码都是在new对象时自动执行,并且一定是先于构造器的代码执行。

非静态代码块是先于构造器执行的

代码块必然执行

3.语法格式

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

举例:


public class Person {
   private String username;
   private String password;
   private long registrationTime;

  {
       System.out.println("新用户注册!");
       registrationTime = System.currentTimeMillis();
  }



   public Person() {
  }

   public Person(String username, String password) {
       this.username = username;
       this.password = password;
  }




   @Override
   public String toString() {
       return "Person{" +
               "username='" + username + '\'' +
               ", password='" + password + '\'' +
               ", registrationTime=" + registrationTime +
               '}';
  }
}

public class Test {
   public static void main(String[] args) {

       Person p1 = new Person();
       System.out.println(p1);
       //新用户注册!
//Person{username='null', password='null', registrationTime=1648345320961}

       Person jack = new Person("jack", "123");
       System.out.println(jack);
       //新用户注册!
//Person{username='jack', password='123', registrationTime=1648345320961}
  }
}

三、实例对象初始化

1.初始化过程

实例初始化方法的方法体,由4部分构成:

(1)super()或super(实参列表)

  • 这里选择哪个,看原来构造器首行是super()还是super(实参列表)

  • 如果原来构造器首行是this()或this(实参列表),那么就取对应构造器首行的super()或super(实参列表)

  • 如果原来构造器首行既没写this()或this(实参列表),也没写super()或super(实参列表) ,默认就是super()

(2)实例变量的显示赋值语句

(3)非静态代码块

(4)对应构造器中剩下的的代码

特别说明:其中(2)和(3)是按顺序合并的,(1)一定在最前面(4)一定在最后面

 

2.过程图解

 

 

 

 

四、关键字和Object类

1.native关键字

1.1 native的意义

native:本地的,原生的

1.2 native的语法

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

 

2.fianl关键字

2.1 final 修饰类

类不能在被继承--太监类

2.2 final修饰方法

方法不能再被重写

2.3 final修饰变量

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

如果某个成员变量用final修饰后,没有set方法,并且必须初始化(可以显式赋值、或在初始化块赋值、实例变量还可以在构造器中赋值)

一旦赋值就不能再被修改。

 

五、JavaBean

标准JavaBean

JavaBean 是 Java语言编写类的一种标准规范。标准的 JavaBean —般需遵循以下规范:

(1)类必须是具体的和公共的,

(2)并且具有无参数的构造方法,

(3)成员变量私有化,并提供用来操作成员变量的setget 方法。

(4)实现 java.io.Serializable 接口 ?

public class ClassName{
 //成员变量
   
 //构造方法
//无参构造方法【必须】
//有参构造方法【建议】

 //getXxx()
 //setXxx()
 //其他成员方法
}

 

posted @ 2022-03-29 19:21  鸽子gkd  阅读(229)  评论(0)    收藏  举报