Java 面向对象进阶 03 static 注意事项、重新认识main方法(黑马)

news2024/10/6 6:02:11

案例代码如下:

非静态的方法虚拟机会自带一个关键字,如下:

但是不能手动出来,它的类型就是当前类;

通过输出this,得到当前s1,s2 的地址;

所以在输出时会有隐藏的this,所以this所指向的s1 的名字,年龄,和老师年龄。

由于方法里面没有与成员变量重名,所以可以不写this;

如果添加show2 方法,那么在程序运行的时候,this.show2(); 就代表,s1调用show2,和s2 调用show2;

但是在静态方法中添加this关键字会报错:

静态方法中,只能访问静态;静态方法中没有this关键字

Java的非静态方法会自带this关键字,而静态方法没有this关键字是因为它们用于不同的场景。

非静态方法是对象级别的方法,它是通过具体的对象来调用的。由于非静态方法是针对具体对象的行为,因此在方法内部可以使用this关键字来引用当前调用该方法的对象。this关键字代表当前对象的引用,可以用来访问该对象的成员变量和其他方法。

静态方法是类级别的方法,它是通过类名直接调用的。静态方法不依赖于具体的对象,因此在方法内部无法使用this关键字来引用对象,因为在静态方法中无法确定具体是哪个对象在调用该方法。静态方法只能访问静态成员变量和其他静态方法。

非静态方法是针对具体对象的行为,使用this关键字来引用当前对象;而静态方法是类级别的行为,无法使用this关键字来引用对象。

静态方法可以调用静态变量和静态方法。静态变量和静态方法都属于类级别的,可以在静态方法中直接调用,不需要创建类的实例。

静态方法还可以调用非静态方法,但需要通过创建类的实例来调用非静态方法。

不能直接调用,因为非静态方法中就自带this方法,所以调用不了

静态方法不能调用非静态变量,因为非静态变量可以对应很多对象,所以静态方法调用的时候不明确调用的哪个变量,所以不能调用非静态变量;

非静态方法可以访问所有:

非静态方法可以访问所有是指在一个非静态方法中,可以直接访问该类中的所有成员变量和其他非静态方法,而无需通过对象或类名进行访问。这是因为非静态方法是通过对象调用的,每个对象都有自己的一份成员变量和方法,所以可以直接访问。

静态方法则不具备这个特性,它不能直接访问非静态的成员变量和方法,需要通过对象或类名进行调用。

内存分析:

内存分析图1、

  实例变量和对象有关;

在Java中,对象是具体存在的实体,它是根据类定义创建出来的。对象可以具有状态(即实例变量)和行为(即方法)。

实例变量是对象的状态信息,它代表对象的特征或属性。每个对象都有自己的一组实例变量,它们可以具有不同的值。实例变量可以是基本数据类型(如int、float)或引用类型(如String、数组等)。

实例变量的值在对象被创建时分配,并可以在对象的整个生命周期内被访问和修改。每个对象可以独立地拥有自己的实例变量,它们不同对象之间的实例变量是相互独立的。

对象和实例变量之间的关系是:对象是由类创建出来的具体实体,而实例变量是对象的一部分,用于存储对象的状态信息。每个对象都有自己独立的实例变量,不同对象之间的实例变量是相互独立的。

这个时候还没有创建对象,所以不能调用对象里面的实例变量;

内存分析图2、

静态方法如果调用了非静态的成员变量方法,那么这时候并不清楚对象是哪个,所以会报错:

内存分析图3、

重新认识main方法:

数组长度默认为0

对该数组添加元素步骤:

1、

2、

运行结果:

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

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

相关文章

LaTeX 文本对齐:ragged2e 宏包

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

268. Missing Number(丢失的数字)

题目描述 给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。 问题分析 因为这些数是在[0, n] 范围内的数,我们要是一一标记其是否出现很麻烦,但是我们考虑到如果用所有数的和,减去…

【网络安全|漏洞挖掘】ChatGPT 再曝安全漏洞,被指泄露私密对话

风靡全球的聊天机器人 ChatGPT 近日再次陷入安全风波,被曝泄露用户同机器人的私密对话,其中包含用户名、密码等敏感信息。 ArsTechnica 网站援引其读者提供的截图报道称,ChatGPT 泄露了多段非用户本人的对话内容,包含了大量敏感信…

Web前端入门 - HTML JavaScript Vue

ps:刚开始学习web前端开发,有什么不正确、不标准的内容,欢迎大家指出~ Web简介 90年代初期,Web1.0,静态页面,不和服务器交互,网页三剑客指Dreamweaver、Fireworks、Flash2000年代中期&#xf…

HiveSQL题——数据炸裂和数据合并

目录 一、数据炸裂 0 问题描述 1 数据准备 2 数据分析 3 小结 二、数据合并 0 问题描述 1 数据准备 2 数据分析 3 小结 一、数据炸裂 0 问题描述 如何将字符串1-5,16,11-13,9" 扩展成 "1,2,3,4,5,16,11,12,13,9" 且顺序不变。 1 数据准备 with da…

算法练习-逆波兰表达式求值(思路+流程图+代码)

