类变量和类方法

news2024/11/17 15:39:50

类变量和类方法

引入

思考:有一群小孩在玩堆雪人,不时有新的小孩加入,请问如何知道现在有多少小孩在玩?

静态变量内存分析在这里插入图片描述

1、静态变量被对象共享

2、静态变量可能在堆中,也可能在方法区的静态域中,这个根据GDK的版本而定。

注意:不论在哪个地方保存,均不影响对静态变量的使用

jdk8之前在方法区的静态域中。

jdk8之后存储在堆里面该类对应的class实例的尾部。

以上两种方式均在类信息加载的时候,就已经生成静态变量

什么是类变量

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

如何定义类变量

定义语法:

访问修饰符 static 数据类型 变量名; 【推荐使用】

static 访问修饰符 数据类型 变量名;

如何访问类变量

类名.类变量名【推荐】

对象名.类变量名

静态变量的 访问修饰符在访问权限和范围上 和 普通属性 是一样的

package com.zhangch.static_;

public class Test {
    public static void main(String[] args) {
        //类名.类变量名
        // 说明:类变量是随着类的加载而创建,所以及时没有创建对象实例也可以进行访问
        System.out.println(A.name);
    }
}

class A{
    // 类变量的访问,必须遵守相关修饰符的访问权限    
    static String name = "zhang";
}

类变量的使用注意事项和细节

1、什么时候使用类变量

**当我们需要让某个类的所有对象都共享一个变量时,**就可以考虑使用类变量。

2、类变量和实例变量的区别

类变量是该类所有对象共享的,而实例变量是每个对象独享的。

3、加上static称为类变量或静态变量,否则称为 实例变量/普通变量/非静态变量;

4、类变量可以通过 类名.类变量名 或者 对象名.类变量名 来访问,但推荐使用类名;

5、实例变量不能通过 类名.类变量名 方式访问

6、类变量是在类创建时就已经存在了【构造器是在对象进行实例化】;

7、类变量的生命周期随着类的加载开始,随着的消亡而销毁。

类方法基本介绍

类方法也叫静态方法

格式

访问修饰符 static 数据返回类型 方法名(){}

调用

类名.类方法名

总结

1、当方法中不涉及到任何与对象相关的成员,则可以将方法设计成静态方法,提高开发效率

2、如果我们希望不创建实例,也可以调用某个方法(即当作工具来使用)

比如:Math类、Arrays类

3、将一些通用的方法,设计成静态方法【根据实际情况考虑,一般这些方法集成在一个类下】,这样我们不需要创建对象就可以使用了。

比如:打印一维数组,冒泡排序,完成某个计算任务等等

类方法的使用注意事项和细节讨论

1、类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区;

类方法中无this、super参数,普通方法中隐含着 this、super参数

2、类方法可以通过类名调用,也可以通过对象名调用【非常不推荐,记住,只要是静态的,不管属性还是方法,统一使用,类名.】;

3、普通方法和对象有关,需要通过对象名调用,而普通方法不能通过类名调用

4、类方法中只能访问静态变量或者静态方法

5、普通成员方法,既可以访问 静态成员(方法), 也可以访问非静态变量(方法)

小结:

静态方法,只能访问静态成员(方法),而非静态方法,则可以访问静态成员和非静态成员。

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

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

相关文章

Python中的类和实例是什么意思

目录 python中的类是什么 python中的实例是什么 python中的类和实例有什么区别 总结 python中的类是什么 在Python中,类是一种用于创建对象的蓝图或模板。类定义了对象的属性和方法。对象是类的实例,它拥有类定义的属性和方法。 通过定义类&#xff…

【Ajax】笔记-JQuery发送jsonp请求

前端 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>jQuery-jsonp</title><style>#re…

Linux安装操作(Mac版本)

Parallels Desktop的简介 Parallels Desktop是Mac平台上的虚拟机软件&#xff0c;也是Mac平台最好的虚拟机软件之一。它允许用户在Mac OS X系统上同时运行其他操作系统&#xff0c;例如Windows、Linux等。Parallels Desktop为Mac用户提供了使用其他操作系统和软件的便利性&…

如何在Delphi中用CnPack的魔法,快速搭建你的项目结构(cnwizard)

1、打开工具&#xff0c;如下图。 2、使用现有模板创建文件夹结构。 按照树状结构创建文件夹结构&#xff1a; 1&#xff09;打开窗体。点击第一个图标。 2&#xff09;选择要创建文件夹结构的文件夹。 3&#xff09;结果如下&#xff1a; 3、模仿指定的一个文件夹结构创建。…

春秋云镜 CVE-2021-34257

春秋云镜 CVE-2021-34257 WPanel4-CMS Authenticated RCE漏洞 靶标介绍 WPanel是一个用于构建博客、网站和网络应用程序的CMS。 WPanel 4 4.3.1 及更低版本存在安全漏洞&#xff0c;该漏洞源于通过恶意 PHP 文件上传到 (1) 仪表板的头像图像、(2) 帖子文件夹图像、(3) 页面文…

简单理解 ChatGPT 和模型训练

介绍 这些令人着迷的对话机器人使用自然语言理解来理解输入。NLU 是自然语言处理的一个子集&#xff0c;使机器能够理解自然语言&#xff08;文本/音频&#xff09;。NLU 是大多数 NLP 应用程序&#xff08;例如机器翻译、语音识别、构建聊天机器人等&#xff09;中的关键组件。…

