Java关键字和API

news2024/12/23 18:36:34

1 this和super关键字

1.this和super的意义

this:当前对象

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

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

super:引用父类声明的成员

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

2.this和super的使用格式
  • this

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

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

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

  • super

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

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

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

    • this 和 super
      * ①this:
      * 1.使用场景:构造器,非静态代码块,用于实例初始化
      * 2.this指代new的对象
      * 3.表示调用方法的对象,谁调用就指向谁
      * 4.
      *      this.成员变量
      *      this.成员方法
      *      this()或着this(实参列表)出现在构造器中
      * ②super
      * 1.使用场景  继承类中表示父类
      * 2.
      *      super.成员变量
      *      super.成员方法
      *      super()和super(实参列表)
      *      super()当调用子类的构造器时,如果没有进行super()书写,那么就会在自动在构造器的首行
      *      添加super()进行使用对应init初始化的方法
      *      super()无论在什么情况下,需要在首行进行书写
3.避免子类和父类声明重名的成员变量

特别说明:应该避免子类声明和父类重名的成员变量

因为,子类会继承父类所有的成员变量,所以:

  • 如果重名的成员变量表示相同的意义,就无需重复声明

  • 如果重名的成员变量表示不同的意义,会引起歧义

在阿里的开发规范等文档中都做出明确说明

4.解决成员变量重名问题
  • 如果实例变量与局部变量重名,可以在实例变量前面加this.进行区别

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

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

  • 总结:起点不同(就近原则)

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

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

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

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

  • 变量前面有this.

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

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

  • 变量前面super.

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

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

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

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

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

总结:

  • 方法前面没有super和this.

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

  • 方法前面有this.

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

  • 方法前面有super.

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

2 native关键字(了解)

1.native的意义

native:本地的,原生的

2.native的语法

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

/* * native:原生的
 *
 *表示这个方法的方法体代码不是用Java语言实现的,java中看不到这个方法体,而是由C/C++语言编写的。
 */
public class TestNative {
    public static void main(String[] args) {
        Person p1=new Person();
        System.out.println(p1);//day0418.classcode.keyword.Person@1b6d3586
//      它是一串数字,将对象的地址值转换为十六进制
        System.out.println(p1.hashCode());//460141958
        //按住ctrl键,可以追踪源码
      /*  Person p1=new Person();
        System.out.println(p1);//day0418.classcode.keyword.Person@1b6d3586
//      它是一串数字,将对象的地址值转换为十六进制
        System.out.println(p1.hashCode());//460141958
        //按住ctrl键,可以追踪源码*/
     /*   Person p1=new Person();
        System.out.println(p1);//day0418.classcode.keyword.Person@1b6d3586
//      它是一串数字,将对象的地址值转换为十六进制
        System.out.println(p1.hashCode());//460141958
        //按住ctrl键,可以追踪源码*/
    }

}
class  Person{}

3 final关键字

1.final的意义
final:最终的,不可更改的
2.final修饰类
表示这个类不能被继承,没有子类
3.final修饰方法
表示这个方法不能被子类重写
4.final修饰变量

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

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

/* final 最终的
 * 1.final修饰类  太监类  不能继承
 * 2.final 修饰方法 不能进行重写
 * 3.final 修饰变量(通常称为常量)不能进行修改  常量通常大写
 *
 *
 */
final class Person1{

}

class Father{

}

class Son1 extends Father{

}
/*
报错
class Son2 extends Person1{

}*/

class Father2{
    public final void method(){
        System.out.println("父类方法");
    }
}
class Son2 extends Father2{
 //报错  final方法不能继承
   // @Override
  /*  public void method() {
        super.method();
    }*/
}
/*


class Father2{
    public final void method(){
        System.out.println("父类方法");
    }
}
class Son2 extends Father2{
 //报错  final方法不能继承
   // @Override
  /*  public void method() {
        super.method();
    }
}
        */

/*


class Father2{
    public final void method(){
        System.out.println("父类方法");
    }
}
class Son2 extends Father2{
 //报错  final方法不能继承
   // @Override
  /*  public void method() {
        super.method();
    }
}
        */


