Java基础学习系列--(二)static关键字概述

2023-10-26

2.1 概述

以前我们定义过如下类:

public class Student {
    // 成员变量
    public String name;
    public char sex; // '男'  '女'
    public int age;

    // 无参数构造器
    public Student() {

    }
    
    // 有参数构造器
    public Student(String  a) {

    }
}

我们已经知道面向对象中,存在类和对象的概念,我们在类中定义了一些成员变量,例如name,age,sex ,结果发现这些成员变量,每个对象都存在(因为每个对象都可以访问)。

而像name ,age , sex确实是每个学生对象都应该有的属性,应该属于每个对象。

所以Java中成员(变量和方法)等是存在所属性的,Java是通过static关键字来区分的。static关键字在Java开发非常的重要,对于理解面向对象非常关键。

关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被static修饰的成员是属于类的是放在静态区中,没有static修饰的成员变量和方法则是属于对象的。我们上面案例中的成员变量都是没有static修饰的,所以属于每个对象。

2.2 定义格式和使用

static是静态的意思。 static可以修饰成员变量或者修饰方法。

2.2.1 静态变量及其访问

有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。 直接用 类名访问即可。因为类只有一个,所以静态成员变量在内存区域中也只存在一份。所有的对象都可以共享这个变量。

如何使用呢

例如现在我们需要定义传智全部的学生类,那么这些学生类的对象的学校属性应该都是“传智”,这个时候我们可以把这个属性定义成static修饰的静态成员变量。

定义格式

修饰符 static 数据类型 变量名 = 初始值;    

举例

public class Student {
    public static String schoolName = "传智播客"; // 属于类,只有一份。
    // .....
}

静态成员变量的访问:

格式:类名.静态变量

public static void  main(String[] args){
    System.out.println(Student.schoolName); // 传智播客
    Student.schoolName = "黑马程序员";
    System.out.println(Student.schoolName); // 黑马程序员
}

2.2.2 实例变量及其访问

无static修饰的成员变量属于每个对象的, 这个成员变量叫实例变量,之前我们写成员变量就是实例成员变量。

需要注意的是:实例成员变量属于每个对象,必须创建类的对象才可以访问。

格式:对象.实例成员变量

2.2.3 静态方法及其访问

有static修饰成员方法,说明这个成员方法是属于类的,这个成员方法称为类方法或者静态方法**。 直接用 类名访问即可。因为类只有一个,所以静态方法在内存区域中也只存在一份。所有的对象都可以共享这个方法。

与静态成员变量一样,静态方法也是直接通过类名.方法名称即可访问。

举例

public class Student{
    public static String schoolName = "传智播客"; // 属于类,只有一份。
    // .....
    public static void study(){
    	System.out.println("我们都在黑马程序员学习");   
    }
}

静态成员变量的访问:

格式:类名.静态方法

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

2.2.4 实例方法及其访问

无static修饰的成员方法属于每个对象的, 这个成员方法叫实例方法

需要注意的是:实例方法是属于每个对象,必须创建类的对象才可以访问。

格式:对象.实例方法

示例

public class Student {
    // 实例变量
    private String name ;
    // 2.方法:行为
    // 无 static修饰,实例方法。属于每个对象,必须创建对象调用
    public void run(){
        System.out.println("学生可以跑步");
    }
 // 无 static修饰,实例方法
    public  void sleep(){
        System.out.println("学生睡觉");
    }
    public static void study(){
        
    }
}
public static void main(String[] args){
    // 创建对象 
    Student stu = new Student ;
    stu.name = "徐干";
    // Student.sleep();// 报错,必须用对象访问。
    stu.sleep();
    stu.run();
}

2.3 小结

1.当 static 修饰成员变量或者成员方法时,该变量称为静态变量,该方法称为静态方法。该类的每个对象都共享同一个类的静态变量和静态方法。任何对象都可以更改该静态变量的值或者访问静态方法。但是不推荐这种方式去访问。因为静态变量或者静态方法直接通过类名访问即可,完全没有必要用对象去访问。

2.无static修饰的成员变量或者成员方法,称为实例变量,实例方法,实例变量和实例方法必须创建类的对象,然后通过对象来访问。

3.static修饰的成员属于类,会存储在静态区,是随着类的加载而加载的,且只加载一次,所以只有一份,节省内存。存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。它优先于对象存在,所以,可以被所有对象共享。

