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静态全局变量

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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Lambda plus: 云上大数据解决方案

    Lambda plus: 云上大数据解决方案本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展。最后我们将介绍如何结合云上存储、计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景。大数据处理的挑战现在已经有越来越多的行业和技术领域需求大数据分析系统,例如金融行业需要使用大数据系统结合VaR(valueatrisk)或者机器学习方案进行信贷风控,零售、餐饮行业需要大数据系统…

  • arm64(aarch64)安装centos 7.5.1804

    arm64(aarch64)安装centos 7.5.1804总体说明Arm64的centos版本自7.5.1804以后不再和7.4、7.3、7.2等之前的一样直接提供一个rootfs.tar.xz的压缩包,全部变成了ISO的安装文件,因此需要EFI来引导安装,如果Aarch64的cpu用的是uboot就只有干瞪眼了,笔者花了一翻功夫,终于找到如何从ISO中提取出centos7.5.1804文件系统的方法,方便使用uboot的用户可以使用centos7….

    2022年10月16日
  • url转码 java_javaurlencode转码

    url转码 java_javaurlencode转码什么是URL转码不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符。尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。url特殊符号及对应的编码: 符号 url中的含义 编码 + URL中+号表示..

    2022年10月28日
  • 7款开源Java反编译工具

    7款开源Java反编译工具今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。尤其是像.NET、Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。当然,也有一些商业软件,对其程序进行了混淆加密,这样我们就很难用工具反编译了。1、Java反编译插件——JadclipseJadClipse是J…

  • 数据结构:栈和队列(Stack & Queue)【详解】

    数据结构:栈和队列(Stack & Queue)【详解】栈和队列知识框架栈一、栈的基本概念1、栈的定义栈(Stack):是只允许在一端进行插入或删除的线性表。首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶(Top):线性表允许进行插入删除的那一端。栈底(Bottom):固定的,不允许进行插入和删除的另一端。空栈:不含任何元素的空表。栈又称为先进先出(LastInFirstOut)的线性表,简称LIFO结构2、栈的基本操作InitStack(&S):初始化一个空栈S。StackEmpty(S):

  • MySQL JDBC StreamResult通信原理浅析

    MySQL JDBC StreamResult通信原理浅析好几年没写技术博客了,今天写一个小的技术点给大家分享,关于MySQLJDBCStreamResult的原理分享,难度不大,就当程序员的闲聊。如果使用MySQLJDBC读取过比较大的数据(例如超过1GB),应该清楚在读取的时候,很可能会Java堆内存溢出,我们的解决方案通常是使用useCursorFetch读取或Stream读取来处理。使用Stream读取的方式通常的操作方式是在执行SQL…

发表回复

您的电子邮箱地址不会被公开。

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