public class TestFinal {
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1611536.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui-键盘

文章目录 键盘键盘——记忆宫殿入门——通过键盘发送一个字符串——typewrite()常规——键名——typewrite()常规——按下键盘——keyDown()常规——释放键盘——keyUp()升级——热键组合——hotkey() 键盘 pyautogui也有一些函数向计算机发送虚拟按键,让你能够填充…

嵌入式物联网实战开发笔记-乐鑫ESP32芯片功能对比以及功能选型【doc.yotill.com】

乐鑫ESP32入门到精通项目开发参考百例下载: 链接:https://pan.baidu.com/s/1ATvRnAZvxkev-PJfd3EAPg?pwd4e33 提取码:4e33 2.1 初识 ESP32 ESP32-S3 是一款低功耗的 MCU 系统级芯片 (SoC),支持 2.4 GHz Wi-Fi 和低功耗蓝牙 (…

【PythonCode】力扣Leetcode16~20题Python版

【PythonCode】力扣Leetcode16~20题Python版 前言 力扣Leetcode是一个集学习、刷题、竞赛等功能于一体的编程学习平台,很多计算机相关专业的学生、编程自学者、IT从业者在上面学习和刷题。 在Leetcode上刷题,可以选择各种主流的编程语言,如C…

汇编语言(详解)

汇编语言安装指南 第一步:在github上下载汇编语言的安装包 网址:GitHub - HaiPenglai/bilibili_assembly: B站-汇编语言-pdf、代码、环境等资料B站-汇编语言-pdf、代码、环境等资料. Contribute to HaiPenglai/bilibili_assembly development by creat…

一文让你彻底掌握操作符(超详细教程)

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🔥系列专栏:小杨带你玩转C语言【初阶】 🐳希望大家多多支持🥰一起进步呀! 大家好呀!我是小杨。小…

学习笔记-数据结构-线性表(2024-04-18)- 单向链表选择排序

试以单向链表为存储结构实现简单选择排序的算法。 实现递增排序,首先选择一个元素作为第一个比较值,遍历其他所有的元素,如果发现其他元素中有比它小的元素,则交换两个元素,这样每一趟都能找到符合要求的最小值 正经…

Turnitin查重时,论文里面的图片会不会被查到?

在撰写论文的时候,论文里面插入几张图片作为观点和数据的阐述在再正常不过了。但是,一旦涉及到论文查重,事情就变得有点复杂了。许多同学早使用Turnitin检测系统(www.checktoo.com)对论文查重时,就常问题到…

记录交叉编译环境配置--海思开发板的 嵌入式nginx和 php的移植

嵌入式 lnmp搭建的记录 一些交叉编译的配置环境思路分享:P:php编译PHP可能遇到的问题configure阶段:Makefile-make阶段:Makefile-make install阶段: N:Nginx 文章比较水,并没有没解决什么实际问…

现货白银保证金交易要先分析趋势

现货白银是保证金交易品种,买卖过程中可能会涉及数十倍的资金杠杆,所以它对投资者的分析水平和交易水平的要求都比较高,所以在进入这个市场之前,投资者需要先学习一些基本的分析方法,当中可以分为基本面和技术面两大流…

2024年外贸独立站建设首选:WordPress引领市场,助力企业出海

随着全球经济的不断融合与发展,越来越多的企业开始关注海外市场,希望通过建设外贸独立站来扩大品牌影响力和销售额。在众多的内容管理系统(CMS)中,WordPress以其强大的功能、丰富的插件资源和用户友好的操作界面&#…

医学临床预测模型发展新趋势-并联式

医学临床预测模型发展新姿势-并联式 现有的预测模型是对单个结局指标进行分类或者回归,得出最终的结论,而辅助医生进行临床决策。众所周知,临床决策过程中,医生通常会考虑多个结局指标来做出最终的决策;临床研究中也通…

多因子模型的因子分组-克隆巴赫α系数

优质博文:IT-BLOG-CN 在建立我们的Alpha模型之前,我们得先知道什么是Alpha?Alpha是一条或者一系列能够预测股票走势的信息资讯组合。而这每一条非随机的信息资讯,我们称之为多因子模型的因子。多因子模型因子的选择需要避免系统性…

苍穹外卖day1--开发环境搭建

整体结构 前端:管理端(Web) 用户端(小程序) 后端:后端服务(Java) 前端工程基于ngnix运行 启动nginx:双击nginx.exe即可启动nginx服务,访问端口号为80 后端…

智慧浪潮下的产业园区:解读智慧化转型如何打造高效、绿色、安全的新产业高地

随着信息技术的飞速发展,智慧化转型已经成为产业园区发展的重要趋势。在智慧浪潮的推动下,产业园区通过集成应用物联网、大数据、云计算、人工智能等先进技术手段,实现园区的智慧化、高效化、绿色化和安全化,从而打造成为新产业高…

网络安全产品---数据库防火墙/审计

数据库防火墙 防火墙的类型繁多,即使下一代防火墙或者说AI防火墙集成功能再多,我觉得waf与数据库防火墙也有其无法被替代的理由,以此记录我对数据库防火墙的理解 what 数据库防火墙是基于数据库协议分析与访问行为控制的数据库安全防护产品…

ZStack教育云计算解决方案入选高质量数字化转型技术解决方案集

近日,中国信通院“铸基计划”《高质量数字化转型技术解决方案(2023年度)》(以下简称“方案集”)发布,云轴科技ZStack智慧教育云计算解决方案入选《高质量数字化转型技术解决方案集》。 为促进数字化转型相…

Kubernetes Pod OOMKilled诊断

Kubernetes Pod OOMKilled诊断 介绍 OOMKilled错误表示容器或pod已被终止,因为它使用的内存多于分配的内存。OOMKilled,通常称为Exit Code 137,是一种源自Linux的错误。OOM(Out of Memory Manager)是Linux系统上的一…

【Flutter】多语言方案二:GetX 版

介绍 多语言方案:GetX版,需要手动自定义字符串引用常量,优点不需要自己管理状态。 目录 介绍运行效果一、安装 GetX二、使用1.语言配置 在lib/core下创建一个language文件夹,文件夹下创建一个local.dart文件2.language文件夹下创…

网络行为分析与异常检测

构建防火墙和使用简单的安全解决方案不足以保护网络免受网络异常或攻击,因为DDoS攻击、未知恶意软件和其他安全威胁一直在上升,改变了网络安全格局。网络管理员必须积极主动地分析网络,获得对网络的完全控制,并全面了解网络流量活…

数据可视化(六):Pandas爬取NBA球队排名、爬取历年中国人口数据、爬取中国大学排名、爬取sina股票数据、绘制精美函数图像

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊! 喜欢我的博客的话,记得…