返回顶部
首页 > 资讯 > 前端开发 > VUE >如何掌握static关键字
  • 913
分享到

如何掌握static关键字

2024-04-02 19:04:59 913人浏览 泡泡鱼
摘要

本篇内容介绍了“如何掌握static关键字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“哥,一周过去了,

本篇内容介绍了“如何掌握static关键字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

“哥,一周过去了,教妹学 Java 你都没有更新,偷懒了呀!”三妹关心地问我。

“今天就更新。”我面带着微笑对三妹说,“学习可不能落下,今天我们来学 Java 中 static 关键字吧。”

“static 是 Java 中比较难以理解的一个关键字,也是各大公司的面试官最喜欢问到的一个知识点之一。”我喝了一口咖啡继续说道。

“既然是面试重点,那我可得好好学习下。”三妹连忙说。

“static  关键字的作用可以用一句话来描述:‘方便在没有创建对象的情况下进行调用,包括变量和方法’。也就是说,只要类被加载了,就可以通过类名进行访问。”我扶了扶沉重眼镜,继续说到,“static  可以用来修饰类的成员变量,以及成员方法。我们一个个来看。”

01、静态变量

“如果在声明变量的时候使用了 static  关键字,那么这个变量就被称为静态变量。静态变量只在类加载的时候获取一次内存空间,这使得静态变量很节省内存空间。”家里的暖气有点足,我跑去开了一点窗户后继续说道。

“来考虑这样一个 Student 类。”话音刚落,我就在键盘上噼里啪啦一阵敲。

public class Student { String name; int age; String school = "郑州大学";}

这段代码敲完后,我对三妹说:“假设郑州大学录取了一万名新生,那么在创建一万个 Student 对象的时候,所有的字段(name、age 和  school)都会获取到一块内存。学生的姓名和年纪不尽相同,但都属于郑州大学,如果每创建一个对象,school  这个字段都要占用一块内存的话,就很浪费,对吧?三妹。”

“因此,最好将 school 这个字段设置为 static,这样就只会占用一块内存,而不是一万块。”

安静的房子里又响起了一阵噼里啪啦的键盘声。

public class Student { String name; int age; static String school = "郑州大学";  public Student(String name, int age) { this.name = name; this.age = age; }  public static void main(String[] args) { Student s1 = new Student("沉默王二", 18);  Student s2 = new Student("沉默王三", 16); }}

“瞧,三妹。s1 和 s2 这两个引用变量存放在栈区(stack),沉默王二+18 这个对象和沉默王三+16 这个对象存放在堆区(heap),school  这个静态变量存放在静态区。”

“等等,哥,栈、堆、静态区?”三妹的脸上塞满了疑惑。

“哦哦,别担心,三妹,画幅图你就全明白了。”说完我就打开 draw.io 这个网址,认真地画起了图。

如何掌握static关键字

“现在,是不是一下子就明白了?”看着这幅漂亮的手绘图,我心里有点小开心。

“哇,哥,惊艳了呀!”三妹也不忘拍马屁,给我了一个大大的赞。

“好了,三妹,我们来看下面这串代码。”

public class Counter { int count = 0; Counter() { count++;  System.out.println(count); } public static void main(String args[]) { Counter c1  = new Counter(); Counter c2 = new Counter(); Counter c3 = new Counter(); }}

“我们创建一个成员变量 count,并且在构造函数中让它自增。因为成员变量会在创建对象的时候获取内存,因此每一个对象都会有一个 count 的副本,  count 的值并不会随着对象的增多而递增。”

我在侃侃而谈,而三妹似乎有些不太明白。

“没关系,三妹,你先盲猜一下,这段代码输出的结果是什么?”

“按照你的逻辑,应该输出三个 1?是这样吗?”三妹眨眨眼,有点不太自信地回答。

“哎呀,不错哟。”

我在 idea 中点了一下运行按钮,程序跑了起来。

111

“每创建一个 Counter 对象,count 的值就从 0 自增到 1。三妹,想一下,如果 count 是静态的呢?”

“我不知道啊。”

“嗯,来看下面这段代码。”