4.无static修饰的成员,是属于对象,对象有多少个,他们就会出现多少份。所以必须由对象调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础学习系列--(二)static关键字概述 的相关文章

  • 如果计算的哈希码超过整数最大限制,会发生什么?

    这是 Java HashTable 类的 hashCode 实现 如果哈希表中的元素数量很大并且哈希码超过 INTEGER MAX LIMIT 2 147 483 648 到 2 147 483 647 该怎么办 我假设 hashCodes
  • cucumber.json 报告被重新运行场景报告覆盖

    我有一个具有相同技术堆栈 JAVA1 8 Cucumber JVM JUnit Maven 的 UI 测试项目和一个 API 测试项目 这两个项目都向我展示了这个问题 可能是因为两者都存在相同的依赖关系集 我使用了使用 maven sure
  • 使用 Firebase Java API 检索/格式化数据的最佳方式

    我在用着Firebase用于数据存储Android项目 并使用Firebase Java API来处理数据 不过 我不确定我是否尽可能高效地完成此操作 并且我希望获得一些有关检索和格式化数据的最佳实践的建议 我的Firebase存储库看起来
  • 在 Java 中重新抛出异常而不丢失堆栈跟踪

    在 C 中 我可以使用throw 语句重新抛出异常 同时保留堆栈跟踪 try catch Exception e if e is FooException throw Java中有没有类似的东西 不会丢失原始堆栈跟踪 catch Whate
  • Logback线程池

    我使用 Logback 进行日志记录 我有一个问题 我将 AsyncAppender 与 ConsoleAppender 结合使用 当应用程序启动时 它会创建具有 logback 线程名称的线程池 所有日志记录工作均由 AsyncAppen
  • firebase android 基于类的更新不尊重字段名称的大小写

    我声明了以下类 注意大小写选择 public class User private String DisplayName private Boolean Proxy false SuppressWarnings unused public
  • Java 密钥库 - 以编程方式从密钥库文件中选择要使用的证书

    我有一个 java 密钥库文件 其中包含多个客户端证书 我希望在 Java 应用程序中仅选择其中一个证书来连接到服务 有没有一种简单的方法可以做到这一点 到目前为止 我找到解决方案的唯一方法是使用原始密钥库文件中的客户端证书详细信息 通过其
  • Vaadin框架播放视频

    我可以使用 Vaadin Framewotk 播放视频吗 主要思想是从本地驱动器加载 flv 或 avi 格式的视频文件 并使用 vaadin 框架在网络上播放 谢谢 Sampler中有一个示例 http demo vaadin com s
  • 如何获取JavaFX的版本号?

    如何在运行时找出我正在使用哪个版本的 JavaFX 简单的方法之一就是简单地阅读javafx properties文件位于您的 JAVA HOME jre lib目录 我现在安装了 Java 1 7 u9 与之捆绑的 JavaFX 是 v2
  • 如何使用 Java2D 创建硬件加速图像?

    我正在尝试创建一个快速图像生成器 它可以执行大量 2d 转换和形状渲染 因此我尝试使用 BufferedImage 然后获取 Graphics2D 对象来执行所有绘图 我现在主要关心的是 make 速度非常快 所以我创建一个像这样的 Buf
  • 是否有适用于 Java 的 Harel Statechart DSL 工具?

    我正在寻找一种能够理解 DSL 的工具 在其中我可以定义生成 Java 代码的状态图 或者 DSL 中的状态图可以按原样运行 该工具最好用 Java 编写 并且必须根据 Harel 状态图 或等效的 UML 2 状态机 的定义支持超级状态和
  • 如何在Netbeans中自定义jTable标题列字体大小?

    我尝试改变jtable标题字体大小Netbeans 但还不能 无论如何 表行字体大小已成功更改 这是我使用的方法 更改后的输出 问题 标题字体大小未更改 但我也想改变这一点 所以请帮助我该怎么做 一种方法是使用UIManager并替换默认的
  • Java RCP/SWT - Eclipse RCP 中的“Android Toast like”对话框

    有谁知道是否存在某些弹出窗口的实现 例如 Android TOAST 通知是以下内容的一部分迈林公共区 https projects eclipse org projects mylyn commons 要集成它们 请添加Mylyn Com
  • 要导入什么才能使用@SuppressFBWarnings?

    要使用 SuppressFBWarnings 需要导入什么 我通过帮助 安装新软件安装了 findbugs 插件 当我输入 import edu 时 我无法按 ctrl space 来获取选项 Example try String t nu
  • Java 线程 JavaDoc

    我编写了一个只能在特定线程上调用的方法 是否应该将标准注释或注释添加到方法的 javadoc 中来表示这一点 不知道有任何这样的标准注释 Java 并发实践 http www javaconcurrencyinpractice com 在第
  • 有没有办法使用 SauceLabs 的 RemoteWebDriver 禁用 CORS 检查

    问题说明了一切 我正在尝试在 SauceLabs 上执行一些硒测试 该测试加载一个发出跨域请求的网页 我在想是否有一种方法可以通过代码以独立于平台的方式禁用 CORS 使用时Chrome驱动程序 Chrome组合禁用cors questio
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • IntelliJ IDEA 中的项目语言级别是多少?

    我正在使用 Java 7 SDK 和 IntelliJ IDEA IDE java version 1 7 0 11 Java TM SE Runtime Environment build 1 7 0 11 b21 Java HotSpo
  • java.lang.Object#getClass() 的 Eclipse 外部空注释

    我正在使用 Eclipse Mars 中提供的外部空注释工具 我正在尝试添加外部注释java lang Object getClass 但似乎无法正确签名 我尝试过以下变体 NonNull Class getClass L1java lan
  • 获取给定字符串日期中该月的最后一天

    我的输入字符串日期如下 String date 1 13 2012 我得到的月份如下 SimpleDateFormat dateFormat new SimpleDateFormat MM dd yyyy Date convertedDat

