java中的全局变量和局部变量_JVM中基本变量放在哪

java中的全局变量和局部变量_JVM中基本变量放在哪正在使用NetBeans做一个稍大点的程序,刚刚学习使用,感觉程序中需要用到全局变量(其实java中是没有全局变量这个概念的)。在网上查了不少的资料,得到一点点体会:首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C、C++中的全局变量的概念。JAVA中不应该有所谓全局变量的概念,全局变量…

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

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

正在使用NetBeans做一个稍大点的程序,刚刚学习使用,感觉程序中需要用到全局变量(其实java中是没有全局变量这个概念的)。

在网上查了不少的资料,得到一点点体会:

首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C、C++中的全局变量的概念。JAVA中不应该有所谓全局变量的概念,全局变量严重影响了封装和模块化,所以中需要所谓的全局变量,那一定是对程序的设计出了问题。以上是网上的观点,但就我目前来说,一个能在全局上使用的变量是有必要的。

第二点,java提供了public static关键字来实现一个全局的变量。如果程序只有一个包的话,那么将这个public static(被声明为static的变量不需要实例化对象即可直接使用类名来引用之) 修饰的变量放到程序初始化的地方去实现,就可以在这个程序的各个地方直接调用这个变量了。这虽然不叫全局变量,但实际使用中和全局变量的意思是一样的。当然你也可以完全不用全局变量,可以写一个类,定义一般变量,并为该类定义一些操作变量的方法,通过调用可以更改变量的这些方法来达到使用全局变量的目的。

还有,关于static的用法,static可以修饰变量、方法,也可以修饰类,但是static类只能是内类。

静态内部类在概念和实现上都十分简单,基本上来说就是在您的主类中定义一个静态类:

public class Foo

{

// ….

public static class Test

{

public static void main (String[] args)

{

// ….

}

}

}

说到向您主要的类中添加辅助代码,其中最重要的一点就是静态内部类被编译到一个单独的 .class 文件中,这个文件独立于它的外部类。例如,如果外部类叫做 Foo,而它的一个内部类叫 Test,那么这个内部类将被编译成 Foo$Test.class 文件。.class 文件的分离意味着您可以将辅助的嵌套代码与主要的外部类牢固地捆绑在一起。它们在同一个源文件中,内部类的确是在外部类的内部。您无需再付出任何发布或运行时的开销。真棒!例如,如果辅助代码只是用于调试,那么您只需发布 Foo.class 文件而将 Foo$Test.class 文件留下即可。

我将这个技巧主要用于编写外部类的演示代码、错误调试代码,以及进行单元测试实现类行为的自动验证。(当然,做为一个勤奋的开发人员,我准备将测试代码转化成单元测试。)

注意,要执行 Foo.Test 类的 main() 方法,请使用下面的命令:

% java Foo$Test

如果您正在使用的命令解释程序(shell)把“$”做为一个保留字,那么您应该使用下面的命令:

% java Foo//$Test

还有一点十分有趣:静态内部类根据定义可以访问外部类的保护域和私有域。这件事可以说既有利也有弊。因为您可能在不经意间就破坏了外部类的保护域和私有域,从而违反了它的封装性,所以请小心对待!这一功能最恰当的应用就是编写类的白盒测试程序--因为这样可以引入一些利用通常的黑盒测试很难引入的问题(黑盒测试不能访问对象的内部状态)。

XYPair 类十分简单。它提供一个固定的整数对,(x,y)。XYPair.Test 类有一个 main() 方法可以对 XYPair 进行简单的测试并输出结果。试着调整测试代码和核心代码来试验各种可能的问题。

如果您更加大胆,您可能想检验 Java 单元测试构架(JUnit)。您可以去掉源代码中的各种注释,然后利用 JUnit 的测试引擎运行这些测试程序。

注:

用Static定义的静态成员函数或者静态变量,可以通过其所属类名来直接调用.为什么可以这样?因为既然这个类的所有对象都是使用的这一个变量,那么理所当然我不需要去从其中的任何一个对象去引用它,而只是通过类名引用就可以了嘛.这样不是可以方便的实现一些全局函数和全局变量吗?把所有全局的函数或者全局的变量都定义在一个静态类中,调用的时候直接通过这一个类名就可以方便的访问所有的全局变量和全局函数了。

