`
coffee_hc
  • 浏览: 9271 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

参数的作用域

阅读更多

先上一段代码

 

public class Test{
 public static void main(String[] args) {
		String  a  = "1";
		a(a);
	}

	public static void a(Object o) {
		b(o);
		c(o);
	}

	public static void b(Object o) {
		Integer a = 2;
		o = a;
	}

	public static void c(Object o) {
		System.out.println(o);
	}

}

 

 打出结果为  1

为什么这样,其实在b方法里面我们对o指定了一个全新的对象,但是请注意这个对引用的赋值的作用域仅限于在b方法内部,不会改变调用B方法传入的参数的值,但是如果b方法改为如下内容的时候:

 

public static void b(Object o) {
		o = "2";
	}

则打印出的结果是 2

  也就是说在方法传值的时候对引用的改变仅限于内容的改变,如果对其引用的地址做出改变的话对外部是没有任何作用的,可能有点绕,但是我相信你懂得。

 但是现实中,特别是AOP中,我们往往是要对主方法中的值做一些处理,但是不希望切面的实现者变更它的引用该如何做呢,这个时候就要用到强大final关键字了。

 

public static void b(final Object o) {
		o = "2";
	}

 这样的。

一旦写成:

 

public static void b(final Object o) {
		Integer a = 2;
		o = a;
	}

 那么连编译都通不过的。

呵呵,在类里面定义final的字段的时候也是一样的道理,今天写代码的时候遇到这个问题,只是一个小细节,拿出来分享一下。

0
2
分享到:
评论
1 楼 bugmenot 2011-06-01  
写道
但是如果b方法改为如下内容的时候:
public static void b(Object o) {
	o = "2";
}

则打印出的结果是 2


public class Test{
 public static void main(String[] args) {
		String  a  = "1";
		a(a);
	}

	public static void a(Object o) {
		b(o);
		c(o);
	}

	public static void b(Object o) {
		o = "2";
	}

	public static void c(Object o) {
		System.out.println(o);
	}
}

这代码的打印是1。不是2

相关推荐

    C++参数传递与作用域

    【C++参数传递与作用域】是编程中重要的概念,主要涉及函数调用时的数据交换方式和变量在不同范围内的生命周期。在C++中,函数调用涉及到栈数据结构,它具有先进后出的特性,用于存储临时数据,如函数调用的信息。 ...

    php代码-参数作用域

    了解参数作用域可以帮助我们编写更加清晰、可控的代码。本文将深入探讨PHP中的四种基本作用域:全局作用域、局部作用域、静态作用域以及超全局作用域。 1. 全局作用域: 全局作用域是程序开始到结束时始终存在的...

    作用域的定义及应用

    在这个例子中,`radius` 参数的作用域仅限于 `Area` 函数内部,即从左括号 `(` 开始到右括号 `)` 结束。这意味着 `radius` 只能在 `Area` 函数内部被引用,而在函数外部或其他函数中则无法访问。 #### 四、局部变量...

    什么是作用域?

    函数原型中的参数具有特定的作用域,这种作用域只限于函数原型本身。具体来说,参数的作用域从左括号“(”开始,到右括号“)”结束。例如: ```c double Area(double radius); ``` 在这个例子中,`radius`的作用...

    深入理解JavaScript作用域和作用域链

    这个链的前端是当前函数的活动对象,包含了局部变量、参数等信息,后面则是函数创建时的作用域链。当函数执行完毕,活动对象会被销毁,但其后的链仍然保留,直到整个作用域链所属的执行环境结束。 在处理函数内部的...

    JSP内置对象及四种作用域

    2. **request**作用域:比page作用域稍大,一个请求中的所有资源(如Servlet、JSP)都能访问在此作用域内设置的属性。这意味着,如果一个请求经过了多个Servlet或JSP,这些对象依然可用。`request.setAttribute()`...

    java变量的生命周期与作用域

    方法作用域是指变量定义在方法内部的作用域,块作用域是指变量定义在块内部的作用域,类作用域是指变量定义在类内部的作用域,而实例作用域是指变量定义在实例内部的作用域。 在 Java 中,变量的生命周期和作用域是...

    C++ 作用域规则

    C++ 作用域规则 C++ 中的作用域规则是指变量的有效范围,它们在哪里创建,在哪里销毁。变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号。下面是 C++ 中各种类型的变量的作用...

    深化理解javascript作用域其次篇之词法作用域和动态作用域_.docx

    动态作用域的优点是可以实现函数的动态调用和参数传递。例如: function add(x, y) { return x + y; } function multiply(x, y) { return x * y; } function compute(x, y, operation) { return operation(x, y)...

    JavaBean的作用域.doc

    JavaBean的作用域是指它在应用程序中的可见性和生命周期,通常有四个不同的作用域:Page、Request、Session和Application。 1. **Page作用域**: Page作用域的JavaBean只在其创建的JSP页面内有效。这意味着一旦...

    javascript 闭包、匿名函数、作用域链

    JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...

    3.8 函数参数与变量的作用域(ppt).zip

    在编程语言中,函数参数与变量的作用域是至关重要的概念,它们直接影响到代码的可读性、维护性和正确性。作用域定义了变量在程序中的可见范围,而函数参数则是函数接收输入数据的方式。让我们深入探讨这两个主题。 ...

    es6函数中的作用域实例分析

    在这个例子中,参数`y`的默认值是`x`,在函数`f`的参数作用域内,`y = x`中的`x`实际上指的是第一个参数`x`,而非全局变量`x`,因此输出为2。 另外,如果在函数体内再次定义与参数同名的局部变量,这个局部变量不会...

    JSP的九个内置对象及四个作用域

    JSP 九个内置对象及四个作用域 JSP(Java Server Pages)是一种基于Java的服务器端脚本语言,用于生成动态网页。在JSP中,九个内置对象是指不需要预先声明就可以在脚本代码和表达式中使用的对象,这些对象都是javax...

    1.10-函数的参数和变量的作用域

    函数的参数和变量的作用域是理解Python代码如何运行的关键概念。在这篇文章中,我们将深入探讨这两个主题。 首先,让我们理解什么是函数参数。在Python中,当我们定义一个函数时,可以指定一些参数(或称形参),...

    参数传递与作用域PPT学习教案.pptx

    在编程领域,参数传递与作用域是至关重要的概念,它们涉及到如何在函数中处理数据以及在不同代码块之间管理变量的可见性。以下是对这些概念的详细解释: **参数传递**: 1. **值传递(Pass by Value)**:这是最...

    element ui table编辑(作用域插槽)

    在 Element UI 的 Table 组件中,每个表格项(row)都有自己的作用域,可以通过 `scope` 参数访问。 例如,我们想要自定义某列的编辑模板,可以这样写: ```html 姓名" prop="name"> $index === editingIndex" ...

    深入解析Python中函数的参数与作用域

    Python是一种高级编程语言,其函数的参数和作用域是编程基础的重要组成部分。理解这些概念对于编写高效、可维护的代码至关重要。 首先,我们来看函数的参数传递。在Python中,函数参数的传递是通过赋值给局部变量来...

Global site tag (gtag.js) - Google Analytics