public class StaticCounter { static int count = 0; StaticCounter() { count++;  System.out.println(count); } public static void main(String args[]) {  StaticCounter c1 = new StaticCounter(); StaticCounter c2 = new StaticCounter();  StaticCounter c3 = new StaticCounter(); }}

“来看一下输出结果。”

123

“简单解释一下哈,由于静态变量只会获取一次内存空间,所以任何对象对它的修改都会得到保留,所以每创建一个对象,count 的值就会加 1,所以最终的结果是  3,明白了吧?三妹。这就是静态变量和成员变量之间的差别。”

“另外,需要注意的是,由于静态变量属于一个类,所以不要通过对象引用来访问,而应该直接通过类名来访问,否则编译器会发出警告。”

如何掌握static关键字

02、 静态方法

“说完静态变量,我们来说静态方法。”说完,我准备点一支华子来抽,三妹阻止了我,她指一指烟盒上的「吸烟有害身体健康」,我笑了。

“好吧。”我只好喝了一口咖啡继续说,“如果方法上加了 static 关键字,那么它就是一个静态方法。”

“静态方法有以下这些特征。”

静态方法属于这个类而不是这个类的对象;

调用静态方法的时候不需要创建这个类的对象;

静态方法可以访问静态变量。

“来,继续上代码”

public class StaticMethodStudent { String name; int age; static String school  = "郑州大学"; public StaticMethodStudent(String name, int age) { this.name = name;  this.age = age; } static void change() { school = "河南大学"; } void out() {  System.out.println(name + " " + age + " " + school); } public static void  main(String[] args) { StaticMethodStudent.change(); StaticMethodStudent s1 = new  StaticMethodStudent("沉默王二", 18); StaticMethodStudent s2 = new  StaticMethodStudent("沉默王三", 16); s1.out(); s2.out(); }}

“仔细听,三妹。change() 方法就是一个静态方法,所以它可以直接访问静态变量 school,把它的值更改为河南大学;并且,可以通过类名直接调用  change() 方法,就像 StaticMethodStudent.change() 这样。”

“来看一下程序的输出结果吧。”

沉默王二 18 河南大学沉默王三 16 河南大学

“需要注意的是,静态方法不能访问非静态变量和调用非静态方法。你看,三妹,我稍微改动一下代码,编译器就会报错。”

“先是在静态方法中访问非静态变量,编译器不允许。”

如何掌握static关键字

“然后在静态方法中访问非静态方法,编译器同样不允许。”

如何掌握static关键字

“关于静态方法的使用,这下清楚了吧,三妹?”

看着三妹点点头,我欣慰地笑了。

“哥,我想到了一个问题,为什么 main 方法是静态的啊?”没想到,三妹串联知识点的功力还是不错的。

“如果 main 方法不是静态的,就意味着 Java 虚拟机在执行的时候需要先创建一个对象才能调用 main 方法,而 main  方法作为程序的入口,创建一个额外的对象显得非常多余。”我不假思索的回答令三妹感到非常的钦佩。

“java.lang.Math 类的几乎所有方法都是静态的,可以直接通过类名来调用,不需要创建类的对象。”

如何掌握static关键字

03、静态代码块

“三妹,站起来活动一下,我的脖子都有点僵硬了。”

我们一起走到窗户边,映入眼帘的是从天而降的雪花。三妹和我都高兴坏了,迫不及待地打开窗口,伸出手去触摸雪花的温度,那种稍纵即逝的冰凉,真的舒服极了。

“北国风光,千里冰封,万里雪飘。望长城内外,惟余莽莽;大河上下,顿失滔滔。山舞银蛇,原驰蜡象,欲与天公试比高。须晴日,看红装素裹,分外妖娆。。。。。。”三妹竟然情不自禁地朗诵起了《沁园春·雪》。

确实令人欣喜,这是 2020 年洛阳的第一场雪,的确令人感到开心。

片刻之后。

“除了静态变量和静态方法,static 关键字还有一个重要的作用。”我心情愉悦地对三妹说,“用一个 static  关键字,外加一个大括号括起来的代码被称为静态代码块。”

“就像下面这串代码。”

public class StaticBlock { static { System.out.println("静态代码块"); } public  static void main(String[] args) { System.out.println("main 方法"); }}

