Java ---一些关键字

这篇具有很好参考价值的文章主要介绍了Java ---一些关键字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

(一)this和super关键字

  Ⅰ  this

 ①含义:

this:当前对象

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

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

②this用法:

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

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

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

Ⅱ super

①含义:

super:引用父类声明的成员

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

②super的用法:

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

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

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

 Ⅲ this和super关键字的用处 

 ⒈解决成员变量重名问题

具体做法: 

  • ① 如果实例变量与局部变量重名,可以在实例变量前面加this.进行区别。

  • ② 如果子类实例变量和父类实例变量重名,并且父类的该实例变量在子类仍然可见,在子类中要访问父类声明的实例变量需要在父类实例变量前加super.,否则默认访问的是子类自己声明的实例变量。

  • ③ 如果父子类实例变量没有重名,只要权限修饰符允许,在子类中完全可以直接访问父类中声明的实例变量,也可以用this.实例访问,也可以用super.实例变量访问。

 具体代码:

class Father{
	int a = 10;
	int b = 11;
}
class Son extends Father{
	int a = 20;
    
    public void test(){
		//子类与父类的属性同名,子类对象中就有两个a
		System.out.println("子类的a:" + a);//20  先找局部变量找,没有再从本类成员变量找
        System.out.println("子类的a:" + this.a);//20   先从本类成员变量找
        System.out.println("父类的a:" + super.a);//10    直接从父类成员变量找
		
		//子类与父类的属性不同名,是同一个b
		System.out.println("b = " + b);//11  先找局部变量找,没有再从本类成员变量找,没有再从父类找
		System.out.println("b = " + this.b);//11   先从本类成员变量找,没有再从父类找
		System.out.println("b = " + super.b);//11  直接从父类局部变量找
	}
	
	public void method(int a, int b){
		//子类与父类的属性同名,子类对象中就有两个成员变量a,此时方法中还有一个局部变量a		
		System.out.println("局部变量的a:" + a);//30  先找局部变量
        System.out.println("子类的a:" + this.a);//20  先从本类成员变量找
        System.out.println("父类的a:" + super.a);//10  直接从父类成员变量找

        System.out.println("b = " + b);//13  先找局部变量
		System.out.println("b = " + this.b);//11  先从本类成员变量找
		System.out.println("b = " + super.b);//11  直接从父类局部变量找
    }
}
class Test{
    public static void main(String[] args){
        Son son = new Son();
		son.test();
		son.method(30,13);  
    }
}

总结:

  • 变量前面没有super.和this.

    • 在构造器、代码块、方法中如果出现使用某个变量,先查看是否是——当前块——声明的 局部变量 ,

    • 如果不是局部变量,先从当前执行代码的  本类去找成员变量 

    • 如果从当前执行代码的本类中没有找到,会往上找——父类声明的成员变量 (权限修饰符允许在子类中访问的)

  • 变量前面有this.

    • 通过this找成员变量时,先从当前执行代码的——本类去找成员变量 

    • 如果从当前执行代码的本类中没有找到,会往上找——父类声明的成员变量(权限修饰符允许在子类中访问的)

  • 变量前面super.

    • 通过super找成员变量,直接从当前执行代码的直接父类去找成员变量(权限修饰符允许在子类中访问的)

    • 如果直接父类没有,就去父类的父类中找(权限修饰符允许在子类中访问的)

 ⒉ 解决成员方法重写后调用问题

 具体做法:

  • 如果子类没有重写父类的方法,只有权限修饰符运行,在子类中完全可以直接调用父类的方法;

  • 如果子类重写了父类的方法,在子类中需要通过super.才能调用父类被重写的方法,否则默认调用的子类重写的方法   

  具体代码:


class Father{
    int a = 10;
    int b = 11;
    public int getA() {
        return a;
    }
}
class Son extends Father{
    int a = 20;
    public int getA() {
        return a;
    }
    public void test(){
        System.out.println(getA());//10  本类没有找父类,执行父类中的getNum()
        System.out.println(this.getA());//10  本类没有找父类,执行父类中的getNum()
        System.out.println(super.getA());//10  本类没有找父类,执行父类中的getNum()
    }
}
 
class Test{
    public static void main(String[] args){
        Son son = new Son();
        son.test();
      
       /* 20
        20
        10        */
    }
}

总结:

  • 方法前面没有super.和this.

    • 先从子类找匹配方法,如果没有,再从直接父类找,再没有,继续往上追溯

  • 方法前面有this.

    • 先从子类找匹配方法,如果没有,再从直接父类找,再没有,继续往上追溯

  • 方法前面有super.

    • 从当前子类的直接父类找,如果没有,继续往上追溯

