精华内容
下载资源
问答
  • 代码块局部变量x只能作用于定义它的代码块,也就是说出了代码块该x就被销毁了
    代码块局部变量x只能作用于定义它的代码块,也就是说出了代码块该x就被销毁了
    展开全文
  • 代码块中局部变量与作用域

    千次阅读 2016-09-18 19:39:26
    作用域决定了在其内定义的变量名的可见性和生命周期。在C、C++和Java,作用去由花括号的位置决定。例如:{ int x = 12; //only x available { int q = 36; //both x & q available } //only x availa

    大多数过程型语言都有作用域(scope)的概念。作用域决定了在其内定义的变量名的可见性和生命周期。在C、C++和Java中,作用去由花括号的位置决定。例如:

    {
        int x = 12;
        //only x available
        {
            int q = 36;
            //both x & q available
        }
        //only x available
        //q is "out of scope"
    }

    在定义域中定义的变量只可用于作用域结束之前。
    考虑如下的一个问题:

    public class CodeBlock {  
        public static void main(String args[]) {  
            {      
                int x = 30; 
            }  
            int x = 100;  
            System.out.println(x);  
        }  
    }  

    可以正常输出,但是如果我们交换顺序:

    public class CodeBlock {  
        public static void main(String args[]) {    
            int x = 100;  
            {  
                int x = 30;  
            }  
            System.out.println(x);  
        }  
    }  

    就会报错。
    实际上以上代码在C和C++中是合法的,但是在Java中却不可以这样写,编译器会报告变量x已经定义过。所以,在C和C++里将一个较大的作用域的变量“隐藏”起来的做法,在Java中是不允许的。因为Java设计者认为这样会导致程序混乱。
    Java中:
    第一种写法:先定义了代码块局部变量后定义方法局部变量,代码块局部变量x只能作用于定义它的代码块,也就是说出了代码块该x就被销毁了,所以后来再定义一个方法局部变量是可以的。
    第二种写法:先定义了方法局部变量后定义了代码块局部变量,方法局部变量的作用域是整个方法,出了该方法后这个方法局部变量才被销毁,此例中,在方法局部变量还未被销毁时就定义了相同名字的代码块局部变量,所以被视为重复定义。

    对象的作用域:

    {
        String s = new String("a string");
    }//end of scope

    引用s在作用域的终点就消失了,然而,s指向的String对象仍继续占据内存空间。Java神奇之处在于有一个垃圾回收器,用来监视new创建的所有对象,并辨别那些不会再被引用的对象。随后,释放这些对象的内存空间,以便提供其他对象使用。

    展开全文
  • Java 之 代码块中局部变量

    千次阅读 2012-09-28 23:47:06
    很有意思的问题,下面这段代码会输出预期的结果,int x在代码块中被赋值,而后... * 普通代码块中局部变量 * @author zendao */ public class CodeBlock { public static void main(String args[]) { { // 普
    很有意思的问题,下面这段代码会输出预期的结果,int x在代码块中被赋值,而后在主方法内再次定义并赋值,结果是100
    
    /**
     * 普通代码块中的局部变量
     * @author zendao
     */
    public class CodeBlock {
    
    
        public static void main(String args[]) {
    
    
            {
                //  普通代码块
                int x = 30;
    
    
            }
            int x = 100;
    
    
            System.out.println(x);
        }
    }

    然而,下面这样写,却会报错:


    /**
     * 普通代码块中的局部变量
     * @author zendao
     */
    public class CodeBlock {
    
        public static void main(String args[]) {
    
            int x = 100;
            {
                //  普通代码块
                int x = 30;
    
            }
    
            System.out.println(x);
        }
    }

    报错的原因是:variable x is already defined in method main(String[])



    ???


    展开全文
  • 一、代码块 静态代码块只执行一次,非静态代码块每创建一个实例对象时,就会执行一次。 public class Dui { static int age=1;//成员变量被static修饰,则其被所有对象共享。 //非静态数码块 { int age = 1...

    一、代码块

    静态代码块只执行一次,非静态代码块每创建一个实例对象时,就会执行一次。

    public class Dui {
    	 static int age=1;//成员变量被static修饰,则其被所有对象共享。
    
    	    //非静态数码块
    	    {
    	        int age = 1;//无初始值,且不能加访问控制符和static。
    	        System.out.println("非静态代码块中的age"+age);
    	    }
    	    //静态的比非静态的早执行
    	    static int a=2;//加载时赋初值
    
    	    static {//加载时执行
    	        System.out.println("静态代码块中中的a"+a);
    	    }
    
    	    public static void print(int age) {//类加载时分配地址
    	        System.out.println("静态print方法中的age"+age);
    	    }
    
    	    public static void main (String[] args) {//类加载时分配地址
    	        System.out.println("main方法中输出a"+a);
    	        new Dui();//静态的可以通过对象创建,使用非静态的变量。
    	        new Dui().prints(14);//静态的可以通过对象创建,执行非静态的方法,不能直接调用(静态的先执行)
    	        print(24);//静态的可以直接调用静态方法。
    	    }
    
    	    //非静态
    	    int b =12;//创建对象时赋初值
    	    {
    	        System.out.println("非静态代码块中的B"+b);//创建对象时执行
    	    }
    
    	    public void prints(int age) {//创建对象时分配地址
    	        System.out.println("prints方法中的输出age"+age);
    	        print(12);//非静态的可以直接调用静态方法
    	        System.out.println("prints方法中输出a"+a);//非静态的可以直接使用静态变量
    	    }
    }
    

    输出结果

    静态代码块中中的a2
    main方法中输出a2
    非静态代码块中的age1
    非静态代码块中的B12
    非静态代码块中的age1
    非静态代码块中的B12
    prints方法中的输出age14
    静态print方法中的age12
    prints方法中输出a2
    静态print方法中的age24
    

    从上面的输出结果中可以看出,先执行静态代码块,在执行main方法,在创建对象时,会先执行非静态代码块,并且每创建一个对象都会执行一次。静态变量供全类的对象使用。

    二、全局变量和局部变量

    1、全局变量:直接在类中声明的变量叫成员变量(又称全局变量)。注:如果未对成员变量设置初始值,则系统会根据成员变量的类型自动分配初始值:int分配初始值0、boolean分配初始值false,而自定义类型则分配初始值null。
    2、作用范围:成员变量定义后,其作用域是其所在的整个类。注:成员变量的定义没有先后顺序,但是最好将成员变量的定义集中在类的顶部。
    3、局部变量:方法中的参数、方法中定义的变量和代码块中定义的变量统称为局部变量。注:局部变量在使用以前必须显式初始化或赋值,局部变量没有默认值。
    注:声明局部变量时,数据类型前除final外不允许有其他关键字,即其定义格式为: [final] 数据类型 变量名 = 初始值;
    4、作用范围:局部变量的作用域范围从定义的位置开始到其所在语句块结束。

    //非静态数码块
    	    {
    	        int age = 1;//无初始值,且不能加访问控制符和static。
    	        System.out.println("非静态代码块中的age"+age);//这里输出的age是1
    	    }
    

    5注意点:
    1、如果局部变量的名字与全局变量的名字相同,则在局部变量的作用范围内全局变量被隐藏,即这个全局变量在同名局部变量所在方法内暂时失效。
    2、如果在局部变量的作用域范围内访问该成员变量,则必须使用关键字this来引用成员变量。

        public static void print() {
            System.out.println(age);//当局部变量和全局变量重名时,(不强调数据类型),从局部变量定义到期结束作用范围,全局变量起作用,除非加上this.
            int age=9;
            System.out.println(age);//输出9
            if(age==1) {
                String names ="wangming";
                System.out.println(names);
            }
    
        }
    

    三、静态变量(类变量)

    static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
      static成员变量的初始化顺序按照定义的顺序进行初始化。

    展开全文
  • 1、代码块:Java中代码块分为静态代码块和非静态代码块。 2、特点:静态代码块只在类加载时执行一次;静态代码块每次创建对象时都会执行。 { System.out.println(age); } static { System.out.println(name...
  • 局部变量:在函数内部(代码块内部)声明的变量,也称为“自动变量”,进入代码块创建,退出代码块销毁 #include int fun() { int a = 19; { int a = 20; { int a = 21; printf("%d\n", a); //21,局部...
  • LUA教程局部变量代码块(block)-14

    千次阅读 2020-07-12 09:46:09
    使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。 x = 10 local i = 1 -- local ...
  • Lua初识之局部变量代码块-八

    千次阅读 2014-12-27 17:42:31
    Lua初识之局部变量代码块 num = 10 -- 声明全局变量 num local i = 1 -- 声明局部变量 i  while i  local num = i * 2; -->声明局部变量 num  print("local num = " .. num) --> 2 4 6 8 ..  i = i + 1 ...
  • 1什么是代码块?? 答:代码块:在Java中用{}括... *变量x在类只使用一次, 用一个局部代码块,是为了在代码块结束后,内存自动释放,减少内存的使用 是顺序执行的,只是在执行结束后,立即消失。* main(.....
  • 局部代码块限定了变量的生命周期,变量局部代码块中定义的,那么出来局部代码块之后,就访问不到了。在局部代码块中定义的变量, 在出了代码块之后,内存就会释放掉。作用: 主要就是节约内存.局部代码块中定义的...
  • java有几种常见的代码块,那怎样区别他们呢? 这里就这些问题,浅谈下我个人的理解。 1.局部代码块 局部代码块,又叫普通代码块。...在程序当我们定义完成一个局部变量x之后,并且在接下来的代码
  • Java的变量:全局变量与局部变量

    千次阅读 2017-09-27 22:02:56
    定义:顾名思义,局部变量定义在局部范围内,可以是一个方法,也可以是一个语句,也可以是一个代码块 是否需要初始化:局部变量在使用前必须要初始化,否则编译报错。因为系统不会为局部变量赋默认值 生存时间:...
  • 新手小白学 JAVA 方法 局部变量 成员变量

    万次阅读 多人点赞 2021-04-01 23:59:30
    2.2 局部变量 位置:定义在方法里或者局部代码块中 注意:必须手动初始化来分配内存.如:int i = 5;或者int i; i = 5; 作用域:也就是方法里或者局部代码块中,方法运行完内存就释放了 2.3 成员变量 位置:定义在类里方法...
  • 1. java静态变量,静态代码块,静态方法,实例变量,匿名代码块 在Java,使用{}括起来的代码称为代码块代码块可以分为以下四种: (1)普通代码块:就是类方法的方法体 public void xxx(){ //code } ...
  • 局部变量

    2020-09-07 12:22:00
    局部变量就是定义在大括号{ }包含的代码块内,例如: if(){ } if(){ }else{} for(){ } while() { } do{ } while(); switch(){ } 还有函数的定义,例如: voidfunc(void){ } 在大括号{}包含的代码块内定义的...
  • * 局部代码块局部位置,用于限定变量的生命周期 * 构造代码块:在类的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。 * 作用:可以把多个构造方法的共同代码放在一起。 *...
  • 局部变量就是方法或语句内部定义的变量。局部变量必须初始化。 形式参数是局部变量局部变量的数据存在于栈内存。栈内存局部变量随着方法的消失而消失。 成员变量存储在堆的对象里面,由垃圾回收器负责...
  • OC中局部变量,全局变量和成员变量

    千次阅读 2015-11-13 00:55:43
    OC中局部变量,全局变量和成员变量
  • java局部变量和全局变量

    万次阅读 多人点赞 2017-08-18 15:09:10
    只在特定的过程或函数可以访问的变量,被称为局部变量。 与局部变量相对应的,是全局变量。 全局变量就是从定义的位置起,作用域覆盖整个程序范围的变量。 局部变量可以和全局变量重名,但是局部变量...
  • Java成员变量和局部变量区别

    千次阅读 2021-03-19 10:18:38
    学习目标: 掌握Java的成员变量和局部变量 ...代码块中(一对花括号) 下图是成员变量和局部变量在代码的体现 2、变量初始化 变量的初始化表示在内存开辟存储空间,只有初始化之后,才能使用。 成员变量:默认是
  •   基本概念: 作用域:起作用的区域,也就是可以工作的范围。...C语言中局部变量就分配在栈。   局部变量  普通的局部变量定义的时候直接定义或者在前面加上auto void func1(void){&nbs...
  • JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先...
  • java的变量类型有: ...局部变量声明在方法、构造方法或者语句块中局部变量在方法、构造方法、或者语句被执行的时候创建,当它们执行完成后,变量将会被销毁; 访问修饰符不能用于局部变量...
  • 概念首先得明白局部变量,静态局部变量,全局变量,静态全局变量这几个概念,以下面程序举例://main.cpp int a = 0; //全局变量 static int b=0;//静态全局变量 main() { int c; //局部变量 static int d;//静态...
  • java的成员变量和局部变量的区别

    万次阅读 2016-08-29 11:20:59
    成员变量: ...方法内定义的变量、形参、代码块中定义的变量都叫做局部变量; 另外,成员变量可以不显式初始化,它们可以由系统设定默认值;局部变量没有默认值,所以必须设定初始赋值。 还有

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,079
精华内容 108,431
关键字:

代码块中的局部变量