精华内容
下载资源
问答
  • java局部变量是什么意思?Java中局部变量与成员变量有哪些区别?
    千次阅读
    2021-03-06 18:52:46

    大家知道Java中的局部变量吗?今天我们要了解的Java的局部变量及它和成员变量的区别,一起来看看吧。

    什么是局部变量?

    局部变量时就是只有一部分可见的变量,例如定义在方法中的变量,只有这百个方法才能使用,同一个类的其他方法或者其他的类都不可见度。多态是面向对象编程的巨大优势,多态其实就是多种形态或者多种状态的意思,比如我们人来,我们都会说话,能思考,会打豆豆,但是人类具体概念概念太广泛了,例如:人类也分黄种人、黑人、白种人,不同的人种之间又有不同的属性,最明显的就如头发颜色,但是就算是同一种人也不会完全相同,它们的年龄、学历、性格。这就是java及所有面向对象语言最具特点的抽象与多态。从所有人类到某个人类,这是抽象,从某个人类到所有人类,这是多态,虽然都是人类,但是形态却是不可能完全一样的。

    Java中局部变量与成员变量区别在哪里?

    1. 定义的位置不一样

    局部变量:写在方法内部

    成员变量:写在方法外部,直接写在类当中

    2.作用范围不一样

    局部变量:只有方法当中才可以使用,出了方法就不能再用

    成员变量:整个类全都可以通用。

    3.默认值不一样

    局部变量:没有默认值,如果想要使用,必须手动进行赋值

    成员变量:如果没有赋值,会有默认值,规则和数组一样

    4.内存的位置不一样

    局部变量:位于栈内存

    成员变量,位于堆内存。

    5.生命周期不一样

    局部变量:随着方法进栈而诞生,随着方法出栈而死亡。

    成员变量:随着对象创建而诞生,随着对象被垃圾回收而消失。

    例:public calss Demo01variableDifference

    {

    String name; //成员变量

    public void methodA()

    {

    int num = 20; //局部变量 默认值为NULL

    System.out.println(num);

    System.out.println(name);

    }

    public void methodB(int param)

    {

    //方法的参数就是局部变量

    System.out.println(param); //参数也是局部变量,为什么不赋值就可以输出?

    //因为参数在方法调用的时候,必然会被赋值的。不传参数就会报错。

    int age;

    //System.out.println(age);//错误写法 未赋值不能使用,必须赋值

    // System.out.println(num);//错误写法

    System.out.println(name);

    /

    }

    }

    以上就是Java局部变量的所有内容,更多Java入门知识请关注我们了解吧。

    更多相关内容
  • Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用? 先说结论,无论你传的是基本数据类型还是引用类型,都是值传递。(因为引用类型只不过是把指向对象的地址拷贝一份传递给形参)。 这样理解...

    在Java中,当对象作为参数传递时,究竟传递的是对象的值,还是对象的引用?

    先说结论,无论你传的是基本数据类型还是引用类型,都是值传递。(因为引用类型只不过是把指向对象的地址拷贝一份传递给形参)。

    这样理解,引用类型的变量存储在栈中,其数值表示堆上对象的内存地址。调用函数时,会把这个变量的值(引用类型的话也就是对象地址)拷贝一份在栈上,传递给函数,此时在函数内重新给形参赋值并不会影响到外部的那个变量(实参)。而通过这个形参修改指向的对象时,因为形参与实参指向的是同一个对象,所以影响的是同一个对象。

    比如方法A中把对象引用list(作为指针p1)传递给方法B,那么B中的方法栈里会复制一份list指向的地址(作为指针p2)。 p1和p2指向的内容一定是一样的,p2修改了对象内容,比如add了一个数,那么p1也可以访问到这个数。但是 如果在方法B里改变了指针p2指向的地址, p1是不受影响的,因为是两个方法栈。 (Java没有指针,上面用指针表示 只是为了更容易理解)

    画个图:

    在这里插入图片描述
    看下面这个例子:

    public class Main {
    
        public static void main(String[] args) {
            ArrayList<Integer> list = new ArrayList<>();
            list.add(1); list.add(2);list.add(3); list.add(4);
    
            addList(list);
            for (int num : list) System.out.print(String.valueOf(num) + " ");
            System.out.println();
            
            changeList(list);
            for (int num : list) System.out.print(String.valueOf(num) + " ");
    
        }
        public  static  void addList(ArrayList<Integer> list) {
            list.add(5);
        }
        public  static  void changeList(ArrayList<Integer> list) {
            list = new ArrayList<>();
            list.add(6); list.add(7);
        }
    }
    
    输出:
    1 2 3 4 5 // 可以使用形参修改
    1 2 3 4 5 // 但是,把形参指向别人,不影响原来传递的引用内容
    

    所以,之前刷题的时候,妄想通过传递方法参数,来实现全局变量的效果是失败的!

    比如 剪纸offer里 二叉搜索树转换成双向链表的题,见题解。

    因为方法返回之后,原来传递的是null,现在还是null.

    其实,idea就有相关提示,可能你没有注意,你看这个例子。
    在第一个方法里,当你add(修改)引用内容的时候,list下面没有提示
    第二个方法里,当你改变了形参list指向内容时,它就给你整灰色了,还有下划线
    在这里插入图片描述

    补充:值传递和引用传递的结论:

    (1)基本数据类型int,double等传值,对形参的修改不会影响实参

    (2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;如果形参指针指向别的对象,则不会对原有对象造成影响。

    (3)String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象

    展开全文
  • java全局变量

    千次阅读 2021-02-12 09:55:44
    java中全局变量应该放哪儿? ”引发的争论1、单独写一个final的类,在里面定义finalstatic的全局变量,在其它程序里包含进来就可以了。2、类中的任何staticpublic的成员变量都是全局共享的。3、JAVA中不应该有所谓...

    “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环境变量

    千次阅读 2020-09-12 00:09:29
    打set查看path变量,原来,set Java_Home = ... 后面,不能带分号,否则会把分号作为路径的一部分; 然后再操作,成功了;set 是设置临时的环境变量,只在此cmd窗口有效,设置值退出即消失; 还有,set path=......

    首先用set命令操作;

        看上图;第一次操作,没有成功,打 java 命令以后找不到;是什么问题呢;

        打set查看path变量,原来,set Java_Home = ... 后面,不能带分号,否则会把分号作为路径的一部分;

        然后再操作,成功了;set 是设置临时的环境变量,只在此cmd窗口有效,设置值退出即消失;

    还有,set path=...,是追加还是覆盖?

        看上图,覆盖了;但是只在此cmd窗口有效,不影响其他部分,且退出后所设置内容即消失;

    set Java_Home=C:\Program Files\Java\jdk1.8.0_181
    set path=%Java_Home%\bin;%Java_Home%\jre\bin
    set CLASSPATH=.;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar

     

    给环境变量追加值的写法如下;

    给变量追加内容(不是覆盖):输入“set 变量名=%变量名%;变量内容”。
    如,为path添加一个新的路径,输入“ set path=%path%;d:\nmake.exe”即可将d:\nmake.exe添加到path中,

    操作测试一次,如下图;

    set命令语法如下;本次先用set临时用一次;以后若用到setx再操作;

    set  可以设置临时环境变量,只有在当前窗口下有效
    语法:set name=value

    set name 可以查看环境变量
    setx 可以永久设置环境变量
    setx /m 永久设置环境变量
    setx /m name "value"
    setx -m 永久追加环境变量
    setx -m name "%name%;value"
     
    windows10path变量初始值:%SystemRoot%\System32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

    .;C:\windows\System32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0;D:\Program Files\Git\cmd;C:\Users\yanghengxun\AppData\Local\Microsoft\WindowsApps;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin;D:\Program Files (x86)\Fiddler;

    展开全文
  • Java实例变量和类变量

    万次阅读 多人点赞 2017-09-04 09:02:02
    Java程序的变量大体可分为成员变量和局部变量。其中局部变量可分为如下3类。 形参:在方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法的结束而消亡。 方法内的局部变量:在方法内定义的局部变量,必须...
  • 关于java读取环境变量、虚拟机参数

    千次阅读 2020-09-09 17:47:37
    关于java读取环境变量、虚拟机参数 本文系统研究在springboot启动时传入参数,对于非springboot的普通 java项目也是相同的。 传参的参数类型 程序参数(Program arguments) 虚拟机选项(VM options) 环境变量...
  • 浅谈Java共享变量

    千次阅读 2021-02-12 13:42:06
    Java并发一直都是开发中比较难也比较有挑战性的技术,对于很多新手来说是很容易掉进这个并发陷阱的,其中尤以共享变量最具代表性,其实关于讲这个知识点网上也不少,但大象想讲讲自己对这个概念的理解。共享变量比较...
  • JAVA静态变量

    千次阅读 多人点赞 2020-02-11 12:17:59
    1.Java 中的 static 使用之静态变量 Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问...
  • java输出变量数据类型At SitePoint we’re always looking to expand the range of topics we cover. Lately, we’ve set our sights on exploring the world of Java. If you’re a strong Java developer who ...
  • Java全局变量存放在哪里?

    千次阅读 2021-02-12 18:46:20
    我们说 常量,静态变量存放在方法区中,方法中的临时变量,存放到Java 虚拟栈中。有人问,那全局变量*(对象)存放在哪里. 其实全局变量就是参考文章中所说的class的字段,就是指全局变量,它是存放在方法区中的。e)...
  • java变量的命名规范是什么?

    千次阅读 2021-02-12 21:49:47
    java变量的命名规范是什么?发布时间:2020-05-21 23:12:19来源:亿速云阅读:206作者:鸽子Java是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的...
  • 变量在类加载时就完成初始化工作,类变量在一个运行系统中只有一份供整个类和实例对象共享的值,该值有可能被类(及其子类)和它们所创建的实例改变,每一次的改变都将影响到该类(及其子类)和其他实例的调用。...
  • Java变量的线程安全分析

    千次阅读 2022-01-21 16:23:42
    1.成员变量和静态变量 如果他们没有共享,则是线程安全的 如果他们被共享了: 如果只有写操作,则线程安全 如果存在读操作,并且这段代码在临界区,则需要考虑线程安全 2.局部变量是否线程安全 局部变量是...
  • java中的全局变量

    千次阅读 2021-03-18 08:12:03
    正在使用NetBeans做一个稍大点的程序,刚刚学习使用,感觉程序中需要用到全局变量(其实java中是没有全局变量这个概念的)。在网上查了不少的资料,得到一点点体会:首先,java中是没有全局变量这个概念的,java程序中...
  • java 配置环境变量

    千次阅读 2021-03-09 07:16:03
    JAVA中常用需要设置的三个环境变量: JAVA_HOME 、CLASSPATH、PATH(一) 配置环境变量:(相对路径)1. JAVA_HOME = x:jdk1.6.0 JAVA_HOME2. 用%JAVA_HOME%就可以取代:x:jdk1.6.0这一部分CLASSPATH = $JAVA_HOME/lib/...
  • 如何在Java中创建动态变量名?

    千次阅读 2021-02-12 21:08:15
    好吧,我想我会更好地看到你想要做的事情,但最终你的问题的答案仍然是使用适当的集合。... 如果你真的想要能够创建动态变量名,你应该考虑除java之外的另一种语言。这不是Java的功能,它不能很好地实现。
  • java中的变量初始化问题

    千次阅读 2021-02-12 21:31:40
    方法的参数对于第一种称为类中的成员变量Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。以下是各种数据类型的默认值boolean false...
  • Java中局部变量和成员变量的区别

    千次阅读 2020-07-20 09:48:46
    局部变量和成员变量区别 1、位置不一样 局部变量:在方法的内部 成员变量:在方法的外部、直接写在类当中 2、作用范围不一样(作用域) 局部变量:只有方法当中可用,出了方法就不可用 成员变量:整个类都可用...
  • JAVA - 变量作用域

    万次阅读 多人点赞 2018-06-03 13:20:49
    JAVA用一对大括号作为语句块的范围,称为作用域,在作用域里定义的变量,只有在该作用域结束之前才可使用。 在JAVA中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级。* 类级变量又称全局级变量或...
  • java全局变量和局部变量的区别

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

    千次阅读 2021-03-04 08:08:20
    如果打的是jar包,我通常会用nohup启动,比如生产环境的一些db、redis、第三方secret等不会配置到项目里,今天要记录的便是用nohup java -jar 启动jar包时如何加载环境变量配置的问题。java语言...
  • Java中怎么声明变量和赋值

    千次阅读 2021-02-12 14:09:24
    import java.util.Scanner; ----------------------> //这个地方是导包public class Boke1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.print...
  • Java方法中通过传递参数改变变量的值
  • Java局部变量final

    千次阅读 2018-10-26 09:25:36
    局部变量和形参带final。 在一个线程A中开起另一个线程B,如果线程B要使用线程A的局部变量,...原因是加上final之后,在创建B线程的时候会把final标记的变量作为线程B的构造方法的参数传给B,如此一来就解决了此问题...
  • 如何在HTML文件中使用Java变量

    千次阅读 2019-10-31 17:48:17
    以下是 java代码 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String ...
  • java调用kettle设置变量参数

    千次阅读 2018-11-03 14:29:58
    java调用kettle ,变量参数的设置 java代码中变量会覆盖kettle 里面设置的变量 需要注意变量参数 他俩是不一样的 public class JobMail { public static void main(String[] args) throws KettleException...
  • Java中的局部变量

    千次阅读 2021-02-26 15:03:41
    * 方法参数变量(形参):在整个方法内有效; * 方法局部变量(方法内定义): 从定义这个变量开始到方法结束这一段时间内有效; * 代码块局部变量(代码块内定义):从定义这个变量开始到代码块结束这一段时间内...
  • 全局变量 定义在类中的变量叫做全局变量 ...JAVA中的全局变量和局部变量是允许重名的,但是如果在方法体内使用该重名变量时,局部变量会覆盖全局变量,出了方法,局部变量被销毁,只剩下全局变量。 ...
  • CentOS下配置java环境变量

    千次阅读 2018-11-27 12:54:35
    CentOS下配置java环境变量一.需要自己配置的环境变量二.三种配置环境变量的方法 一.需要自己配置的环境变量 PATH环境变量。作用是指定命令搜索路径,在shell下面执行命令时,它会到PATH变量所指定的路径中查找看...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,109,588
精华内容 443,835
关键字:

Java参数变量