浅谈一下:Java学习中不得不知道的:static (静态)成员

news2024/12/28 19:40:12

下面笔者,按照之前的Student进行简单的说明:

class Student {
    private String name ;
    private int age ;
    private String classRoom ;//上课教室

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

    public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +"正在上课学习");
    }
}

public class Main {
    public static void main(String[] args) {
       Student student1 = new Student("小赵",21);
       student1.doClass();

       Student student2 = new Student("小吴",19);
       student2.doClass();

       Student student3 =new Student("小王",20);
       student3.doClass();
    }
}

上述代码的运行结果为:

对于上述的代码,笔者画图简单解析一下:(堆区)

但是,对于每个学生的classRoom(上课教室)都一样!!因此,我们可以:

public static String classRoom ="山东大学数计学院!";

因此,当我们加了static 以后,每个对象里面,就没有了classRoom 只有name 和age ,此时的classRoom 在方法区!

因此,相当于,全部的学生,都在一个教室: 山东大学数计学院!

在Java当中,被static修饰的成员变量称为静态成员,也可以称为:类成员!其不属于某个具体的对象,是所有对象所共享的

static修饰的成员变量,称为静态成员变量:

静态成员变量特性 :

  1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
  2.  既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
  3.  类变量存储在方法区当中
  4.  生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁

 笔者将上面的代码;public static String classRoom ="山东大学数计学院!";,通过类名访问一下:

class Student {
    private String name ;
    private int age ;
   //private String classRoom ;//上课教室
   public static String classRoom ="山东大学数计学院!";

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

    public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    }
}

public class Main {
    public static void main(String[] args) {
        System.out.println(Student.classRoom);
    }
}

