• 成员变量与局部变量


    成员变量与局部变量

    成员变量:在类体中定义的变量为成员变量,作用范围(scope)是整个类,只要在这个类中都可以访问到它。

    局部变量:在一个方法或方法中的代码块(code block)中定义的变量。局部变量是在方法或代码块被执行的时候被创建,在方法或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或赋值,否则出现编译错误。

    如下程序综合了变量的应用:

    package com.liaojianya.chapter1;
    /**
     * This program demonstrates the difference between local variables and member variables
     * @author LIAO JIANYA
     *
     */
    public class TestLocalVar4_5
    {
    	public static void main(String[] args)
    	{
    		int outer = 1;
    		{
    			int inner = 2;
    			System.out.println("inner = " + inner);
    			System.out.println("outer = " + outer);
    		}
    //		System.out.println("inner = " + inner);
    		int inner = 3;
    		System.out.println("inner = " + inner);
    		System.out.println("outer = " + outer);
    		
    		System.out.println("In class, the member a = " + a);
    	}
    	
    	static int a = 123;
    
    }
    

     运行结果:

    inner = 2
    outer = 1
    inner = 3
    outer = 1
    In class, the member a = 123
    

    总结:块(block)作用范围除了用for(while)循环或方法体的左右花括号{}来界定外,还可以直接用花括号{}来定义块。

    1)在上述程序中,块内定义inner为2,所以第一次打印出来的inner = 2.出了块后,若取消注释符号//,会出现编译错误,原因是这个语句不认识名叫“inner”的变量,因为前一个inner是定义在块内,出了块,块内inner将对后面的语句无效。之后,又重新定义一个inner变量并赋值为3,所以之后打印出来为inner = 3。

    2)从程序结果可以看出,outer = 1一直适用,因为是定义在块外的变量并且已经被赋值为1,块内快外都是可以调用.

    3)对于主方法块外的static int a = 123;是属于成员变量,必须声明为static的,否则main方法无法识别,因为是静态方法只能访问静态域,无法访问非静态域,虽然是在最后声明的,但是能够被访问,因为它的作用域是整个类。

    规则:一般而言,所有变量都遵循“先声明,后使用”的原则,只有先声明了,变量才能在内存中存在,之后才能被其他方法去访问。但是,存在于类中成员变量(不在任何的方法中),其作用域是整个类的范围,在编译器的内部协调下,变量只要作为类中的数据成员被声明,就可以在类内部的任何地方使用,无需满足“先声明,后使用”的原则。

  • 相关阅读:
    异常:Neither BindingResult nor plain target object for bean name 'command' available as request attribute
    SpringMVC 如何定义类型转换器
    Springmvc 进行数据类型转换
    mvc:view-controller 标签
    将POST请求转换为DELETE、PUT等请求的方法
    关于HiddenHttpMethodFilter
    关于抽象方法的调用的
    一对一关联关系基于主键映射的异常 IdentifierGenerationException
    (二十四)js内存回收方法
    (二十三)函数柯里化
  • 原文地址:https://www.cnblogs.com/Andya/p/5669813.html
Copyright © 2020-2023  润新知