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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python虚拟环境virtualenv_怎样用pycharm写代码

    python虚拟环境virtualenv_怎样用pycharm写代码环境:win10python2.7.10(64)在path中配置python环境D:\Develop\Python27\ScriptsD:\Develop\Python27\安装virtualenvcmd>pipinstallvirtualenv建立virtualenv进入一个希望创建虚拟python环境的文件夹下面cmd>D:>cdvirtualenvcmd>D:\virtua

    2022年8月29日
    2
  • 具体解释VB中连接access数据库的几种方法

    具体解释VB中连接access数据库的几种方法

    2021年11月30日
    47
  • mac怎么上传文件到服务器_shell上传文件到服务器

    mac怎么上传文件到服务器_shell上传文件到服务器前言我们使用mac时,想让本地文件上传至服务器,该怎么办呢windows系统,我们可以使用xftp或者rz命令,那么mac呢?mac系统,我们可以使用sftp、scp或者rz命令,本文介绍sft

    2022年8月6日
    2
  • 常量指针,指针常量的区别是什么_指针常量与常量指针

    常量指针,指针常量的区别是什么_指针常量与常量指针**要有具备扎实指针知识……了解引用、指针的一些注意事项:引用并非对象引用必须初始化引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起类型要严格匹配一、常量指针定义:又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。关键点:常量指针指向的对象不能通过这个指针来修改,可是仍然可以通过原来的声明修改;常量指针可以被赋值为变量的地址,之所以叫常量指针,是限制了通过这个指针修改变量的值;指针还可以指向别

    2022年10月7日
    3
  • AMM和ASMM切换

    AMM和ASMM切换现在的Oracle正在往智能化方向发展。如果我们现在找一些8i/9i时代的Oracle书籍,怎么样配置合适的数据库各内存池大小是非常重要的话题。但是进入10g之后,自动内存池调节成为一个重要Oracle特性。在10g时,Oracle推出了ASMM(AutomaticSharedMemoryManagement),实现了OracleSGA和PGA内部结构的自调节。进入…

    2022年5月29日
    27
  • 万方数据知识平台 TFHpple +Xpath解析[通俗易懂]

    万方数据知识平台 TFHpple +Xpath解析

    2022年1月23日
    34

发表回复

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

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