【Docker】Docker安装Elasticsearch服务的正确方式

文章目录 1. 什么是Elasticsearch2. Docker安装Elasticsearch2.1 确定Elasticsearch的版本2.2. Docker安装Elasticsearch2.3. 给Elasticsearch安装中文分词器IKAnalyzer&#xff08;可选的&#xff09; Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套&…

无门槛使用GPT+Cloud Studio辅助编程完成Excel自动工资结算

目录 前言一、Cloud Studio产品介绍1.1 注册Cloud Studio 二、项目实验2.1 选择合适的开发环境2.2 实验项目介绍2.3 实验步骤 前言 chatgpt简单介绍: ChatGPT是一种基于GPT的自然语言处理模型&#xff0c;专门用于生成对话式文本。它是OpenAI于2021年发布的&#xff0c;在广泛…

移动端购物车模块设计

效果图 技术栈 vue3、vant4、element-plus 源码如下 页面布局 <template><!-- 地址 start--><AddressList class"address"/><!-- 地址 end--><!-- 购物车商品列表 start--><van-swipe-cell class"goods-cell" v-for…

DevOps系列文章之 java调用python脚本

在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件&#xff08;推荐&#xff09; 调用python脚本中的函数 简单介绍 官网地址 首页 | (jython.org) Jython项目提供了Java中的Python实现&#xff0c; 为Python提供了…

ffplay——QT项目移植

一、ffmpeg源码编译 参考&#xff1a; https://blog.csdn.net/sgzed/article/details/119850119 在生成时做了一些修改&#xff1a; ./configure --toolchainmsvc --enable-shared --enable-postproc --enable-gpl --prefixwindows 二、对文件做调整 ffplay只需要三个文件&…

超越极限!YOLOv5引入FasterNet主干网络,目标检测速度飙升

目录 一、背景介绍1.1 目标检测算法简介1.2 YOLOv5简介及发展历程 二、主干网络选择的重要性2.1 主干网络在目标检测中的作用2.2 YOLOv5使用的默认主干网络 三、FasterNet简介与原理解析3.1 FasterNet概述3.2 FasterNet的网络结构3.2.1 基础网络模块3.2.2 快速特征融合模块3.2.…

好用的备忘录app如何使用预设提醒功能?

备忘录的预设提醒功能是什么意思呢&#xff1f;就是在使用的过程中&#xff0c;提前预设好常用的提醒的时间&#xff0c;比如明天某个时间点、下周某个时间点等等&#xff0c;在需要设置提醒的时候&#xff0c;就可以直接使用。好用的备忘录app如何使用预设提醒功能&#xff1f…

什么是SCRUM认证体系 ?

Scrum认证是一个针对个人职业发展的认证体系&#xff0c;基础级认证主要面向Scrum的三个角色&#xff1a;Scrum Master、Scrum Product Owner 和 Developers。Scrum认证体系由Scrum官方机构—国际Scrum联盟&#xff08;ScrumAlliance.org&#xff09;制定和维护&#xff0c;Scr…

HCIP——重发布及路由策略实验

重发布及路由策略实验 一、实验拓扑二、实验要求三、实验思路三、实验步骤1、配置接口IP地址以及环回地址2、配置动态路由协议3、重发布4、更改接口类型5、配置路由策略 一、实验拓扑 二、实验要求 1、使用双点双向重发布2、所有路由器进行最佳选路3、存在备份路径&#xff0c…

第三章 ref与reactive

ref ref 变为响应式数据shallowRef 浅层响应式数据&#xff08;响应式到 .value为止&#xff09;isRef 判断是否为ref响应式数据triggerRef 强制触发依赖更新customRef 自定义ref函数 <template><div class"App">{{ stu }}<button click"chang…

Java并发编程第3讲——线程安全

目录 1 线程安全 1.1 谈谈你对线程安全的理解 1.2 Java中操作共享数据分类 1.2.1 不可变&#xff08;Immutable&#xff09; 1.2.2 绝对线程安全&#xff08;Thread-safe&#xff09; 1.2.3 相对线程安全&#xff08;Thread-compatible&#xff09; 1.2.4 线程兼容&…

外观模式——提供统一入口

1、简介 1.1、概述 在软件开发中&#xff0c;有时候为了完成一项较为复杂的功能&#xff0c;一个类需要和多个其他业务类交互&#xff0c;而这些需要交互的业务类经常会作为一个完整的整体出现&#xff0c;由于涉及的类比较多&#xff0c;导致使用时代码较为复杂。此时&#…

leetcode剑指offer75题

1 替换空格 var replaceSpace function(s) {const str s.split( );return str.join(%20) };2 左旋转字符串 var reverseLeftWords function(s, n) {const s1 s.slice(n)const s2 s.slice(0,n)return s1s2 };3 表示数值的字符串 //\d 匹配整数 1次或多次 //(\.\d*)? 满足小…

【腾讯云 Cloud studio 实战训练营】真正做到让你的开发成本只在编码

文章目录 写在前面CODINGCloud studio工具在线编码运行项目代码上传Cloud Studio 开发贪吃蛇写在最后 写在前面 期待已久的体验活动终于来了&#xff0c;Clound Studio用了才知道有多爽&#xff0c;Cloud Studio 是基于浏览器的集成式开发环境 (IDE)&#xff0c;为开发者提供了…