(二)final关键字 

    final(最终的,不可更改的 ),在java中final可修饰类(表示这个类不能被继承,没有子类 ),方法(表示这个方法不能被子类重写 ),变量(final修饰某个变量(成员变量或局部变量),表示它的值就不能被修改,即常量,常量名建议使用大写字母)。

     为什么用final关键字呢?:不想让你继承。

 具体代码:



  class Test {

    public static void main(String[] args){
        final int MIN_SCORE = 0;
        final int MAX_SCORE = 100;

        MyDate m1 = new MyDate();
        System.out.println(m1.getInfo());

        MyDate m2 = new MyDate(2022,2,14);
        System.out.println(m2.getInfo());
    }
}
final class MyDate{
    //没有set方法,必须有显示赋值的代码
    private final int year;
    private final int month;
    private final int day;

    public MyDate(){
        year = 1970;
        month = 1;
        day = 1;
    }

    public MyDate(int year, int month, int day) {
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public int getYear() {
        return year;
    }

    public int getMonth() {
        return month;
    }

    public int getDay() {
        return day;
    }

    public String getInfo(){
        return year + "年" + month + "月" + day + "日";
    }
}
//public class CC extends MyDate{} Cannot inherit from final 'MyDate'

(三)native关键字

①定义:

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

  

②用途:

它只能用在一个地方,方法的返回值类型前面,作为方法的一个修饰符。

③作用:

用它修饰方法,在.java中看不到这个方法的方法体。

④语法形式:

【修饰符】 class 类名{

   【权限修饰符】 native 返回值类型 方法名 (【形参列表】);

}文章来源地址https://www.toymoban.com/news/detail-406479.html


  class Test {
    public static void main(String[] args){
        Test t=new Test();
        System.out.println(t.hashCode());//同时按Ctrl+点击hashCode ->查看hashCode的源码
    }
}

到了这里,关于Java ---一些关键字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在VScode学Java继承(Java继承的特点、super关键字、super和this对比、方法重写、子类构造器)贰

    类的成员包括:成员变量;成员方法;构造方法 构造方法:不管什么修饰符都不可继承 成员变量:都可以继承,但注意一点(继承!=调用,私有的就不可调用) 成员方法:非私有可以。私有不可。 我的个人博客主页:如果’\\\'真能转义1️⃣说1️⃣的博客主页 关于Java基本语

    2024年02月14日
    浏览(37)
  • 【JavaSE专栏57】深度解析Java中的this和super关键字:用途、差异和实际应用

    博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄

    2024年02月07日
    浏览(32)
  • Java ---一些关键字

     ①含义: this:当前对象 在构造器和非静态代码块中,表示正在new的对象 在实例方法中,表示调用当前方法的对象 ②this用法: this.成员变量:表示当前对象的某个成员变量,而不是局部变量 this.成员方法:表示当前对象的某个成员方法,完全可以省略this. this()或this(实参列

    2023年04月09日
    浏览(30)
  • JavaSE基础(19) super,this 关键字

    子类对象的创建过程: 子类的构造方法中,默认先调用父类的无参构造方法。如果没有显示的调用,那么隐含着super()。         可以访问父类的属性         可以访问父类的方法         指代父类的构造方法, 如果有多个,靠参数来区分。要在第一行。      

    2023年04月10日
    浏览(29)
  • Java面向对象——多态、Object类、instanceof关键字以及final关键字

    总之,多态是面向对象编程中一个非常重要的概念,通过它可以实现统一的接口来操作不同的对象,提高代码的可读性和可维护性。在实际编程中,多态性的使用可以使代码更加灵活和扩展性更强。方法重写是实现多态的基础。 重写如下所示 关于hashCode方法的重写: 重写t

    2024年02月12日
    浏览(47)
  • 每天一个知识点 - 了解和使用super关键字

    super是一个,super和this很类似 可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作 如果子类重写了父类的中某个方法的实现,可以通过使用 super 来引用父类的方法实现        super( )函数是用于调用父类的一个方法,指向了当前对象自

    2024年02月21日
    浏览(35)
  • JavaScript的static、this、super关键字介绍

    static: ☆ static用于定义类的静态方法和静态属性。 ☆ 静态方法是直接与类相关联的方法,不需要实例化类即可调用。 ☆ 静态属性是类本身的属性,而不是实例的属性。 ☆ 在静态方法内部,不能使用this来引用实例,因为静态方法与特定实例无关。 th

    2024年02月16日
    浏览(29)
  • 【java面向对象中static关键字】

    static修饰成员变量 static修饰成员变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static的注意事项 static的应用知识:代码块 static的应用知识:单例设计模式 static静态的意思,可以修饰成员变量,成员方法; static修饰成员变量: 1.有static修饰的成员变量叫做

    2024年02月13日
    浏览(35)
  • Java 对象创建流程、this 关键字

    2024年02月12日
    浏览(38)
  • ES6中的Class关键字和super()方法,使用详细(class类和super()方法)

    简介:在ES6中,我们可以使用class来定义类,并通过 extends 实现类的继承,然后在子类中,我们可以使用 super() 来调用父类的构造函数;今天来分享下class的使用详细。 1、 首先,使用class,定义一个父类; 2、 然后再定义一个子类, 通过ex

    2024年02月12日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包