JavaSE基础语法--static成员

news2024/9/20 20:27:05

假设我们现在有一个场景,定义一个学生类。

class Student{
    private String name;
    private  int age;
    private int classroom_num;

    public Student(String name, int age, int classroom_num) {
        this.name = name;
        this.age = age;
        this.classroom_num = classroom_num;
    }
}
public class TestDemo {
    public static void main(String[] args) {
        Student student1=new Student("牛1",11,8);
        Student student2=new Student("马2",12,8);
        Student student3=new Student("猪3",13,8);
        System.out.println("--------------------------------------");


    }
    }

定义了三个private权限的成员变量。并且通过构造函数给他们初始化了值。我们看到我们创建的三个同学对象中,他们都是一个班的。但是这样写的代码,却又三份属性。调试看看效果:

那么在内存布局中是这样子的:

但是其实我们只需要一份这样的数据就可以了。那么怎么做呢,这个时候就需要我们的static关键字了。我们把代码修改一下:

class Student{
    private String name;
    private  int age;
    private static int classroom_num=8;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Student student1=new Student("牛1",11);
        Student student2=new Student("马2",12);
        Student student3=new Student("猪3",13);
        System.out.println("--------------------------------------");


    }
    }

 这个时候,我们再调试一下:

就只有name和age这两个成员变量了。这说明,我们的classroom_num成员变量,在加了static之后就不在堆上了。也不属于这个对象。那么它放了了什么位置呢?它在JVM的方法区内放着。而且只有一份。这种加了static关键字的变量我们称之为 静态成员变量。现在我们可以把成员变量分为两种:

1.静态成员变量(加了static关键字修饰的)

2.非静态成员变量(普通成员变量)

静态成员变量的一个很大特点是它不属于某个对象,是所有对象共享的。那么如何去访问这个静态变量呢?

我们知道静态成员变量不属于对象,也就不在堆上,虽然可以用对象引用去得到。不报错但是会报警告。我们最好通过类名去引用这个静态成员变量,我暂时把classroom_num的权限改为public:


 static关键字既然能修饰成员变量,是否能修饰成员方法呢?是可以的。有了static的加入,成员方法也分为两类:

1.静态成员方法/类方法(static 修饰)

2.非静态成员方法

和静态成员变量一样,静态成员方法被static修饰后也不再属于对象。但是可以通过类名来访问:

class Student{
    private String name;
    private  int age;
    public static int classroom_num=8;

