java静态全局变量和全局变量的区别_java静态全局变量

java静态全局变量和全局变量的区别_java静态全局变量Java的面向对象的代码结构会使在多个位置引用变量更加困难。有时也很难确定给定变量应属于哪个类,尤其是当它是一个广泛使用的值(例如数据库连接器或数学常数)时。Java全局变量怎么定义?在许多语言中,当遇到这样的问题时,我们可以声明一个全局变量。但是,不幸的是,Java从技术上不允许在全局范围内创建变量。在本文中,我们将介绍如何在Java中模拟和使用全局变量。什么是全局变量?全局变量是可以从任何范围访问的变量。许多编程语言都具有用于声明全局变量的特殊语法,例如,Python使我们可以使

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java的面向对象的代码结构会使在多个位置引用变量更加困难。有时也很难确定给定变量应属于哪个类,尤其是当它是一个广泛使用的值(例如数据库连接器或数学常数)时。

Java全局变量怎么定义?

在许多语言中,当遇到这样的问题时,我们可以声明一个全局变量。但是,不幸的是,Java从技术上不允许在全局范围内创建变量。

在本文中,我们将介绍如何在Java中模拟和使用全局变量。

java静态全局变量和全局变量的区别_java静态全局变量

什么是全局变量?

全局变量是可以从任何范围访问的变量。许多编程语言都具有用于声明全局变量的特殊语法,例如,Python使我们可以使用global关键字:

global a_variable = 5

C通过简单地在函数外部声明变量来创建全局变量。

int aVariable = 3;

int someFunction() {

print(aVariable);

}

无论创建全局变量的语法如何,它们的工作方式大致相同。它们允许您从任何其他类或函数内部访问和修改值。如果您尝试在另一个作用域中重用该名称,则可能导致问题。例如:

int aVariable = 3;

int someFunction() {

int aVariable = 7;

print(aVariable);

}

根据语言,通常以以下三种方式之一来处理:

声明已存在的变量时引发错误。

假设打印语句引用局部变量。

假定print语句引用局部变量,除非使用特殊语法引用全局变量。

第三种方法是当方法参数使用相同名称时Java如何处理实例变量。描绘一个类,该类的变量声明为private int number。要修改以后的值number,您可以创建一个函数:

public int setNumber(int number) {

this.number = number;

}

在this你想要的关键字显示number从类,而不是从方法的参数。

Java为什么不使用全局变量?

这个问题的简短答案是:故意设计。Java被创建为纯粹的面向对象的编程语言,这就是为什么您创建的所有内容都包装在一个类中的原因。

通过纯粹面向对象,鼓励开发人员将相关的变量和函数保持在一起,从而使程序整体上更有条理。这也可以帮助确定文档记录不充分的目的。例如:

class GridCoordinate {

int x;

int y;

}

如果不知道这些变量是GridCoordinate类的一部分,则几乎不可能识别它们。通过类名的上下文,我们可以推断出它们是网格上给定点的水平和垂直位置。

现在想象一下您正在与一个遍布全球的成员组成的完全远程团队一起工作。当您遇到以下问题时,您和另一大陆的同事都在处理同一个文件:

global ver = 2.55

您假设变量代表版本号。您的同事认为这可能与垂直轴有关。你们都根据自己的假设对不同的功能进行了更改,并根据需要修改和引用了该值。

订阅我们的新闻

在收件箱中获取临时教程,指南和作业。从来没有垃圾邮件。随时退订。

订阅电子报

订阅

这是Java试图通过没有全局变量来避免的那种情况。在大型项目中使用全局变量会导致意外和意外的行为,因为在代码的不同部分中声明和修改了变量。

如何在Java中模拟全局变量?

尽管使用全局变量有一些缺点,但有时您可能希望在许多地方访问变量,但是您可能会觉得不保证创建专用包装类。

例如,您可能想在多个类中引用数据库连接,但没有声明一个DatabaseConnection类来处理所有数据库功能。您可能还希望只使用选择的数据库库中的内置方法,而无需使用包装程序来处理事务。

通常,您可以创建一个Constants或一个Reference类,如果各种“全局”值通常在应用程序的其他部分中使用,则可以在其中存储各种“全局”值。单个变量并不一定要保证整个类,因此您可以将多个变量包含在一个Reference或一个Constants类中:

public class Reference {

public static final double VERSION_NUMBER;

public static final String DATABASE_URL;

public static final Database DATABASE;

}

然后可以通过引用该类在其他位置访问这些变量:

public int someMethod() {

System.out.println(Reference.VERSION_NUMBER);

}

使用Reference该类可以很容易地知道在哪里可以找到解释变量目的的注释。如果上面的变量被创建为真正的全局变量,则很可能在不同的文件中创建了它们,这使得查找作者的预期目的变得更加困难。

使用Reference该类的一种更好的方法是将所有变量都视为私有变量,并使用getter方法控制对值的所有访问。对于在程序运行时不应更改的数据,使用常量而不是变量也是明智的。例如:

