【Day3】每日学Java--》详解java中的static成员

news/2024/11/25 19:42:00/

大家好,我是良辰丫,今天我和大家分享的是java中的static成员,static说难不难,说简单也不简单,主要是细节,很多情况下,你使用了static,却不知道为什么会报错,嘿嘿嘿,细节决定成败,不要着急,我们慢慢往下说。💖💖💖

🧑个人主页:良辰针不戳
📖所属专栏:EveryDay学java
🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我们一辈子的财富。
💦期待大家三连,关注,点赞,收藏。
💞愿与君为伴,共探Java汪洋大海。


目录

  • 1、简述static
  • 2、static修饰成员变量
  • 3、static修饰成员方法
  • 4、static成员变量初始化
  • 5、总结static


1、简述static

static在英文中的意思是静态的,因此呢,它也具有了很多静态的属性,但是它和大家所学的C语言里面的static是不同的,为什么呢?因为java中的static属于类,而C语言没有类这个概念。文字说的再多也不够生动,大家也不能够理解,那我们先拿例子简单理解一下。
①没有static修饰的成员属性被func方法调用,即使num是public,它也没有直接调用的权利。
在这里插入图片描述
②调用前new一个对象,通过对象进行调用就不会报错,理解困难的话大家可以想象成你要向别人借东西,必须先和别人说一下,new可以理解为申请权限。
在这里插入图片描述
③是不是突然发现很神奇,num被static修饰后,可以直接调用了,这就验证了static修饰的成员属性属于类,而不是对象,为什么可以直接调用呢?因为对象也属于类,他们两个平起平坐。
在这里插入图片描述

看完上面,想必大家已经对java中的static有了一定的了解,我们接下来继续介绍static的具体用法。

2、static修饰成员变量

static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。还是那句话,可以理解为static修饰的成员变量和对象平起平坐。

  • 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中。
  • 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问。
  • 类变量存储在方法区当中。
  • 生命周期伴随类的一生(类结束生命周期,static也将结束)

①name和main方法在同一个类中,直接通过name就可以调用。

在这里插入图片描述
②main方法和name在不同的类中,只通过name调用会报错。
在这里插入图片描述
③static修饰的成员属性,通过类名.属性名字就可以调用,通过对象也可以调用,但是介意大家使用类名调用,因为static修饰的属性本来就属于类。
在这里插入图片描述
④static修饰的属性通过对象进行访问。
在这里插入图片描述

3、static修饰成员方法

一般而言,我们在类中定义成员属性的时候,我们总会把属性弄成私有的private,保证程序的安全。那么我们如何调用这个属性呢?
①把该属性的值传给一个静态方法,通过调用该方法达到传值目的。
在这里插入图片描述
②方法不是静态的时候,直接调用时会报错,注意是直接调用报错,而不是不能调用。
在这里插入图片描述
③通过对象调用方法,也能达到调用的目的。
在这里插入图片描述

静态方法特性:

  1. 不属于某个具体的对象,是类方法。
  2. 可以通过对象调用,也可以通过类名.静态方法名(…)方式调用,更推荐使用后者。
  3. 不能在静态方法中访问任何非静态成员变量(或者成员方法)。
  4. 静态方法无法重写,不能用来实现多态。

4、static成员变量初始化

  • 静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。
  • 静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
  1. 就地初始化
    就地初始化指的是:在定义时直接给出初始值。
    在这里插入图片描述
  2. 静态代码块初始化。
    在这里插入图片描述
  3. 下面的初始化就会报错。
    在这里插入图片描述

5、总结static

看了上面那么多,其实内容没大家想的那么理解,熟悉了就会很简单,谁一生下来就会跑呢?那么我们简单的做一下总结。

  • 静态方法不能直接调用非静态变量(成员方法),若用,通过对象调用。
  • 非静态的方法可以使用类的静态或非静态成员。
  • 在方法中,static不能修饰属性,如 static int num = 10;
  • 系统仅为系统单元分配一个存储单元,所有对象共享这个静态成员变量,若某个对象修改了静态成员变量的值,所有对象使用的都将是修改后的静态成员变量值。
  • 静态成员方法可以通过类名访问,即不需要实例化就可以调动静态成员方法,同时也可以通过对象名访问。

http://www.ppmy.cn/news/2805.html

相关文章

第二十五章 继承

一、继承 1、含义:继承就是获取存在对象已有属性和方法的一种方式 2、继承关系出现在构造函数和构造函数之间 3、 构造函数A 继承自 构造函数B 子类:构造函数A父类:构造函数B 二、继承分类 1、原型继承 2、借用构造函数继承 3、组合继…

Velero 系列文章(一):基础

概述 Velero 是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。 灾难恢复 Velero 可以在基础架构丢失,数据损坏和/或服务中断的情况下,减少恢复时间。 数据迁移 Velero 通过轻松地将 …

ROS2初学者2022教程

ROS2初学者2022教程 掌握 ROS2 基础知识并成为机器人操作系统开发人员 – 一步一步 课程英文名:ROS2 For Beginners (ROS Foxy, Humble - 2022) 此视频教程共15.0小时,中英双语字幕,画质清晰无水印,源码附件全 下载地址 课程编…

2022年双十二拼多多百亿补贴有活动吗?如何领红包?

2022年双十二拼多多百亿补贴有活动吗?如何领红包? 拼多多的活动大家都很清楚,平常没有活动的时候,价格也是比较实惠的,除了拼团购物之外,拼多多还有百亿补贴,所以商品比其他平台都要便宜,双十二拼多多百亿…

前端面试题集锦(7)

目录 1、常见的跨域方式 ? 2、对象的遍历方法 3、数组扁平化 4、typeof 原理 5、介绍类型转化 6、闭包的问题和优化 7、浏览器和Node事件循环的区别 1、常见的跨域方式 ? JSONP: JSONP是利用外链脚本,没有跨源限制的特点,来实现跨…

语音识别之Kaldi:神经网络实战

ASR神经网络实战 kaldi语音识别理论与实践课程学习。 之前学习了基于GMM-HMM的传统语音识别:GMM-HMM 其中也包含Kaldi架构的简介,语音数据的预处理,特征提取等过程。 今天学习基于神经网络的语音识别。 神经网络训练脚本 以TDNN为例。 K…

JavaSe

软件: 一系列按照特定顺序组织的计算机数据和指令的集合、有系统软件(window、linux)和应用软件(QQ、微信)之分。 人机交互方式: 图形化界面(GUI)鼠标直接点击(简单直观…

springboot奖助学金评审系统的设计与实现毕业设计源码031035

奖助学金评审系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代。在现实运用…