    public static void Study(){
        System.out.println("这是个静态成员方法");
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class TestDemo {
    public static void main(String[] args) {
        Student student1=new Student("牛1",11);
        Student student2=new Student("马2",12);
        Student student3=new Student("猪3",13);
        System.out.println("--------------------------------------");
        System.out.println(Student.classroom_num);
       Student.Study();


    }
    }

输出如下:

在静态方法内部是不能直接调用非静态的成员方法。非静态方法一定是依赖对象的引用。因此static关键字,能够让方法不依赖于对象而被调用。普通成员方法内部,是可以使用静态成员方法。总结几个点:

1.在静态方法内部是不能直接调用非静态成员方法。

2.在静态方法内部,不能直接使用非静态的数据成员。

3.静态方法里面是不能使用this的。

 

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

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

相关文章

翻筋斗觅食策略改进灰狼算法(IGWO)

目录 一、动态扰动因子策略 二、翻筋斗觅食策略 三、改进灰狼算法收敛曲线图 灰狼优化算法存在收敛的不合理性等缺陷,目前对GWO算法的收敛性改进方式较少,除此之外,当GWO迭代至后期,所有灰狼个体都逼近狼、狼、狼,…

HarmonyOS学习路之开发篇—多媒体开发(媒体会话管理开发)

一、媒体会话管理开发 AVSession是一套媒体播放控制框架,对媒体服务和界面进行解耦,并提供规范的通信接口,使应用可以自由、高效地在不同的媒体之间完成切换。 约束与限制 在使用完AVSession类后,需要及时进行资源释放。播放器类…

Linux常用命令——ftpshut命令

在线Linux命令查询工具 ftpshut 在指定的时间关闭FTP服务器 补充说明 功能说明:在指定的时间关闭ftp服务器。本指令提供系统管理者在设置的时间关闭FTP服务器,且能在关闭之前发出警告信息通知用户。关闭时间若设置后为"none",则…

【实战项目开发技术分享】如何解决机器人运动不平稳的问题

文章目录 前言一、机器人设计的考虑因素二、控制算法的优化三、传感器改进四、实时监测与调试五、总结前言 机器人的运动平稳性对于其在各种应用中的成功执行任务至关重要。当机器人在执行任务过程中出现不稳定的运动,可能导致任务失败、损坏周围环境或甚至危及人员安全。因此…

ChatGPT在能源行业的预测场景:智能能源管理和异常检测的未来趋势

第一章:引言 能源是现代社会发展的关键驱动力之一,然而,传统的能源管理方法存在许多挑战,如能源浪费、供需不平衡以及能源异常等。为了应对这些挑战,智能能源管理系统逐渐崭露头角。在本文中,我们将探讨Ch…

基于Java+Swing实现仿QQ屏幕截图工具

基于JavaSwing实现仿QQ屏幕截图工具 一、系统介绍二、功能展示三、其它1.其他系统实现四.获取源码 一、系统介绍 实现能够实现对屏幕的随机截取,复制,保存以及添加文字等操作,便于用户对数据的处理。 该软件的功能: &#xff08…

I/O设备与主机信息传送的方式(程序查询方式,程序中断方式,DMA方式)

一.程序查询方式 CPU和I/O设备串行工作,CPU连接I/O设备和内存,CPU需要等待,效率很低 (由CPU通过程序不断查询IO设备是否已经做好准备,从而控制IO设备与主机交换信息) 二.程序中断方式: 中断&…

前端Vue自定义数字输入框 带加减按钮的数字输入框组件

前端Vue自定义数字输入框 带加减按钮的数字输入框组件&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13163 效果图如下&#xff1a; # cc-numbox #### 使用方法 使用方法 <!-- title: 标题 isSetMax: 是否设置最…

手把手叫你学会搭建FreeRTOS工程文件

手把手教你学会搭建FreeRTOS工程文件 一.序言二.提取文件2.1 Source文件夹2.2 portble文件夹2.3 Demo 文件夹 三.建立FreeRTOS工程3.1 新建FreeRTOS目录3.2 移植src文件夹3.3 移植port文件夹3.4 添加include文件夹3.5 提取FreeRTOSConfig.h文件3.5.1 拷贝FreeRTOSConfig.h文件 …

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图

前端Vue自定义简单实用轮播图封装组件 快速实现轮播图&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13153 效果图如下&#xff1a; # cc-mySwiper #### 使用方法 使用方法 <!-- 自定义轮播图 swiperArr: 轮播数…

Day5——数据库基础2-SQL查询语句

网络安全学习笔记Day5 SQL查询语句&#xff08;重在实操&#xff01;&#xff01;&#xff01;&#xff09; 回顾1.中英文符号混淆2.数据库的操作流程&#xff08;回顾mysql相关语句&#xff09;3.“everything”工具 学习目标1.查询数据基本语法形式基本查询语句表单查询where…

ubuntu20下yolov4训练多目标实战

1、安装nvidia驱动和cudnn,不熟悉的小伙伴请移步&#xff1a;Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制_ubuntu20.04安装显卡驱动_BetterJason的博客-CSDN博客 2、编译opencv&#xff0c;不熟悉的小伙伴请移步:ubuntu20.04 和centos8平台opencv4.5.3&am…

【八大排序(九)】计数排序-非比较排序法

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:八大排序专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习排序知识   &#x1f51d;&#x1f51d; 计数排序 1. 前言2. 计数排序基本思路3. …

6.19 Nginx网站服务——服务基础

文章目录 一.Nginx服务基础1.关于Nginx的特点2.简述Nginx和Apache的差异3.Nginx 相对于 Apache 的优点4.Apache 相对于 Nginx 的优点5.阻塞与非阻塞6.同步与异步7.nginx的应用场景 二.编译安装nginx服务1.在线安装nginx1.1 yum部署Nginx1.2 扩展源安装完后直接安装Nginx 2.ngin…

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装

【Red Hat 7.9---详细安装Oracle 11g】---静默方式安装 &#x1f53b; 一、安装前规划&#x1f53b; 二、安装前准备一&#xff08;系统参数修改&#xff09;⛳ 2.1 内核版本、系统版本查看⛳ 2.2 修改主机名-重启生效⛳ 2.3 关闭selinux⛳ 2.4 防火墙设置1521端口开放⛳ 2.5 系…

哈希密码的加盐强化

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、什么是哈希加密&#xff1f; 二、哈希加密…

讯飞星火大模型详细内测体验:看它能否应对这些挑战?

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、简要介绍二、分类问题测试0️⃣自我介绍1️⃣语言理解2️⃣知识问答3️⃣逻辑推…

“房地一体”专用系列:DG3M、D2M产品发布

基于“房地一体”项目的作业特点&#xff0c;睿铂听取客户作业过程中的需求反馈&#xff0c;在D2PSDK、D3PSDK基础之上推出全新中端产品&#xff1a;D2M和DG3M。 D2M适用于地势平坦区域的房地一体项目&#xff0c;DG3M适用于落差较大场景的房地一体项目和智慧城市三维建模项目…

【面试】标准库相关题型(二)

文章目录 1. deque底层实现原理1.1 概述1.2 原理图1.3 类结构1.4 操作函数 2. 什么时候使用vector、list、deque2.1 vector2.2 list2.3 deque 3. priority_queue的底层实现原理3.1 一句话概括&#xff1a;用堆来实现优先级队列3.2 堆结构3.3 底层容器3.4 STL对堆结构提供的接口…

计算机网络-物理层

目录 一、物理层的基本概念 二、物理层下的传输媒体 &#xff08;一&#xff09;引导型传输媒体 &#xff08;二&#xff09;非引导型传输媒体 三、传输方式 &#xff08;一&#xff09;串行传输和并行传输 &#xff08;二&#xff09;同步传输和异步传输 &#xff08;…