“静态代码块通常用来初始化一些静态变量,它会优先于 main() 方法执行。”

“来看一下程序的输出结果吧。”

静态代码块main 方法

“二哥,既然静态代码块先于 main() 方法执行,那没有 main() 方法的 Java 类能执行成功吗?”三妹的脑回路越来越令我敬佩了。

“Java 1.6 是可以的,但 Java 7 开始就无法执行了。”我胸有成竹地回答到。

public class StaticBlockNoMain { static { System.out.println("静态代码块,没有  main"); }}

“在命令行中执行 java StaticBlockNoMain 的时候,会抛出 NoClassDefFoundError 的错误。”

如何掌握static关键字

“三妹,来看下面这个例子。”

public class StaticBlockDemo { public static Listwrites = new  ArrayList<>(); static { writes.add("沉默王二"); writes.add("沉默王三");  writes.add("沉默王四"); System.out.println("第一块"); } static { writes.add("沉默王五");  writes.add("沉默王六"); System.out.println("第二块"); }}

“writes 是一个静态的 ArrayList,所以不太可能在声明的时候完成初始化,因此需要在静态代码块中完成初始化。”

“静态代码块在初始集合的时候,真的非常有用。在实际的项目开发中,通常使用静态代码块来加载配置文件到内存当中。”

04、静态内部类

“三妹啊,除了以上只写,static 还有一个不太常用的功能&mdash;&mdash;静态内部类。”

“Java 允许我们在一个类中声明一个内部类,它提供了一种令人信服的方式,允许我们只在一个地方使用一些变量,使代码更具有条理性和可读性。”

“常见的内部类有四种,成员内部类、局部内部类、匿名内部类和静态内部类,限于篇幅原因,前三种不在我们本次的讨论范围之内,以后有机会再细说。”

“来看下面这个例子。”三妹有点走神,我敲了敲她的脑袋后继续说。

public class Singleton { private Singleton() {} private static class  SingletonHolder { public static final Singleton instance = new Singleton(); }  public static Singleton getInstance() { return SingletonHolder.instance; }}

“三妹,打起精神,马上就结束了。”

“哦哦,这段代码看起来很别致啊,哥。”

“是的,三妹,这段代码在以后创建单例的时候还会见到。”

“第一次加载 Singleton 类时并不会初始化 instance,只有第一次调用 getInstance()方法时 Java 虚拟机才开始加载  SingletonHolder 并初始化 instance,这样不仅能确保线程安全,也能保证 Singleton  类的唯一性。不过,创建单例更优雅的一种方式是使用枚举,以后再讲给你听。”

“需要注意的是。第一,静态内部类不能访问外部类的所有成员变量;第二,静态内部类可以访问外部类的所有静态变量,包括私有静态变量。第三,外部类不能声明为  static。”

“三妹,你看,在 Singleton 类上加 static 后,编译器就提示错误了。”

如何掌握static关键字

“如何掌握static关键字”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何掌握static关键字