难度参考 难度:中等 分类:栈与队列 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记&#xff0c…

能耗在线监测系统在节能管理中的应用

上海安科瑞电气股份有限公司 胡冠楠 咨询家:“Acrelhgn”,了解更多产品资讯 摘要:开展能耗在线监测系统建设,对加强政府部门和企业节能管理中的应用前景,分析系统在能源消费预测分析、能效对标、节能监察、能源精细化…

【Oracle云】OCI DevOps Services 构建自动化流水线 (1) - 基础架构流程 OCI 代码仓库使用

OCI DevOps Services 是 Oracle Cloud Infrastructure (OCI) 提供的一项独立的 CI/CD 服务,旨在支持用户构建自动化的流水线,实现更高效、可靠的软件交付。在本系列的第一篇文章中,我们将深入探讨 OCI DevOps Services 的基础架构流程&#x…

探索设计模式的魅力:精准解读桥接模式-用桥接模式构建可扩展的软件系统

设计模式专栏:http://t.csdnimg.cn/nolNS 目录 一、了解桥接模式:探索抽象和实现的分离 1.1 开-闭原则 1.2 组合/聚合复用原则 1.3 定义 1.4 用意 1.5 基本思想 1.6 组成部分 1.7 桥梁模式的示意性系统的结构图 二、桥接模式的优势&#xff1a…

RK356X RKAndroid12 TF卡配置 自动挂载

RK356X RKAndroid12 TF卡配置 自动挂载 RK3568 有三个SDMMC接口&#xff0c;分别为SDMMC0 SDMMC1 SDMMC2 DTS 配置 1. max-frequency <150000000>; 此配置设置 SD 卡的运行频率&#xff0c;虽然设置为 150M &#xff0c;但是还要根据 SD 卡的不同模式进行调整。这…

C语言系列-浮点数在内存中的存储

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 浮点数在内存中的存储 浮点数的存储 浮点数存的过程 浮点数取的过程 题目解析 浮点数在内存中的存储 常见的浮点数&#xff1a;3.14159.1E10等&#xff0c;浮点数家族包括&…

使用websocket后端接入文心一言

最近再写项目练手&#xff0c;想着最近大模型那么火&#xff0c;也想接入项目来玩一玩&#xff0c;于是去了解了一下相关的api和通信协议&#xff0c;最后选择了文心一言进行集成&#xff0c;国内的相对稳定。ERNIE-Bot-turbo - 千帆大模型平台 | 百度智能云文档 (baidu.com) …

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索

elementUI实现selecttree自定义下拉框树形组件支持多选和搜索 效果图定义子组件父组件应用 效果图 定义子组件 主要结合el-select和el-tree两个组件改造的。 <template><div class"selectTree"><el-select filterable :filter-method"filterMe…

AI学习(4): PyTorch实战-手写数字识别

1.介绍 在之前的文章中介绍了PyTorch的环境安装&#xff0c;和张量(tensor)的基本使用&#xff0c;为防止陷入枯燥的理论学习中&#xff0c;在这篇文章&#xff0c;我们将进行项目实战学习&#xff0c;项目主要内容: 基于MNIST数据集&#xff0c;实现一个手写数字识别的神经网…

基于OpenCV的高压电力检测项目案例

一、项目背景与目标 随着高压电力设施的日益增多&#xff0c;传统的巡检方式已无法满足现代电力系统的需求。为此&#xff0c;我们决定利用计算机视觉技术&#xff0c;特别是OpenCV库&#xff0c;开发一个高压电力检测系统。目标是实现自动化、高精度的电力设备检测&#xff0c…

《动手学深度学习(PyTorch版)》笔记4.8

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过。…

get out of black background

文章目录 基础 Sequence settings (after selected a Sequence) 看见 ( 让Pr表示透明 ) Effects-> Color Key, drag into your Sequence >.如果看不到 Effects 面板, 可以在 Window 菜单中打开 在Effect Controls 你可以调整 Color Key 的效果了先吸取黑色 还可以使用ma…

Python笔记(二)—— Python判断语句

2.1 布尔类型和比较运算符 布尔类型用于表示&#xff1a;真和假 比较运算符用于计算&#xff1a;真和假 1. 布尔&#xff08;bool&#xff09;表示现实生活中的逻辑&#xff0c;即真和假 True表示真False表示假 True本质上是一个数字记作1&#xff0c;False记作0 定义变…

17.Golang channel的基本定义及使用

目录 概述实践无缓冲 channel代码结果 缓冲 channel代码结果 channel的关闭特点代码结果range代码结果 select channel代码结果 结束 概述 此篇文章介绍 channel 的用法 无缓冲 channel缓冲 channelchannel的关闭特点range channelselect channel 每一种&#xff0c;配上完整…

Flutter 和 Android原生(Activity、Fragment)相互跳转、传参

前言 本文主要讲解 Flutter 和 Android原生之间&#xff0c;页面相互跳转、传参&#xff0c; 但其中用到了两端相互通信的知识&#xff0c;非常建议先看完这篇 讲解通信的文章&#xff1a; Flutter 与 Android原生 相互通信&#xff1a;BasicMessageChannel、MethodChannel、…