上述代码的运行结果为:

 在上述的代码中,没有开辟对象,但是仍能打印出来结果,证明,静态类的成员不属于对象,所以不用通过对象的引用来访问,直接通过类名就可以访问!!(静态不依赖于对象

下面讲解一下:用static修饰的成员方法

打今儿起,开始接触静态成员修饰的方法,所以,对于成员方法的叫法,我们也该改改口了!!

 静态成员方法:大致的写法为:

  public static void func() {
        System.out.println("static func()");
    }

非静态成员方法:大致的写法为:

 public void doClass() {
        System.out.println("姓名 "+ name +" 年龄 " + age +" 正在上课学习");
    }

上述的区别主要在于:有无static !!

输出静态成员方法跟输出静态成员变量一样:Main 函数里面的写法为:

 public static void main(String[] args) {
        Student.func();
    }

然后就可以成功的输出最后的结果:

 因此,通过上述的代码可以看出:静态的成员方法,也不依赖于成员变量!

在静态方法中,我们需要注意的是:

  1. 在静态方法内部,不能直接调用非静态的成员方法,所有的非静态方法,一定依赖于对象的引用才能调用!
  2. 在静态方法内部不能直接使用非静态的成员数据  原因:非静态的数据成员是属于对象的,当我们调用的时候,没有实列化任何对象!!
  3. 只要是非静态的数据成员,都需要通过对象的引用才能调用
  4. 静态方法里面是不能使用this的
  5. 普通成员方法内部是可以使用静态的成员方法的

在我们一般进行Java项目的时候,一般类中的数据成员都设置为private ,而成员方法设置为public 

class Student {
    private static int size = 10;

    //构建getter and setter 方法!!来对数据进行更改!
    public static int getSize() {
        return size;
    }

    public static void setSize(int size) {
        Student.size = size;
    }


}

public class Main {
    public static void main(String[] args) {
        Student.setSize(12);
        System.out.println(Student.getSize());

    }
}

获取静态的成员变量或者是设置静态的成员变量,此时的方法最好是静态的,否则,你要是非静态的,你还得实列化对象,这就好比,脱裤子放屁,多费手续!!

下面讲解一下:对于静态变量的初始化!

1.直接赋值

public static String classRoom ="山东大学数计学院!";

2.默认初始化

    public static int arr ; // arr---->0
    public static String classRoom ;  //classRoom ------>null

3.可以通过getter 和setter方法来进行初始化

    //构建getter and setter 方法!!来对数据进行更改!
    public static int getSize() {
        return size;
    }

    public static void setSize(int size) {
        Student.size = size;
    }

4.在构造对象的时候,可以在构造方法中进行赋值(不建议这样写)

5.通过代码块进行赋值!!(对于代码块是什么??请详见笔者下篇博客!)

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

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

相关文章

五、 通信协议

协议:约定,就好比我们来自不同的地方,如果都用各自的家乡话,那么肯定无法沟通,这时我们规定双方都说普通话,这样就可以沟通了,而这个规定就是“协议” 网络通信协议:速率、传输码率…

SpringCloud - 服务注册中心

文章目录1.服务注册中心2.Eureak服务注册中心2.1 Eureka服务注册与发现2.1.1 单机Eurake构建步骤(1) 创建EurekaServer服务注册中心(2) EurekaClient服务注册2.1.2 Eureka集群构建步骤(1) 创建第多个EureakServer注册中心(2) 修改host(模拟)(3) 修改YML配置2.1.3 集群配置Eurek…

搞定企业视频直播:硬件设备、直播网络环境和设备连接说明

阿酷TONY / 2022-11-22 / 原创 / 长沙 / 1.直播硬件设备 电脑硬件推荐配置: 系统:win7系统以上,macOS 10.13.6以上 显卡:独立2G显卡或以上 CPU:i5或以上 内存:4G或以上 选配硬件: …

我有 7种 实现web实时消息推送的方案,7种!

技术交流,公众号:程序员小富 大家好,我是小富~ 我有一个朋友~ 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。 不过…

打印机不能正常打印怎么办

第一种:更换驱动,在官网上下载相应的驱动而后安装 第一步:添加打印机和扫描仪 第二步:点击——>我需要的打印机不在列表中 第三步;①如果是USB连接则选择添加本地打印机 ②如果是网络打印机,则选择使用TCP/IP添加…

kubernetes 安装与部署

kubernetes 安装与部署 环境almalinux,centos,rockylinux,redhat的9.1版本使用containerd容器运行时kubernetes v1.25.4root用户 1.设置主机名 2.禁用防火墙 3.禁用selinux 4.禁用swap 5.同步时间 5.桥接流量 6.安装nerdctl-full 7.确认cgroup驱动默认为systemd 8.安装kubead…

Intel MediaSDK sample_decode 官方GPU解码流程学习(一) - DirectX11 D3D11和Vulkan共享资源

很久以前研究过 用NV_DX_interop扩展让D3D和OpenGL共享资源 , OpenGL在当初设计的时候电脑和操作系统还是个相对比较简单的东西,因此OpenGL API设计没有考虑到现在计算机架构的一些特性,比如多核编程和多显卡并发。最近几年出来个Vulkan来接O…

Androguard Documentation:官方文档阅读笔记

打算快速阅读下官方文档,然后做一个笔记方便查阅,文章目录按照官方文档目录来的 DOCUMENTATION Getting Started 使用 androguard axml和androguard arsc解码分析AndroidManifest.xml或者resources.arsc。 创建call graphs可以使用androguard cg&…

快消品b2b电子商务网站建设方案

互联网在改造电商行业商业运作模式和提升运营效率作用方面功不可没,目前B2B电商发展正处在交易上升期特别是B2B快消品电商,这个以万亿为单位的流通规模市场必将掀起巨大的社会价值和运营效率。当然在讨论快消品流通B2B电商行业之前,我们先简单…

C++语言的return语句的一点说明

C语言的return语句的一点说明 为了完成某一功能的程序指令(语句)的集合,称为函数。在程序中,编写函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务来解决,而且,同一个任务&#xff0…

程序员副业之无货源闲鱼

我将从以下这些方面来介绍闲鱼副业。 1. 闲鱼平台能不能挣钱? 2. 闲鱼平台都有哪几种挣钱方式? 3. 小白在闲鱼上怎么挣钱? 4. 能挣多少? 5. 如何养号? 6. 得到高权重的账号闲鱼上架该选什么商品? 7. 卖…

城市消费券,拒绝恶意爬取

作为提振经济的重要把手,城市消费券的作用不言而喻。公开数据显示,2022 年全国各地公布的消费券累计超 100 万亿,在撬动各地消费的过程中起到了举足轻重的作用。 然而,仔细分析各地的核销率就会发现,有很大一部分消费…

Zookeeper系列文章—入门

目录 前言 测试 创建节点 更改节点 删除节点 前言 遵照前文已经对Zookeeper进行了安装 linux安装Zookeeper3.5.7详解_兜兜转转m的博客-CSDN博客 接下来我们从整体架构方面了解一下Zookeeper: ZooKeeper 是一个树形目录服务,其数据模型和Unix的文件系统目录树很类…

安装完Vmware-tools后找不到共享文件夹的解决办法-Ubuntu 18有效

首先确认VMware-tools安装好了 如果VMware-tools一直灰色,可以根据这篇文章的方式解决:解决VMware Tools灰色的方法 设置共享文件夹 如果找不到共享文件夹,可以先尝试这个方法:共享文件夹设置方式 特殊情况解决方法 在VMware…

Java:阻塞队列BlockingQueue与应用场景

目录 阻塞队列 BlockingQueue的常用方法 生产者消费者应用场景 阻塞队列 阻塞队列BlockingQueue继承自父类Queue,该队列是线程安全的,可以安全的与多个生产者和消费者线程一起使用。 与阻塞队列相对的,存在“非阻塞队列”的概念&#xff0c…

Python采集某购物软件数据信息,轻松拿捏千元外包项目

前言 嗨嗨,想必知道外包这个词的人应该不少吧 话说,接外包有多的也有少的,少的几十,多的emm上限我就不说了,嘿嘿 今天要不要来看看一个千元的外包项目? 是采集某购物软件的一些数据信息 咋说&#xff…

Excel常用图表,看看哪个还不会?

图表是指可以直接展示数据关于时间、数量等关系,对知识挖掘和信息直观生动感起关键作用的图形结果,是对数据关系进行形象“可视化”的手段。所以将数据转换为图表能使数据更为直观。 常见图表 Excel为用户提供了10几种图表,包括柱形图、折线…

【网安神器篇】——Crunch字典生成工具

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

小啊呜产品读书笔记001:《邱岳的产品手记-07》第13讲 无用却必要:产品规划【上】 第14讲 留白与节奏:产品规划【下】

小啊呜产品读书笔记001:《邱岳的产品手记-07》第13讲 无用却必要:产品规划【上】 & 第14讲 留白与节奏:产品规划【下】一、今日阅读计划二、泛读&知识摘录1、第13讲 无用却必要:产品规划【上】2、第14讲 留白与节奏&#…

Linux set 命令的使用方法

Linux set 命令的使用方法 set 语句是内置的 shell 命令,可以显示并设置 shell 和 Linux 的环境变量。在这篇文章中,我们将尝试使用 set 命令,并且进行一些简单的剖析。 预备工作 请登录您的终端,或者打开虚拟机并且连接&#x…