JAVA学习第六天

1、实例初始化

 1.1 构造器

1、作用

(1)跟在new后面,用来创建"对象
    new Student();
    new Student("张三",23,89);
    new Scanner(System.in);
(2)在new的同时,把对象的实例变量进行初始化
    构造器的代码最终是合并到<init>这样的实例初始化方法中执行的

2、构造器的特点

(1)构造器的名称必须和类名完全一致,如果不一致就报错了
(2)构造器没有返回值类型,不写void,以及其他数据类型
    一旦写了返回值类型,就成了普通方法,就不是构造器了。
(3)构造器的修饰符只能是权限修饰符,不能有其他修饰符(final,native,static等)
    权限修饰符:public、protected、缺省、private
(4)如果一个类没有编写任何构造器,那么编译器会自动添加一个默认的无参构造,这个默认的无参构造的权限修饰符和class类前面的权限修饰符保持一致。
    如果我们手动编写了任何一个构造器,那么编译器就不会再自动给你添加无参构造了。如果需要无参构造,就要自己编写。
(5)构造器可以重载多个。
(6)构造器是不会被继承到子类的,但是子类构造器又必须调用父类的构造器。
    默认情况下,调用父类的无参构造,相当于子类构造器的首行有super();,这句代码可以省略。
    如果父类没有无参构造,子类必须手动编写构造器,否则编译报错,而且在子类构造器的首行必须加super(实参列表);
    如果父类既有无参构造,又有有参构造,那么子类构造器的首行,可以根据需要自己选择super();或是super(实参列表);分别表示调用父类的无参构造,或有参构造。

1.2 非静态代码块

1.辅助构造器完成对象的实例初始化,通常就是把每一个构造器的一些公共的可提前的代码抽取到非静态代码块中,可以减少代码的冗余。

2.随着构造器被调用,而执行的,而且一定是先于构造器的代码执行(当然构造器首行的super();或super(实参列表);更早)。

​​​​​​​​​​​​​​

1.3 实例初始化的过程

(1)构造器首行的super() 或 super(实参列表); ==> 代表父类的实例初始化方法<init>() 或 <init>(形参列表)
(2)成员变量声明后面的显式赋值
(3)非静态代码块
    其中(2)和(3)要看编写的顺序,谁先写的,谁就先执行。
(4)构造器中除了首行的 super() 或 super(实参列表);剩下的其他代码   

2、关键字

2.1 this

(1)this.成员变量
    在本类中使用本类声明的成员变量,如果没有重名问题,那么完全可以省略this.。
    在子类中使用父类声明的成员变量(权限修饰符允许该成员变量在子类可见),如果没有重名问题,也完全可以省略this.。
    当在构造器,或实例方法等当中,出现了“局部变量”和“成员变量”重名时,才需要在成员变量的前面加“this.”。
    this.成员变量,不见得就是本类声明的成员变量,也可以是父类声明的成员变量(权限修饰符允许该成员变量在子类可见)。

(2)this.成员方法
    在本类中使用本类声明的成员方法,可以通过this.成员方法进行访问,也完全可以省略this.。
    在子类中使用父类声明的成员方法(权限修饰符允许该成员变量在子类可见),如果该成员方法没有被“重写”,也可以通过this.成员方法进行访问,或者完成省略this.。
    
    this.成员方法,不见得就是本类声明的成员方法,也可以是父类声明的成员方法(权限修饰符允许该成员变量在子类可见)。
    this.成员方法(当然这个方法得是虚方法),如果此时this是代表子类的对象,那么有可能执行的是子类“重写”的方法。

(3)this() 或 this(实例列表)
    A:它只能出现在构造器的首行
    B:它只能找本类的构造器,不会找到别的类中去

2.2 super

(1)super.成员变量
    在子类中使用父类声明的成员变量(权限修饰符允许该成员变量在子类可见),如果没有重名问题,也完全可以省略super.。
    当在构造器,或实例方法等当中,出现了“子类声明的成员变量”和“父类声明成员变量”重名时,才需要在父类声明的成员变量的前面加“super.”。(当然这种情况,是建议,强制要求大家要避免的)
    super.成员变量,一定是父类声明的成员变量(权限修饰符允许该成员变量在子类可见)。

(2)super.成员方法
    在子类中使用父类声明的成员方法(权限修饰符允许该成员变量在子类可见),如果该成员方法没有被“重写”,也可以通过super.成员方法进行访问,或者完成省略super.。
    如果该成员方法在子类“被重写了”,那么在子类中想要使用被重写的方法时,就“必须”加"super."。
    
    super.成员方法,一定去父类中找某个方法。
    
    super.成员变量和super.成员方法,如果在直接父类中没有找到,可以去间接父类找。

(3)super() 或 super(实例列表)
    A:它只能出现在子类构造器的首行
    B:它只能找直接父类的构造器,不会找到父类的父类中去。

2.3final

(1)final修饰类,在class前面的:表示这个类不能被继承
(2)final修饰方法,在返回值类型前面:表示这个方法不能被重写,但是可以被继承,也可以重载。  
(3)final修饰变量,表示这个变量的值不能被修改。
   
  final修饰的成员变量必须手动初始化。
    A:在声明成员变量的后面直接加 " = 值;"
    B:在非静态代码块中给final修饰的成员变量初始化
    C:在构造器中给final修饰的成员变量初始化
    A,B,C只能选择一种给同一个final修饰的成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值