zoukankan      html  css  js  c++  java
  • super和final关键字

    一.super关键字

    super关键字的使用

    JAVA类中使用super来引用父类的属性或者方法,用this来引用当前对象,主要用法:

    1.子类的构造函数默认第一行会默认调用父类的无参数构造函数

    2.子类显示调用父类的构造函数

    3.访问父类的属性和函数

     

    输出结果:

    注意:java中,Object类是有类的父类。

    二final关键字

    java中的常量与变量,常量是程序运行过程中其值不能改变,变量正好与之相反,变量是用于存储可变数据的容器。谈到常量,第一时间想起的是String类,Java中的String类就是一个final类。

    1.为什么设计final?

    在程序设计过程中,有时候我们希望某些数据不允许别改变,某些类不允许被继承。这个时候final就出现了。fianl是一个java关键字,意味着不可修改。其主要作用是两个:安全和效率。在java中final可以修饰类,方法和属性。常量细分为:编译期常量,永远不可改变。运行期初始化时,我们希望它不会被改变。对于编译期常量,它在类加载的过程就已经完成了初始化,所以当类加载完成后是不可更改的,有些变量,我们希望它可以根据对象的不同而表现不同,但同时又不希望它被改变,这个时候我们就可以使用运行期常量。对于运行期常量,它既可是基本数据类型,也可是引用数据类型。基本数据类型不可变的是其内容,而引用数据类型不可变的是其引用,引用所指定的对象内容是可变的

     

    输出结果是:

     

    为什么会有上面的区别?首先看下反编译的代码

     

    可以看出,编译器对final变量的处理与非final变量的区别。同时str1+"world"虚拟机在运行的时候,实际上String str4 = new StringBulider(str1).append.("world").toString().因此str4和str3指向对象的地址不同,即两者值不同。

    2.final的用法

    (1).修饰类

    当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

    (2).修饰方法

    父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率

    注:类的private方法会隐式地被指定为final方法。

    (3).修饰变量

    对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

    3.final的注意点

    •  当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被始化赋值之后,就不能再被赋值了。
    •  引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的
    •  很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变
  • 相关阅读:
    12.链式法则
    11.感知机
    10.1激活函数及其梯度(softmax求梯度)
    10.损失函数及其梯度(均方差梯度[使用线性函数y=w*x+b作为激活函数])
    9:常见函数以及激活函数的梯度
    8:梯度
    小程序 scroll-view
    小程序swiper
    view 标签
    微信小程序 tab选项卡
  • 原文地址:https://www.cnblogs.com/liupiao/p/9240032.html
Copyright © 2011-2022 走看看