static相关知识点详解

文章目录

  • 一. 修饰成员变量
  • 二. 修饰成员方法
  • 三. 修饰代码块
  • 四. 修饰类

一. 修饰成员变量

static 修饰的成员变量,称为静态成员变量,该变量不属于某个具体的对象,是所有对象所共享的。

public class Student {private String name;private static String classRoom="106";public static void main(String[] args) {// 方法一:静态成员变量可以直接通过类名访问System.out.println(Student.classRoom);//方法二:静态成员变量也可以通过对象访问,但是classRoom是三个对象共享的Student s1=new Student();Student s2=new Student();Student s3=new Student();System.out.println(s1.classRoom);System.out.println(s2.classRoom);System.out.println(s3.classRoom);}
}

在这里插入图片描述

由以上代码可知:

静态成员变量特性】:

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

二. 修饰成员方法

被 static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的。在类外部,静态成员一般是通过静态方法访问的。

public class Student {private String name;private static String classRoom="106";public static String getClassRoom(){return classRoom;}
}
class TestStudent{public static void main(String[] args) {Student s1=new Student();System.out.println(Student.getClassRoom());}
}

在这里插入图片描述
由以上代码可知:

静态方法特性】:

  1. 不属于某个具体的对象,是类方法。
  2. 可以通过对象调用,也可以通过**类名.静态方法名(…)**方式调用,更推荐使用后者。

在这里插入图片描述
在这里插入图片描述

  1. 不能在静态方法中访问任何非静态成员变量

在这里插入图片描述
在这里插入图片描述

  1. 静态方法中不能调用任何非静态方法。
  2. 静态方法无法重写,无法实现多态。

三. 修饰代码块

静态成员变量一般不会放在构造方法中来初始化,构造方法中初始化的是与对象相关的实例属性。那么静态成员变量该如何实现初始化呢?

1. 就地初始化:在定义时直接给出初始值

private static String classRoom="106";

2. 静态代码块初始化

使用 static 定义的代码块称为静态代码块。一般用于初始化静态成员变量。

public class Student {private String name;private static String classRoom;static {classRoom="106";}public static void main(String[] args) {System.out.println(Student.classRoom);}
}

在这里插入图片描述
这里有几点需要注意

  • 静态代码块不管生成多少个对象,其只会执行一次。
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的。
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)实例代码块只有在创建对象时才会执行。

四. 修饰类

被 static 修饰的内部成员类称为静态内部类。

public class OutClass {private int a;private static int b;public void methodA(){a=10;System.out.println(a);}public static void methodB(){System.out.println(b);}//静态内部类static class InnerClass{public void methodInner(){//a=100;//编译失败,在内部类中只能访问外部类的静态成员变量b=200;//methodA();//编译失败,因为methodB()不是静态成员方法methodB();}}public static void main(String[] args) {//静态内部类对象创建OutClass.InnerClass innerClass=new OutClass.InnerClass();innerClass.methodInner();}
}

在这里插入图片描述
这里有几点需要注意:

  • 在静态内部类中只能访问外部类中的静态成员。
  • 创建静态内部类对象时,不需要先创建外部类对象。

如果我们一定要访问外部类中的非静态成员呢?

我们可以通过在静态内部类内创建外部类对象,然后通过该对象去访问。

代码示例如下:

static class InnerClass{public void methodInner(){OutClass outClass=new OutClass();outClass.a=10;outClass.methodA();}
}

在这里插入图片描述

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

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

相关文章

【了解一下常见的设计模式】

文章目录 了解一下常用的设计模式(工厂、包装、关系)导语设计模式辨析系列 工厂篇工厂什么是工厂简单工厂「模式」(Simple Factory「Pattern」)简单工厂代码示例:简单计算器优点:缺点: 静态工厂模式特点: 工…

如何在网页下载腾讯视频为本地MP4格式

1.打开腾讯视频官网地址 腾讯视频 2.搜索你想要下载的视频 3. 点击分享,选择复制通用代码 <iframe frameborder="0" src="ht

Pixar、Adobe 和苹果等成立 OpenUSD 联盟推行 3D 内容开放标准

导读Pixar、Adobe、Apple、Autodesk 与 NVIDIA 联手 Linux 基金会旗下的联合开发基金会&#xff08;JDF&#xff09;宣布建立 OpenUSD 联盟&#xff08;AOUSD&#xff09;以推行 Pixar 创建的通用场景描述技术的标准化、开发、进化和发展。 联盟寻求通过推进开放式通用场景描述…

全网最全ArrayList底层原理实现

1. ArrayList集合底层数据结构 1. ArrayList集合介绍 ArrayList是实现了List接口的动态数组&#xff0c;所谓动态数组就是他的大小是可变的。实现了所有可选列表操作&#xff0c;并允许包括Null在内的所有元素。除了实现 List 接口外&#xff0c;此类还提供一些方法来操作内部…

如何将应用程序发布到 App Store

憧憬blog主页 在强者的眼中&#xff0c;没有最好&#xff0c;只有更好。我们是移动开发领域的优质创作者&#xff0c;同时也是阿里云专家博主。 ✨ 关注我们的主页&#xff0c;探索iOS开发的无限可能&#xff01; &#x1f525;我们与您分享最新的技术洞察和实战经验&#xff0…