private static final String DATABASE_URL = “https://databaseurl.db/database”;

private static final Database DATABASE = Database.connect(databaseURL);

public static Database getDatabase() { return DATABASE; }

public static String getUrl() { return DATABASE_URL}

在此示例中,无法在代码中的其他任何地方修改数据库URL和数据库连接,但是可以根据需要引用数据库连接以进行事务处理。

虽然这在语法上不像定义全局变量那样干净,但是它可以提供相同级别的自由度。

另一个常见用法是在应用程序中定义一些常量,这些常量具有您经常使用的不可变值。例如,如果您正在训练神经网络或运行遗传算法,那么到处都会使用各种值:

public static final int GENERATION_SIZE;

public static final int GENOME_SIZE;

public static final int REPRODUCTION_SIZE;

public static final int MAX_ITERATIONS;

然后,您将通过他们的公共课程访问这些内容,例如:

for(int i = 0; i < Constants.MAX_ITERATIONS; i++) {

// …

}

结论

全局变量通常被视为一个分裂的话题,许多开发人员表示,永远不要使用它们。这些开发人员通常认为,全局变量使代码难以维护。但是,在某些情况下,只要全局变量良好地组织并清楚地标识它们,它们就很有用。

最终,使用它们的决定权在您或开发团队的高级成员身上。

分享一些Java基础和进阶的学习资料给大家看看吧!不管是进阶提升还是基础入门都很有用。

下面这些资料可以免费分享给大家学习,文末有免费下载方式!

目录

java静态全局变量和全局变量的区别_java静态全局变量

内容截图

java静态全局变量和全局变量的区别_java静态全局变量

这套文档涵盖的内容实再太过于全面,不论是成长进阶还是应对面试,都绰绰有余了。一共有上百万字,都为大家展示出来肯定是不太现实的,为了不影响大家的阅读体验就只展示了部分内容,还望大家海涵。

需要的小伙伴点击下方名片免费领取。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171744.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 主机网址怎么查_主机名查询

    主机网址怎么查_主机名查询由于JEO.VEE在做国外空间主机评测服务,平时会有很多朋友询问主机方面的问题,最常见的就是“哪个国外主机商最好?”或者“justhost主机服务怎么样?”等等很多类似的问题。其实国外大部分主机都还是可以的,没有哪个主机商好,也没有哪个最差劲。只有是不适合你。到底怎么知道哪个主机商是否适合自己的站点呢?你可以与你网站规模相类似的站点做下比较。看看对方网站在那个服务器,使用的哪个空间商。比如你的

    2022年10月9日
    3
  • interrupt interrupted_interrupt的用法

    interrupt interrupted_interrupt的用法(一).关于interrupt()    interrupt()并不直接中断线程,而是设定一个中断标识,然后由程序进行中断检查,确定是否中断。    1.sleep()&interrupt()    线程A正在使用sleep()暂停着:Thread.sleep(100000);    如果要取消他的等待状态,可以在正在执行的线程里(比如这里是B)调用a.interr

    2025年7月16日
    4
  • 太极图正确画法_来氏太极图的画法及六行太极图的演示

    太极图正确画法_来氏太极图的画法及六行太极图的演示本来,我已打算停中发文,但是这一篇涉及到我一个重要的思想,这就是我对明代来知德的“来氏太极图”有了重要的理解,我根据它形成了我的六行太极理论,于是我还是决定把它公布出来。我尝试很多办法把水火金木土风的六行的元素融入到太极图中,它既要能符合太极的原理,又要能符合六行的原理,但又要使用它最简单化,可始终无果,有一天,我看到了明代理学家来知德的《来瞿唐先生圆图》,忽然恍然大悟,来瞿唐先生的“来氏太极图”…

    2022年5月27日
    63
  • vscode配置java环境最新_VScode中文

    vscode配置java环境最新_VScode中文VScode配置Java环境1.VisualStudioCode介绍VisualStudioCode(简称“VSCode”)是Microsoft在2015年4月30日Build开发者大会上正式宣布一个运行于MacOSX、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器,可在桌面上运行,并且可用于Windows,macOS和Linux。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如

    2022年10月4日
    5
  • Apache 安装与配置「建议收藏」

    Apache 安装与配置「建议收藏」一、下载http://httpd.apache.org/download.cgi二、安装安装过程很简单,因为是压缩包,所以,先将其解压包中的Apache24解压到合适的位置,我将其解压到了D盘soft目录。配置找到D:\soft\Apache24\conf\httpd.conf文件,用记事本打开,找到DefineSRVROOT…

    2022年9月21日
    2
  • python进阶(11)生成器[通俗易懂]

    python进阶(11)生成器[通俗易懂]生成器利用迭代器,我们可以在每次迭代获取数据(通过next()方法)时按照特定的规律进行生成。但是我们在实现一个迭代器时,关于当前迭代到的状态需要我们自己记录,进而才能根据当前状态生成下一个数据。

    2022年7月28日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号