附:     确实全局变量在某些环境下可能还有其实际的意义。但是在JAVA中,确实没有所谓的全局变量的概念,通过设置一个abstract class or interface,并将许多final or final static field置于其中,并在使用时调用ClassName.xxx or InterfaceName.xxx来模拟全局变量的使用(可以肯定的是,在许多的著作中大师们都已经反复强调了将许多常数放入一个abstract class or interface,并使之成为常数类或常数接口的做法是对此功能的误用,并不鼓励如此使用,有兴趣可以参阅《effective   java》——机械工业出版社出版   Joshua   Bloch   著),但      首先,final   or   final   static确实不是全局变量的概念,在JAVA中,一切都是对象,在对象中声明的无论是field还是method亦或是property都将归属于某一种抽象或具体类型,否则也不会在调用中使用ClassName.xxx or  InterfaceName.xxx这样的形式来加以说明这是这个CLASS的XXX,那是那INTERFACE的XXX。事实上final代表的是一种常量形式(Constant),而static则代表一种静态观念,常量的概念是为了区别于变量而存在的不变的变量(有些别扭,突然发现自己词语贫乏, HOHO),而静态则是希望区别于某一具体Object而独立存在于某一特定类型的变量(到可以称之为该类型的全局变量,但个人感觉不很确切)。全局变量的概念显然过于宽泛,以至于我们说一个程序甚至是一个系统拥有一个唯一的变量变成可能,但final   or   static显然不是为其而设计的(当然可以模拟)。      其次,阁下提到的有关于“全虚拟机只有一份,数据库连接池对象…”是设计模 式中所谓单例模式的实际应用,该模式确实非常像所谓的全局变量的概念,但设计这样单个实例确实是因为在系统的整个生命周期中只需要一份该实例存在的缘故,更多的是突出概念而非实际应用,而全局变量则更多就是为了实际应用而生,这样就会导致许多不成熟的,不加思考的应用加于其上而导致黏糊的像意大利面条一样的代码。      所以个人认为,依在下实在低微的学识实在不敢胡乱评说关于全局变量是否有实 际意义这样巨大的课题,这样的课题还是留给那些专家去讨论吧。至于如何实际应用全局变量,我看,还是有则去之,无则加冕吧,实在要用偶也么的办法(不过自从使用C++/JAVA开始,全局变量的使用确实降到了一个极低的程度,也许是因为在下的代码写的还是太少的缘故吧,呵呵…).(摘自 http//topic.csdn.net/t/20050430/22/3979146.html)

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

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

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

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

(0)


相关推荐

  • perl对中文的支持

    perl对中文的支持

  • PyCharm导入本地模块

    PyCharm导入本地模块1.首先进入PyCharm的设置面板2.进入后点击Porjectinterpreter,点击右上角的add3.点击Existingenvironment这个选项,然后选择interpreter4.在弹出来的窗口中选择你的python安装目录关于查找目录位置,在windows中可以打开cmd然后输入wherepythonmacos中可以打开终端输入whichp…

  • idea激活码 mac 2021.023月最新在线激活

    idea激活码 mac 2021.023月最新在线激活,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • verilog变长移位寄存器「建议收藏」

    verilog变长移位寄存器「建议收藏」verilog变长移位寄存器普通的移位寄存器可以按如下设置,下面是一个一次移动一位的移位寄存器。moduleshift_stationary(clk,dat,ctrl,shift_out);inputclk;input[15:0]dat;input[1:0]ctrl;outputreg[15:0]shift_out;always@(posedgeclk)begincase(ctrl)2’b00:begin

  • jenkins教程菜鸟_jenkins新手入门教程

    jenkins教程菜鸟_jenkins新手入门教程Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。虽然jenkins提供了Window、Linux、OSX等安装程序,但是都没有war方便。本文用的是jenkins的war包,简单、方便、快捷。一、安装jenkins1.在https://jenkins.io/下载jenkins.war;##…

  • 国产Linux系统下替代QQ和微信的不二之选

    国产Linux系统下替代QQ和微信的不二之选在2019年,UOS宣布成立至今,原深度系统得到资金之后,发展速度直线上升,目前已经完全可以使用Deepin系统进行办公和日常使用了UOS是Deepin的专业版,前者收费,后者免费,和红帽一样的运营策略但是,众所周知,在去年QQ迎来了距离上一次更新十年前后的第一次更新,更新效果一如既往的被吐槽,因为真的太敷衍了,而微信至今为止,并未有过真正的Linux平台的cs客户端,有的只是一个残废的网页封装版,所以如果使用国产系统去使用腾讯家族的东西,那将是一种折磨。幸好,互联网新秀字节跳动退出了覆盖全国产.

发表回复

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

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