伦敦金短线好还是长线好

在伦敦金投之中&#xff0c;长期有一个争论很久的问题&#xff0c;那就是伦敦金投资究竟是长线好还是短线好&#xff1f;不同的投资者对这个问题有不同的看法&#xff0c;一般认为&#xff0c;伦敦金投资比较适合短线交易。笔者也将讨论这个问题&#xff0c;看看伦敦金投资是不…

MinIO线上扩容实战

硬件投入肯定是随着业务的增长而增长&#xff0c;这就要求中间件平台必须提供水平伸缩机制&#xff0c;MinIO对象存储服务也不例外&#xff0c;本文就详细介绍MinIO的扩容。 Minio支持通过增加新的Server Pool来扩容老的集群。每个Server Pool都是一个相对独立的故障域&#x…

​深度解析温湿度监控系统环境对档案存储库房的影响

深度解析温湿度监控系统环境对档案存储库房的影响 &#xff08;一&#xff09;高温高湿环境对档案材料的影响 1、库房高温高湿会使一些档案纸张材料中耐热性较差的字迹产生油渗扩散褪变等现象而导致字迹模糊不清&#xff0c;会加速纸张中残留的有害化学物质对纤维素的破坏潮湿…

【C++ 学习 ⑭】- 详解 stack、queue 和 priority_queue 容器适配器

目录 一、详解 C STL 容器适配器 1.1 - 什么是容器适配器&#xff1f; 1.2 - 容器适配器的种类 二、详解 C STL deque 容器 2.1 - deque 的原理介绍 2.2 - deque 的优缺点 三、详解 stack 容器适配器 3.1 - stack 的基本介绍 3.2 - stack 的成员函数 3.3 - stack 的模…

androidstudio Please specify a signing configuration for this variant (release)

当直接运行release版本时&#xff0c;报错Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (package64-release). 解决报错&#xff1a;添加签名&#xff0c;signingConfigs 写在buildTypes前…

java八股文面试[java基础]——final 关键字作用

为什么局部内部类和匿名内部类只能访问final变量&#xff1a; 知识来源 【基础】final_哔哩哔哩_bilibili

壁仞科技与百度飞桨完成II级兼容性测试

近日&#xff0c;壁仞科技BR104通用GPU与百度飞桨已完成II级兼容性测试。测试结果显示&#xff0c;双方兼容性表现良好&#xff0c;整体运行稳定。这是壁仞科技加入飞桨“硬件生态共创计划”后的阶段性成果。产品兼容性证明本次II级兼容性测试完成了涵盖自然语言处理、计算机视…

服务器的介绍

1.服务器概述 1.1 服务器的基本概念 服务器是计算机的一种&#xff0c;是网络中为客户端计算机提供各种服务的高性能计算机&#xff1b; 服务器在网络操作系统的控制下&#xff0c;将与其相连的硬盘、磁带、 打印机及昂贵的专用通讯设备提供给网络上的客户站点共享&#xf…

【Unity3D赛车游戏】【二】如何制作一个真实模拟的汽车

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

C# 学习笔记

C# 学习笔记 Chapter 1 C# 基础部分Section 1 类与命名空间Part 1 命名空间 NameSpacePart 2 类 Class Section 2 基本元素Section 3 数据类型Part 1 什么是类型&#xff1f;Part 2 类型在 C Sharp 中的作用Part 3 C Sharp 中的数据类型 Section 4 变量、对象与内存Part 1 变量…

k8s扩缩容与滚动更新

使用kubectl run创建应用 kubectl run kubernetes-bootcamp \> --imagedocker.io/jocatalin/kubernetes-bootcamp:v1 \> --port8080 端口暴露出去 kubectl expose pod kubernetes-bootcamp --type"NodePort" --port 8080 使用kubectl create创建应用 kubect…

stack和queue的模拟实现

stack和queue的模拟实现 容器适配器什么是适配器STL标准库中stack和queue的底层结构deque的简单介绍deque的缺陷 stack模拟实现queue模拟实现priority_queuepriority_queue的使用priority_queue的模拟实现 容器适配器 什么是适配器 适配器是一种设计模式(设计模式是一套被反复…

【C++】红黑树

目录 一、红黑树的概念二、红黑树的性质三、红黑树的插入操作四、红黑树的验证五、红黑树和AVL树的比较六、代码 一、红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从…

设计模式(9)建造者模式

一、 1、概念&#xff1a;将一个复杂对象的构造与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象&#xff0c;这些对象内部构建间的顺序通常是稳定的&#xff0c;但对象内部的构建通常面临着复杂的变化&#xff1b;建造…

[SpringBoot3]Web服务

五、Web服务 基于浏览器的B/S结构应用十分流行。SpringBoot非常适合Web应用开发&#xff0c;可以使用嵌入式Tomcat、Jetty、Undertow或Netty创建一个自包含的HTTP服务器。一个SpringBoot的Web应用能够自己独立运行&#xff0c;不依赖需要安装的Tomcat、Jetty等。SpringBoot可以…