程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(1)

【Java 基础】Java中this和super的用法总结

发布于2021-05-29 20:28     阅读(549)     评论(0)     点赞(25)     收藏(0)


 
愿你如阳光,明媚不忧伤。

 


1. Java关键字

keyword Java关键字是电脑语言里事先定义的,有特别意义的标识符,有时又叫保留字,还有特别意义的变量。Java的关键字一律用小写字母标识,且对Java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名、方法名、类名、包名和参数。

数据类型

关键字含义占位字节默认值
void声明当前成员方法没有返回值--
boolean基本数据类型之一,声明布尔类型的关键字80
byte基本数据类型之一,字节类型80
short基本数据类型之一,短整数类型160
char基本数据类型之一,字符类型16\u0000
int基本数据类型之一,整数类型320
float基本数据类型之一,单精度浮点数类型320.0f
double基本数据类型之一,双精度浮点数类型640.0d
long基本数据类型之一,长整数类型640
enum枚举--
instanceof用来测试一个对象是否是指定类型的实例对象--
new用来创建新实例对象--

用于修饰

关键字含义
abstract表明类或者成员方法具有抽象属性,abstract关键字不能应用于static、private或final方法,因为这些方法不能被重写
final用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
native用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
private一种访问控制方式:私用模式
protected一种访问控制方式:保护模式
public一种访问控制方式:共用模式
static表明具有静态属性
synchronized表明一段代码需要同步执行
transient声明不用序列化的成员域
volatile表明两个或者多个变量必须同步地发生变化

用于语句

关键字含义
break提前跳出一个块
case用在switch语句之中,表示其中的一个分支
catch用在异常处理中,用来捕捉异常
continue回到一个块的开始处
default默认,例如,用在switch语句中,表明一个默认的分支。Java8 中也作用于声明接口函数的默认实现
do用在do-while循环结构中
else用在条件语句中,表明当条件不成立时的分支
finally用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
for一种循环结构的引导词
if条件语句的引导词
return从成员方法中返回数据
switch分支语句结构的引导词
super表明当前对象的父类型的引用或者父类型的构造方法
this指向当前实例对象的引用
throw抛出一个异常
try尝试一个可能抛出异常的程序块
while用在循环结构中

用于方法、类、接口、包和异常

关键字含义
class声明一个类
extends表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
interface接口
implements表明一个类实现了给定的接口
import表明要访问指定的类或包
package
throws声明在当前定义的成员方法中所有需要抛出的异常

其他

关键字 / 保留字含义
assert断言,用来进行程序调试
strictfp用来声明FP_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范
const保留关键字,没有具体含义
goto保留关键字,没有具体含义
true保留关键字,表示boolean变量的两个合法值中的一个
false保留关键字,表示boolean变量的两个合法值中的一个
null保留关键字,不能将null赋给原始类型,赋给非原始变量相当于释放该变量先前所引用的对象

 


2. this用法总结

this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。this的用法在java中大体可以分为3种:

  • 1. 普通的直接引用;
  • 2. 形参与成员名字重名,用this来区分;
  • 3. 引用构造函数。
  • 形参与成员名字重名,用this来区分
package com.example.entity;

public class Person {
	// 私有成员属性
    private String name;
    private int age;
	// 与形参同名,用this指向Person类自身来区分成员属性与形参
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

 


3. super用法总结

super 可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。super的用法在java中大体可以分为3种:

  • 1. 普通的直接引用;
  • 2. 子类中的成员变量或方法与父类中的成员变量或方法同名,用super来区分;
  • 3. 引用构造函数。
  • 子类中的成员变量或方法与父类中的成员变量或方法同名,用super来区分
    这里既调用了父类的方法,也调用了父类的变量。若不调用父类方法value(),只调用父类变量name的话,则父类name值为默认值null。
package com.example.entity;

public class Person {
    // 成员属性
    String name;
    private int age;

    // java默认的在调用子类构造方法前先调用父类的构造方法,如果你没有指定调用父类的哪个构造方法,那么java默认调用父类无参数的构造方法。
    // 添加无参构造器
    public Person() {
    }

    // 与形参同名,用this指向Person类自身来区分成员属性与形参
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void value() {
        name = "ITGodRoad";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class ITGod extends Person {
    private String name;

    public static void main(String[] args) {
        ITGod ig = new ITGod();
        ig.value();
    }

    void value() {
        name = "BaiYang";
        // 调用父类方法
        super.value();
        System.out.println(name);
        System.out.println(super.name);
    }
}
-----------------------------------------------------------------
・【运行结果】
	BaiYang
	ITGodRoad

  • 引用构造函数
    super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。
    this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。
package com.example.entity;

public class Person {
    // 成员属性
    String name;
    private int age;

    // java默认的在调用子类构造方法前先调用父类的构造方法,如果你没有指定调用父类的哪个构造方法,那么java默认调用父类无参数的构造方法。
    // 添加无参构造器
    public Person() {
        System.out.println("父类无参构造器");
    }

    // 与形参同名,用this指向Person类自身来区分成员属性与形参
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("父类有参构造器:name is :" + name + "age is " + age);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class ITGod extends Person {

    public static void main(String[] args) {
        ITGod ig = new ITGod();
        ig = new ITGod(25);
    }

    public ITGod() {
        // 调用父类无参构造器
        super();
        System.out.println("子类调用父类的无参构造器");
    }

    public ITGod(int age) {
        // 调用无参构造器
        this();
        System.out.println("子类调用无参构造器" + "age is " + age);
    }
}

-----------------------------------------------------------------
・【运行结果】
	父类无参构造器
	子类调用父类的无参构造器
	父类无参构造器
	子类调用父类的无参构造器
	子类调用无参构造器age is 25
	

 


4. super和this的异同

  • super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
  • this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
  • super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
  • this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
    调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
  • super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
  • super()和this()均需放在构造方法内第一行。
    尽管可以用this调用一个构造器,但却不能调用两个。
  • this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
  • this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
  • 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。

原文链接:https://blog.csdn.net/weixin_44598507/article/details/117221918



所属网站分类: 技术文章 > 博客

作者:coding

链接:http://www.javaheidong.com/blog/article/207285/78a81ffe8b347e87c502/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)