随机推荐

  • 尤雨溪对 2022 Web前端生态趋势是这样看的

    文章目录 前言 开发范式 底层框架方面趋势 基于依赖追踪范式 基于依赖追踪范式 共同点 基于编译的响应式系统 统一模型的优势和代价 基于编译的运行是优化 Vue Vapor Mode input 工具链 原生语言在前端工具链中的使用 工具链
  • pytorch实战-图像分类(二)(模型训练及验证)(基于迁移学习(理解+代码))

    目录 1 迁移学习概念 2 数据预处理 3 训练模型 基于迁移学习 3 1选择网络 这里用resnet 3 2如果用GPU训练 需要加入以下代码 3 3卷积层冻结模块 3 4加载resnet152模 3 5解释initialize mode
  • imagej得到灰度图数据_ImageJ的高级使用方法

    今天我们继续来聊一聊ImageJ的高阶使用技巧 问题三 为什么总是全部圈起来的灰度值 有没有大神指导呢求助 本问题涉及免疫印迹 Western Blot 分析 提问者不能分别得到每个条带的值 灰度值0为纯黑 255为纯白 灰度值与光密度值
  • 网页数据库服务器连接超时,数据库服务器连接超时

    数据库服务器连接超时 内容精选 换一换 执行以下步骤创建数据库连接 单击工具栏上的或按 Ctrl N 连接到数据库服务器 弹出 新建 选择数据库连接 对话框 建立连接时 如果首选项文件损坏或首选项值无效 会显示如下错误信息 提示用户首选项值
  • Java记录一次百万级别数据扫表统计的任务

    一 需求 统计近200万商家数据 每日通过查询计费系统更新其余额 二 技术栈 抛开分布式定时任务系统Elastic Job之外 我们先优先把单系统极限优化挖掘出来 由于博主接手的是14年的老项目 本地甚至都无法启动 所以不尝试用高级玩法 数
  • ts 子组件中 定义的方法报错

    报错事例 typtscript 组件中定义方法报错 不能将类型 onRef ref any gt void 分配给类型 IntrinsicAttributes IntrinsicClassAttributes
  • Kubernetes組件介绍

    Apiserver 是公开Kubernetes API的Kubernetes控制平面的组件 Etcd 一致和高可用的键值存储用作Kubernetes的所有集群数据备份存储 Kube scheduler 它监视没有分配节点的新创建的pod 并
  • Drools规则引擎

    Drools规则引擎 Drools规则引擎 1 Drools简介 2 Drools入门案例 2 1 业务场景 2 2 maven坐标 2 3 编写xml配置文件 多方法 2 4 创建drl规则文件 2 5 单元测试 3 Drools基础语法
  • 东宝商城项目(三)——用户注册功能的实现(后端)

    本文是我做项目过程中记录的学习笔记 用于记录项目开发流程 第一次做项目有很多不懂的地方 本文可读性暂时很差 我目前的学习目标是走完项目开发流程 知道独立开发一个项目并让项目上线需要经历哪些步骤 需要学到哪些知识点 现将遇到的问题记录如下 发
  • 100流明相当于多少w_20平米客厅用多少瓦的LED灯合适?怎么选择合适的亮度?

    说到照明用灯 离不开三个要素 亮度 照度和色温 亮度大家都明白意思 指的是眼睛所感受到的光线刺激强度 照度则是指单位面积获得的亮度 色温则可以理解为指灯光的颜色 常见如白光 暖光和暖白 下面详细说一下这三者与平常家庭用灯的关系和搭配 一 L
  • 【数学建模】动态规划作业

    目录 一 作业1爬楼梯 二 作业二机器人走格子 三 机器人走有障碍的格子 四 投掷头子的N种方法 五 编辑距离 一 作业1爬楼梯 作业1 爬楼梯 题目来源 力扣70 爬楼梯 链接 https leetcode cn com problems
  • 投资理财笔记——理财的心理建设 & 基金概念入门

    文章目录 理财的心理预期 基金概念入门 理财的心理预期 学习投资理财的目的 是为了更清晰的认识到自己买的理财产品是什么 它的风险有哪些 是否能够承担这样的风险 其目的并不是在于赚更多的钱 因为风险和收益是成正比的 目的在于更清晰的认识 认识
  • 作为2019年的Java程序员,如何能快速进阶成长?

    面试候选人的时候 有个比较常见的问题 对于一份工作 你最关注哪些因素 回答往往是薪资待遇 公司氛围 公司发展前景 工作强度等 个人比较欣赏的答案是 个人能力的成长 想收获一个薪资好 公司发展前景好的工作机会 关键和根本还是取决于个人的能力
  • 考研:研究生考试(五天学完)之【政治考试】之研究生学霸重点知识点总结之考试内容各科占比及其知识结构重点(马概、毛中特、史纲、思修)

    考研 研究生考试 五天学完 之 政治考试 之研究生学霸重点知识点总结之考试内容各科占比及其知识结构重点 马概 毛中特 史纲 思修 目录
  • Python中的logger和handler到底是个什么鬼

    原文地址 http www cnblogs com anpengapple 最近的任务经常涉及到日志的记录 特意去又学了一遍logging的记录方法 跟java一样 python的日志记录也是比较繁琐的一件事 在写一条记录之前 要写好多东西
  • 小程序的应用生命周期、页面生命周期

    一 应用生命周期 小程序从启动 gt 运行 gt 销毁的过程 应用生命周期函数 应用生命周期函数在 app js 中声明 执行顺序如下 onLaunch 小程序初始化完成时触发 全局只触发一次 先于所有页面周期函数执行 onShow 小程序
  • IT公司智力题(持续跟新中)

    请听题 用赵本山在 买车 的语气 1 有1000瓶药物 但是其中有一瓶是有毒的 小白鼠吃了一个星期以后就会死掉 请问 在一个星期内找出有毒的药物 最少需要多少只小白鼠 解答 用二进制的思路去思考 1000瓶药代表了1000种状态 那么100
  • 边界值分析法:

    测试用例一 测试用例介绍 等价类划分法 边界值分析法 重点知识目标 测试用例的定义 测试用例核心要素 等价类划分法 边界值分析法 能力目标 掌握测试用例的定义 掌握测试用例核心要素 掌握等价类划分法 掌握边界值分析法 测试用例核心要素 用例
  • 06.图像识别与卷积神经网络------《Tensorflow实战Google深度学习框架》笔记

    一 图像识别问题简介及经典数据集 图像识别问题希望借助计算机程序来处理 分析和理解图片中的内容 使得计算机可以从图片中自动识别各种不同模式的目标和对象 图像识别问题作为人工智能的一个重要领域 在最近几年已经取得了很多突破性的进展 其中 卷积
  • Java基础学习系列--(二)static关键字概述

    2 1 概述 以前我们定义过如下类 public class Student 成员变量 public String name public char sex 男 女 public int age 无参数构造器 public Student