黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

news2025/1/12 3:47:04

系列文章目录


文章目录

  • 系列文章目录
  • 一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量
    • 1、静态变量
    • 2、静态变量底层原理
    • 3、static静态方法
    • 4、工具类、测试类、Javabean类
    • 5、static注意事项
      • 从代码层面
      • 从内存层面
    • 6、重新认识main方法


一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量

1、静态变量

被static修饰的成员变量,叫做静态变量
如果我们定义的同一个班级的Student中如果有一个属性为老师姓名,所有同学的这个属性因为都是一个班的同学所以相同,那么我们不必在新建对象时候一个个赋值,可以使用静态变量的方式。

public class Student {
    //属性:姓名 年龄 性别
    //新增:老师的姓名
    private String name;
    private int age;
    private String gender;
    public static String teacherName;
}

特点:被该类的所有对象共享。不属于对象,属于类。随着类的加载而加载,优先于对象存在。
调用方式:(1)类名调用(推荐) (2)对象名调用

2、静态变量底层原理

在这里插入图片描述

  1. 程序刚启动时,首先main方法入栈。
  2. 在main的第一行代码中用类名Student调用了静态变量teacherName,这是就用到了Student这个类,这时候就会把Student类的字节码文件加载到方法区,并在内存当中创建了一个单独存放静态变量的空间—静态区,这时候teacherName的默认值为NULL。注意此时内存中没有对象,所以静态变量优先于对象而出现,其他用static修饰的东西也有这个特性。然后给teacherName赋值“阿玮老师”。
  3. 之后第二行代码有new Student(),即可创建一个Student对象放入内存中,之后student对象需要teacherName时,从静态区中读取即可。

3、static静态方法

被static修饰的成员方法,叫做静态方法
特点:

  1. 多用在测试类和工具类中
  2. Javabean类中很少会用

调用方式:

  1. 类名调用(推荐)
  2. 对象名调用

4、工具类、测试类、Javabean类

Javabean类:用来描述一类事物的类。比如,Student,Teacher,Dog,Cat等。
测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口。
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类。特点:类名见名知意,私有化构造方法(构造方法一旦私有,那么外界不能创建这个类的对象),方法都定义为静态的(方便调用)。

5、static注意事项

  1. 静态方法只能访问静态变量和静态方法
  2. 非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法
  3. 静态方法中是没有this关键字

从代码层面

理解1和3:在一般的一个类中的普通成员函数,其实自带一个参数就是调用者的地址值,如下图所示,s1.show1()在执行时,就自动将s1的地址传入了函数show1中,然后show1如果要输出属性,就可以知道输出的是s1的属性,而再调用show2时候,默认还是show1参数的那个地址来调用show2(下图可以省略show2前面的this,一般这个this是隐含的)。
在这里插入图片描述
而静态方法的参数中,没有自带那个this参数,我们也不能自己设置,所以静态方法中使用this是不可以的,计算机不知道this指的是谁。
理解2:为什么非静态方法(里面带着对象的地址)可以访问所有呢,因为静态方法除了用类名可以访问,也可以用对象(也就是对象地址)来访问。

从内存层面

理解为什么静态方法只能访问静态变量和静态方法,即不能访问非静态是为什么?
首先不能访问非静态变量是因为,静态方法会比非静态变量先进入内存,那内存中还没有静态方法需要的变量时,显然无法调用,会出现错误。不能访问非静态方法,是因为静态方法中没有对象地址,那么显而易见不知道访问的是哪个对象的方法,会出现错误。
在这里插入图片描述

6、重新认识main方法

在这里插入图片描述
最后一条中:我们可以在IDEA中通过设置程序实参来体会,如下两图所示。
在这里插入图片描述在这里插入图片描述

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

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

相关文章

[ WARN:0@0.014] global loadsave.cpp:248 cv::findDecoder imread_

[ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 目录 [ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…

网工必装软件,SecureCRT从零到精通,不可错过

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 中午好,我的网工朋友。 相信在平时的日常工作中,大家经常需要通过安全的方式远程访问各种设备和服务。SecureCRT作为一款强…

JavaWeb的三层架构和分层解耦

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 目录 三层架构 分层解耦 三层架构是哪三层? Controller:表现层…

云微客短视频矩阵能带来流量吗?有哪些产品特色?

短视频平台,现如今已经成为了互联网最大的流量池,诸如抖音、快手、小红书、视频号、哔哩哔哩等平台,日活量都在上亿。短视频赛道汇聚了无数的用户群体,所以商企品牌的营销定位就应该在这里。 许多企业看到了这样的营销商机&#x…

AI绘画模型之:CLIP 与 DALL-E 2

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

自动驾驶:SLAM

什么是SLAM SLAM,即Simultaneous Localization and Mapping(同时定位与地图构建) 最早由Smith、Self和Cheeseman于1988年提出。是自动驾驶领域中的一项核心技术。它允许自动驾驶车辆在使用各种传感器(如激光雷达、摄像头、IMU等&…

计算机毕业设计选题推荐-服装生产管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

大模型开闭源之争,本质是商业化的争夺

大模型从发展之初,即存在开源与闭源两条路线,孰优孰劣,也处于持续争论之中。2024年7月,在“2024世界人工智能大会”上,众多业内领军人物对大模型开闭源表达了针锋相对的观点。例如,百度创始人李彦宏站在闭源…

成功解决:java.security.InvalidKeyException: Illegal key size

在集成微信支付到Spring Boot项目时,可能会遇到启动报错 java.security.InvalidKeyException: Illegal key size 的问题。这是由于Java加密扩展(JCE)限制了密钥的长度。幸运的是,我们可以通过简单的替换文件来解决这个问题。 解决…

LeetCode 17.电话号码的字母组合 C++写法

LeetCode 17.电话号码的字母组合 C写法 思路🧐: 使用深度优先搜索递归进行解题。首先建立一个号码与字母的映射表,当接收传过来的号码字符串时减去字符0就可以拿到该号码。其次使用string存储当前号码所对应字母,然后for循环遍历字…

用Java手写jvm之尝试解析clazz文件内容

写在前面 源码 。 本文尝试来解析下class文件的内容,了解了class文件内容后,对我们提升java认知将会带来很大的帮助,有多大呢,不好说,总之很大很大,大到受不了😍😍😍。 …

安泰高压放大器在工业领域中的应用

高压放大器是一种在工业领域中发挥重要作用的电子设备,其功能是将低电压信号放大到更高的电压水平。这种设备在多个工业应用中都发挥着关键作用,提供了稳定、可调节的高电压输出。以下是高压放大器在工业领域中的主要应用: 1.精密仪器和实验室…

尚硅谷电商实时数仓笔记-《二》数仓建模概述

上一篇: 尚硅谷电商实时数仓笔记-《一》数仓概述-CSDN博客 二、数仓建模概述 2.1 数据仓库建模的意义 如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置; 如果把数据看作城市的建筑,我们希望城市规划布局合理…

面试官没想到一个ArrayList,我都能跟他扯半小时

点赞再看,Java进阶一大半 南哥在stackoverflow社区看到14年前的这么一个问题:Java 的 Vector.add() 和 Vector.addElement() 有什么区别,大家有答案吗? 它们实际上没有区别!!!1996年的JDK 1.0版…

每日一题,力扣leetcode Hot100之56. 合并区间

解题思路: 先按照每个数组的第一个数字sort排序。 每次进来一个数组,如果你的第1项大于别人的第2项,那么直接添加。 否则的话则存在可以合并的区间,然后合并的区间的第2项则为旧的和新的第2项的最大值。 class Solution:def m…

SpringBoot框架简单整合ShardingSphere-JDBC实现MySQL分库分表和读写分离及加密混合

1. 主从配置 1.1 主机1(IP:192.168.186.77) 1.1.1 docker-compose.yml version: 3.8services:mysql-master:image: mysql:latestcontainer_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_USER: masterMYSQL_PASSWORD: 123456MYSQL…

计算机毕业设计Hadoop+Spark旅游景点可视化 旅游景点推荐系统 景区游客满意度预测与优化 Apriori算法 景区客流量预测 旅游大数据 景点规划

### 开题报告 **论文题目:** 基于Spark的旅游景点可视化系统的设计与实现 **研究背景与意义:** 随着旅游业的快速发展,人们对旅游信息的获取和处理需求越来越高。传统的旅游信息系统虽然能够提供静态的数据查询和展示功能,但在…

短视频矩阵管理系统开发

在短视频内容爆炸式增长的今天,如何高效管理多个账号,同时保持内容的创新性和互动性,成为了创作者和品牌面临的重大挑战。短视频矩阵管理系统的开发,正是为了解决这一问题,提供一个全面的解决方案。 多账号管理&#…

本地调试指引文档

在开发组件库时,我们经常需要在真实的项目中测试组件库的功能,所以需要进行本地调试,本文介绍两种组件库本地调试流程, 1.使用beta版本 2.使用npm link 两种都可以作为本地调试的方案,本文作为一个参考资料&#xff0…

【机器学习】机器学习的分类算法以及使用逻辑回归算法进行分类

引言 机器学习中的分类算法是一种监督学习算法,其目的是根据已知的输入和输出(即特征和标签)来训练模型,以便能够预测未标记数据的类别标签 文章目录 引言一、分类算法1.1 逻辑回归(Logistic Regression)1.…