精华内容
下载资源
问答
  • java全局变量
    千次阅读
    2021-02-12 09:55:44

    “java中全局变量应该放哪儿? ”引发的争论

    1、单独写一个final的类,在里面定义final static的全局变量,在其它程序里包含进来就可以了。

    2、类中的任何static public的成员变量都是全局共享的。

    3、JAVA中不应该有所谓全局变量的概念,全局变量严重影响了封装和模块化,所以如果你的程序中需要所谓的全局变量,那一定是你对程序的设计出了问题。

    4、那JAVA提供FINAL STATIC 干吗用啊,存在即合理,很多情况是需要用到全局变量的。他能减少参数的传递,能避免重复声明。

    5、FINAL STATIC应该理解为常量,而不是“全局变量”,它的目的不是为了让你每个类都可以访问,而是独立于具体对象,抽象到类层次的东东。

    6、class Global { public static final String APPNAME= "xyz"; // global constant public static String currentUser = "abc"; // global variable ... } class WhatEver { ... System.out.println(Global.APPNAME); Global.currentUser = "Williams"; }

    7、JAVA中不应该出现”全局变量“的概念。以上争论的焦点是:public static final 类型 变量 是否属于所谓的“全局变量”不得而知。它只不过实现了全局的意图。我们要用到该变量时,只需要把该变量所在的类引用进来就可以了。这不正是我们所需要的吗?不过还是要强调一定要真正理解JAVA当初出现的初衷就是为了安全性和跨平台性。 去掉了类似C,C++中的全局变量的概念,就是基于此的。

    8、有了全局变量安全性就差了。

    9、不用全局变量固然不无道理,但是世事无绝对,看运用,有的时候垃圾也能变成王道!

    就象goto一样,他本身没什么错,错在运用者,用的过多过滥当然不对,但是为了避免使用GOTO却用1000行来饶开,难道看1000行代码就一定看的很清晰吗?java的全局变亮也是一样,不能用的太滥,什么东西都往全局上靠图省事自然会出问题,但是过度恐惧不敢用也不可取,该用的场合还是要用的.特别是独体类型,全虚拟机只有一份,数据库连接池对象一般就是独体对象,至于原因,我想不用我多说了吧!

    10、如果一个栈内存段就能搞定的事情,为何要用多个堆内存段来实现呢?

    11、对于“象goto一样,他本身没什么错,错在运用者,用的过多过滥当然不对,但是为了避免使用GOTO却用1000行来饶开,难道看1000行代码就一定看的很清晰吗?”确实全局变量在某些环境下可能还有其实际的意义。但是在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开始,全局变量的使用确实降到了一个极低的程度,也许是因为在下的代码写的还是太少的缘故吧,呵呵...)。

    12、static 变量可以使用,不要认为程序中出现了static成员或方法就是程序写的不好,用不用静态成员与程序写的好坏没有直接的因果关系,不要钻牛角尖。

    13、interface Global { public static final }

    更多相关内容
  • 主要涉及了java中的局部变量和全局变量,就二者的含义、生存时间和创建位置作了介绍,需要的朋友可以参考下。
  • 一、下面先大致介绍java中static关键字的作用1:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。2:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。...

    前言:学习变量之前若对static修饰符不理解,理解可能比较吃力。

    一、下面先大致介绍java中static关键字的作用

    1:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关。

    2:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。 

    3:简单来说就是被static修饰后的值可以直接类名.值进行引用,而无需new一个对象进行调用

    4.static特点
    static翻译为“静态”
    所有static关键字修饰的都是类相关的,类级别的。
    所有static修饰的,都是采用“类名.”的方式访问。
    static修饰的变量:静态变量
    static修饰的方法:静态方法

    二.变量的分类:
    2.1变量根据声明的位置进行划分:

    在方法体中声明的变量叫做:局部变量。
    在方法体外声明的变量叫做:成员变量

    其中成员变量又可以分为:

    实例变量
    静态变量

     2.2、静态变量:

    1:静态变量(又称类变量):由static修饰,在JVM中,静态变量的加载顺序在对象之前,因此静态变量不依附于对象存在,可以在不实例化类的情况下直接使用静态变量

    2:静态变量属于类,不属于类中任何一个对象,因此静态变量又叫做类变量,一个类不管创建多少个对象(对象是类的一个实例),静态变量在内存中有且仅有一个。

    简而言之若需要引用静态变量,直接类名.静态变量即可
    如:System.out.println("类变量(又称静态变量) A=" + Demo.A);

    2.3 实例变量

    实例变量(又称成员变量):必须依附于对象存在,

    只有实例化类后才可以使用此类中的实例变量

     (即new 对象后才能调用)如代码中的

    2.4局部变量

    这里仅讲解 方法体内定义的局部变量

    方法体内定义的局部变量仅能在该方法中使用,若外部直接使用,则会报错

     

     

     

    三、全局变量和局部变量的区别如下:

    1,作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等

    2,内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区

    3,生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了

    4,使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量。

    5,工具类里的方法都使用静态的。(静态方法有一个优点,是不需要new对象,直接采用类名
    调用,极其方便。工具类就是为了方便,所以工具类中的方法一般都是static的。)

    6,什么时候变量声明为实例的,什么时候声明为静态的?

    如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例变量,浪费内存空间。
    建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。

    • 一个对象一份的是实例变量。
    • 所有对象一份的是静态变量。

     

    展开全文
  • JAVA全局变量:静态变量,实例变量(即在类体中定义的变量), 静态变量:static int a=3; 实例变量:int b=5 全局变量不能在类体中先声明(定义)后赋值 但静态变量可以先在类体中声明,然后在方法中赋值(当然...

    参考:https://blog.csdn.net/lilil371324/article/details/51241580
    JAVA全局变量:静态变量,实例变量(即在类体中定义的变量), 静态变量:static int a=3; 实例变量:int b=5

    1. 全局变量不能在类体中先声明(定义)后赋值
    2. 静态变量可以先在类体中声明,然后在方法中赋值(当然实例变量是不行的)
    public class Test {
    
     static   int a;        //在类体中声明整型静态变量a。
    
            public static void main(String[] args) {
    
                  a=3;                 //在方法中对静态变量a赋值。
    
                 System.out.println("a="+a);
    
                 }
    }
    

    java中全局变量为什么不能先声明再赋值?

    public class Test{
        int b;
        b=5;
    }
    

    为什么这种先声明后赋值是错误?什么机制导致的?
    那是因为赋值语句,不能单独出现在方法或{}以外的地方
    改成

    public class Test{
      int i;
      {i = 3;} //写在{}里就可以了(这种代码块优先于构造方法执行)
    }
    

    成员变量可以在类体中声明同时进行赋值,如 静态变量:static int a=3; 实例变量:int b=5;

    public class Test {
    
       static int a=3;        //在类体中声明整型静态变量a并赋初值。
    
       int  b=5;                //在类体中声明整型实体变量b并赋初值。
    
              public static void main(String[] args) {
    
                 System.out.println("a+b="+(a+b));
    
                 }
    
    }
    

    三、所有变量(包括成员变量)均不能以这种形式声明并赋值变量(无论在类体中还是在方法)
    编译系统认为 b 没有被声明何种数据类型。

    还有,在数据类型转换上,有隐式转换和显式转换(即强制类型转换),隐式转换只能从高字节的数据类型向低字节的数据类型转换,这样不会丢失原有数据的精确度,如果要将变量从低字节的数据类型转换成高字节的数据类型,只能使用显式转换。如下:

    short a=3;  
    int b=65537;
    //a=b;
    a=short(b)
    

    a=short(b)就不会报错了。但有时会失去数据原有的精确性。如上,则a=1; 因为a被b以低16位的位值赋值了。

    展开全文
  • Java全局变量怎么定义? 在许多语言中,当遇到这样的问题时,我们可以声明一个全局变量。但是,不幸的是,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全局变量存放在哪里?

    千次阅读 2021-02-12 18:46:20
    有人问,那全局变量*(对象)存放在哪里. 其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)方法区与堆一样,是被线程共享的区域。在方法区中,存储了每个类的信息(包括类的...
  • java全局变量和局部变量的区别

    千次阅读 2020-06-28 21:39:21
    java全局变量和局部变量 全局变量 全局变量又称实例变量,属性,成员变量。 位置 定义在类中,属于类中的一个成员 作用范围 因为全局变量是定义在类中的,所以可以使用四种访问权限控制修饰符修饰,但是不论使用哪种...
  • Java全局变量和局部变量初始化问题

    千次阅读 2020-02-21 23:24:53
    我们先来看一个比较的例子,最近在知乎看到的帖子。... //类的成员变量 public static void main(String[] args) { TestDemo td =new TestDemo(); //默认的构造方法 System.out.println(td.a); ...
  • JAVA 全局变量 声明与定义

    千次阅读 2019-05-10 17:20:31
    JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义的变量,有三点得注意: 一、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法中...
  • Java全局变量

    千次阅读 2017-06-23 16:00:00
    JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义的变量,有三点得注意: 一、成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法中...
  • java 全局变量和局部变量的区别

    千次阅读 2018-08-03 20:49:58
    全局变量和局部变量的简介: 1、全局变量:描述对象有什么(在类中定义),类中所有方法都可以使用。 2、局部变量:临时保存数据(在类的方法中定义),只能在当前方法中使用。 全局变量和局部变量的区别: 1、作用...
  • } class NewThread extends Thread{//测试在另外类中全局变量的变化 @Override public void run() { // TODO Auto-generated method stub super.run(); a+=10; Log.e("fda", "in the Thread a --->"+a); } } } 打印...
  • JAVA全局变量

    2022-05-28 23:57:51
    java中的全局变量是由public修饰的static成员变量,形如public static int ID; java中的全局变量是放在静态方法区中的,所有的实例对象会共享同一份全局变量。所以一旦对某个类实例化后对其中的全局变量做出修改,...
  • java 全局变量危害

    千次阅读 2017-06-19 14:06:05
    // java 全局变量危害  // 最近为了图快捷,使用了全局变量 ,然后就想到了一些危害 // 1.线程不安全:线程中多个全局变量,修改容易冲突,需要加锁 // 2.增加耦合性:修改全局变量可能会影响其他模块 // ...
  • 主要介绍了Java Jmeter全局变量设置过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 在linux环境中配置java全局变量

    千次阅读 2017-10-25 15:09:37
    很多Java项目发布到环境,需要配置java全局变量这样可以很省心。配置java全局变量非常简单只需要三步。 第一步,上传Jdk包并且解压jdk包。并且确定jdk的地址,进入到jdk包中执行pwd会初心jdk的地址 第二步:在etc...
  • java全局变量和局部变量

    千次阅读 2017-07-19 11:07:11
    全局变量是一个运行时刻实体,它在程序的整个执行过程中都存在。全局变量生命周期为程序开始到程序结束。 全局变量显示初始化时,或者未初始化时,在程序映像中有不同的分区:已初始化的全局变量是可执行模块的一...
  • java全局变量引起的并发问题

    万次阅读 2016-02-25 11:09:11
    最近刚完成了一个短彩信群发平台的开发工作,系统采用springmvc+hibernate+jdbctemplate+mysql架构。其中遇见许多问题,闲暇之余记录下来以避免在后续项目中再犯... controller.java代码:  ........  @Autowired
  • java中的全局变量

    千次阅读 2021-03-18 08:12:03
    在网上查了不少的资料,得到一点点体会:首先,java中是没有全局变量这个概念的,java程序中不能像C++那样在类外定义全局变量,因为JAVA当初出现的初衷就是为了安全性和跨平台性,所以去掉了类似C、C++中的全局变量...
  • 最近看到一段代码,做报表输出功能。 几乎是严格按照封装的要求编写,每个方法很...不知作者是处于什么样的考虑, 采用全局变量进行操作,只在此对全局变量进行思考。 使用场景:常运用于不会变化的值,仅限于使用
  • 全局变量是编程术语中的一种,源自于变量之分。全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。局部变量(Local variables):在方法内部(包括main()方法...
  • Java全局变量的值问题

    千次阅读 2016-09-03 09:39:33
    在类定义(声明)了全局变量,没有对其赋值,利用类内的方法对其赋值,其值变成了方法给的值,无论是在方法内部还是方法外。(除非你定义了同名的局部变量)
  • 这段代码描述了进程之间的全局变量,是不能共享的,进程虽然在代码方面与线程有些类似,但是本质上是不同的
  • 可能刚学java对这些变量很懵,直接上图,接下来进行代码解释 此文为了方便各位理解,仅简单解释,若需深入,还需继续学习 学习变量之前若对static修饰符不理解,理解可能比较吃力, 一:下面先大致...
  • Java的成员变量有两种,分别是全局变量和静态变量(类变量)。定义在方法体和语句块之外,不属于任何一个方法,作用域是整个类。 名称 修饰 访问 生命周期 全局变量(实例变量) 无 static 修饰 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 366,999
精华内容 146,799
关键字:

java全局变量