本文链接: https://lsjlt.com/news/84211.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何掌握static关键字
    本篇内容介绍了“如何掌握static关键字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“哥,一周过去了,...
    99+
    2024-04-02
  • 如何掌握Synchronized关键字
    这篇文章主要讲解了“如何掌握Synchronized关键字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何掌握Synchronized关键字”吧!一、sy...
    99+
    2024-04-02
  • 如何快速掌握 Go 语言关键字?
    Go 语言是一种高效、快速、简单的编程语言,它的出现极大地改善了现代编程的生态环境。Go 语言的开发团队为了提高编程效率和代码可读性,设计了一系列的关键字。掌握这些关键字是学习 Go 语言的必要步骤。本篇文章将为大家介绍如何快速掌握 Go...
    99+
    2023-07-28
    关键字 教程 linux
  • ASP.NET中static关键字如何使用
    ASP.NET中static关键字如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。静态变量当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对...
    99+
    2023-06-17
  • java中static关键字如何使用
    java中static关键字如何使用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。public class Parent {  ...
    99+
    2023-06-20
  • C++ 中如何使用static关键字
    C++ 中如何使用static关键字,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、静态全局变量在全局变量前,加上C++ static关键字,该变量就被定义成...
    99+
    2023-06-17
  • 深入理解static关键字
    在开始讲static之前,我想让各位看一段有意思的代码:public class Test { static{ System.out.println("test static 1"); } ...
    99+
    2016-12-23
    java入门 java static
  • 详解Java的static关键字
    文章目录 🎄静态方法🌺静态方法和非静态方法对比🛸静态方法实例🛸非静态方法实例 🌹static关键字⭐static变量⭐static代码块 ...
    99+
    2023-12-22
    java 开发语言 static 静态方法
  • final与static关键字如何在Java中使用
    本篇文章给大家分享的是有关final与static关键字如何在Java中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、final   &n...
    99+
    2023-05-31
    java static final
  • 如何实现Java中的static关键字解析
    这期内容当中小编将会给大家带来有关如何实现Java中的static关键字解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,...
    99+
    2023-06-03
  • ASP 关键字 IDE 学习笔记:如何快速掌握 ASP 开发?
    ASP(Active Server Pages)是一种基于服务器端的脚本语言,可用于创建动态网页和 Web 应用程序。如果你想要成为一名 ASP 开发者,那么你需要掌握一些关键字和使用一些 IDE(集成开发环境)工具来提高开发效率。在本篇...
    99+
    2023-09-07
    关键字 ide 学习笔记
  • static关键字有什么作用
    今天主要学习下Java语言中的static关键字。static关键字的含义及使用场景static是Java50个关键字之一。static关键字可以用来修饰代码块表示静态代码块,修饰成员变量表示全局静态成员变量,修饰方法表示静态方法。(注意:...
    99+
    2019-04-23
    java教程 java
  • 解析Java中的static关键字
    目录一.static关键字使用场景1.1、静态变量1.2、静态方法1.3、静态代码块1.4、静态内部类1.5、静态导入二.static变量和普通成员变量区别三.类的构造器到底是不是s...
    99+
    2024-04-02
  • C语言Static 关键字解析
    目录01简述02static关键字作用01简述 static关键字在嵌入式C语言当中很简单,它有三个作用: 作用一:在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变...
    99+
    2024-04-02
  • Java static关键字详细解析
    目录static目的static范围静态(static)修饰静态变量静态方法静态代码块静态类static变量存储在方法区(Method Area)static目的 java中的sta...
    99+
    2024-04-02
  • c++中static关键字的作用
    在 c++ 中,static 关键字用于声明变量或函数,使其仅在声明的范围内可见,在程序启动时分配内存,并且保持不变。此外,它还允许跨函数和文件共享数据、存储常量、创建静态局部变量并定义...
    99+
    2024-05-15
    c++ 作用域
  • 如何在 Go 面试中展示您对关键字函数的掌握?
    Go 语言作为一门新兴的编程语言,越来越受到开发者的青睐,而在 Go 面试中,展示对关键字函数的掌握是非常重要的。本文将介绍如何在 Go 面试中展示您对关键字函数的掌握。 一、认识 Go 的关键字函数 在 Go 中,有一些关键字函数是必须要...
    99+
    2023-08-25
    面试 关键字 函数
  • 怎么理解并掌握JavaScript中的this关键字
    这篇文章主要讲解了“怎么理解并掌握JavaScript中的this关键字”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解并掌握JavaScript中的...
    99+
    2024-04-02
  • Linux 上的 Go 编程:必须掌握的关键字
    Go 是一种由 Google 开发的编程语言,它具有高效、简单、可靠等特点。在 Linux 平台上,使用 Go 编程可以快速地进行开发,因此,Linux 上的 Go 编程是现代软件开发的重要组成部分。 在本文中,我们将介绍一些在 Linu...
    99+
    2023-07-10
    教程 linux 关键字
  • ASP中的关键字:您是否掌握了全部?
    ASP是一种流行的服务器端脚本语言,许多人都在使用它来构建动态网站和Web应用程序。在ASP中,关键字是非常重要的,因为它们定义了语言的基本构建块。在本文中,我们将深入探讨ASP中的关键字,以帮助您更好地理解这种语言的工作方式。 一、什么是...
    99+
    2023-08-26
    关键字 对象 ide
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作