`
bornlone
  • 浏览: 29954 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Java 中调用方法时的显式参数与隐式参数

阅读更多

    我们这里有一个 JavaBean 类——BankAccount.java,以及一个测试类——Test.java

public class  BankAccount{
	private double balance;       //账户余额

	public BankAccount(){
		balance = 0;
	}
	public BankAccount(double initMoney){
		balance = initMoney;
	}
	
	//存款方法
	public void deposit(double nums){
		balance = balance + nums;
	}
	//取款方法
	public void withdraw(double nums){
		if(balance >= nums)
			balance = balance - nums;
	}
	//获取账户余额
	public double getBalance(){
		return balance;
	}
}

 

public class Test{
       public static void main(String[] args){
	BankAccount bankAccount = new BankAccount();
	bankAccount.deposit(1000);
	bankAccount.withdraw(400);
	System.out.println(bankAccount.getBalance().toString());
        }
}
  

 

 

    我们都知道,每创建一个BankAccount类的对象,都有一个和这个对象相对应的实例字段 balance。而我们每次通过 BankAccount 对象调用 BankAccount 类中的公有方法去操作实例字段时,Java 编译器是通过什么去把对象和实例字段相对应呢?

 

    其实这里面就有一个隐式参数的概念了。调用方法时的显示参数我们都知道,就是方法括号中的参数值;而隐式参数就是调用该方法的对象了。

 

    我把方法改造一下就会更明白了:

    BankAccount bankAccount1 = new BankAccount();

    bankAccount1.deposit(1000);

    BankAccount bankAccount2 = new BankAccount();

    bankAccount2.deposit(1000);

 

    当 bankAccount1 对象调用 deposit 方法时,deposit 方法是这样的:

    //存款方法
    public void deposit(double nums){
          bankAccount1.balance = bankAccount1.balance + nums;
    }

    当 bankAccount2 对象调用 deposit 方法时,deposit 方法是这样的:

    //存款方法
    public void deposit(double nums){
          bankAccount2.balance = bankAccount2.balance + nums;
    }

 

    所以说它是通过隐式参数去操作对应的实例字段的,而隐式参数就是调用该方法的对象。

 

    而隐式对象也可以不用直接用对象名去表示,也可以通过 this 关键字,如下:

    public void deposit(double nums){
          this.balance = this.balance + nums;
    }
    this 就是代表调用该方法的当前对象。

 

 

    还有一种特殊现象,就是构造方法之间相互调用,上面的构造方法也可以改成如下:

    public BankAccount(){
        this(0);
    }
    public BankAccount(double initMoney){
        balance = initMoney;
    }
    第一个构造方法中的 this(0); 就是调用的另一个构造方法;构造方法中的 this 调用是构造方法之间的相互调用,而并不是指当前对象。

分享到:
评论
1 楼 ageha67 2009-02-23  
受教了~~今天看一本书里面讲到显示参数和隐式参数的内容,还晕晕的呢。。。谢谢lz了,呵呵

相关推荐

    Android显式启动与隐式启动Activity的区别介绍

    **显式启动与隐式启动的对比** - **可控性**:显式启动更直接,控制性强,只启动指定的Activity;而隐式启动可能有多个Activity匹配,需要用户选择或系统决定。 - **灵活性**:隐式启动更灵活,可以实现跨应用的...

    Java中的隐式参数和显示参数实例详解

    显式参数,例如在`public void add(int b)`中的`int b`,是我们在调用方法时需要提供值的变量。在方法内部,`b`将被用来执行特定的操作,如在给定的例子中,`b = a + b;`这个表达式中的`b`就是显式参数。在调用方法...

    显式和隐式、过滤器intent的使用

    显式Intent通过指定目标组件进行直接调用,而隐式Intent则依赖于Intent Filter的匹配来寻找合适的响应者。熟练掌握这两种Intent以及Intent Filter的使用,对于开发高效且可扩展的Android应用至关重要。通过学习和...

    Android中Intent的详解(显式,隐式,系统,startActivityForResult);

    启动Activity时,通过`startActivityForResult()`,并在目标Activity完成时调用`setResult()`,最后在原始Activity中重写`onActivityResult()`来接收结果。 ```java Intent intent = new Intent(this, ...

    Java继承时构造函数的调用

    2. 如果父类没有无参数的构造函数,或者我们希望在子类构造时传递特定参数给父类,可以在子类的构造函数中使用`super()`关键字显式调用父类的构造函数。这里的`super()`后面可以跟随一个参数列表,与父类构造函数的...

    浅谈Java程序中的构造方法调用.pdf

    所以此时必须要保证父类中有无参构造方法,如果父类中的显示定义了带参数的构造方法时,就必须要显示定义无参数的构造方法,以确保父类中无参构造方法存在,否则就会出现编译错误。 三、通过 super 调用父类的构造...

    java构造方法

    在Java中,当子类继承父类时,子类的构造方法会隐式或显式地调用父类的构造方法。如果子类的构造方法没有明确调用父类的构造方法,那么Java会默认调用父类的无参构造方法。但如果父类中没有无参构造方法,或者需要在...

    java中的继承(子类调用父类构造方法还不懂).doc

    - **定义**:当子类中的方法与父类中的方法具有相同的方法名、参数列表和返回类型时,称子类方法重写了父类的方法。 - **规则**: - 方法名、参数列表和返回类型必须完全相同。 - 子类方法的访问级别不能小于父类...

    android两个APK相互调用并传参数

    在Android开发中,有时我们需要实现一个应用程序(APK)调用另一个应用程序并传递参数的功能。这通常是通过Intent机制来完成的,Intent是Android系统中用于启动活动(Activity)、服务(Service)或者其他组件的一种...

    java可变参数[文].pdf

    - 调用带有可变参数的方法时,我们可以像传递普通参数一样直接列出这些参数,例如`sumUp(1, 3, 5, 7)`。 - 编译器会将这种调用方式隐式转换为数组形式,如`sumUp(new int[]{1, 3, 5, 7})`。 - 可以传递零个参数,...

    android服务的开启方式及调用服务中的方法的实现

    此外,服务生命周期中的`onStartCommand()`和`onCreate()`方法是服务启动时调用的重要方法,开发者需要在此处进行初始化工作和处理启动请求。 在`TestService1`这个例子中,我们可以看到具体的实现细节,包括服务的...

    子类需不需要调用父类有参或者无参问题1

    当父类既有无参数的构造方法,也有带参数的构造方法时,子类如果没有显式调用`super`,则默认会自动调用父类的无参数构造方法。这是因为如果子类没有指定要调用哪个父类构造方法,编译器会选择最安全、最通用的选择...

    java中this的用法.pdf

    当在方法中需要调用本类的其他方法时,也可以使用this关键字。这种方式在方法的内部比较常见,比如在类A的print方法中,通过this.print()调用了本类的另一个print方法。这样的调用可以按照方法的重载规则找到合适的...

    深入Java核心Java中多态的实现机制.pdf

    这使得通过基类引用调用方法时,实际执行的是派生类中的方法。 2. **向上转型(Upcasting)**:派生类对象可以通过基类引用进行引用,这是多态的基础。这种转型是自动且安全的,无需显式转换。 3. **动态绑定...

    12.鸿蒙HarmonyOS App(JAVA) page的隐式跳转demo.rar

    鸿蒙HarmonyOS App(JAVA) page的隐式跳转demo.rar" 涉及的是华为推出的开源操作系统鸿蒙HarmonyOS中,关于Java开发App时页面的隐式跳转实践。在鸿蒙系统中,页面跳转是应用交互的重要组成部分,而隐式跳转则是一种...

    EL表达式 隐式对象

    除了访问属性之外,EL还可以调用 Java 类中的公共静态方法。为了实现这一点,需要在 TLD 文件中声明方法对应的 `<function>` 元素,并指定方法的全限定名、方法签名等信息。例如: ```xml ``` 在 JSP 页面中使用时...

    JAVA个人学习笔记

    类型转换是JAVA中的一个重要概念,包括隐式转换和显式转换。隐式转换是JAVA自动完成的,例如从小类型到大类型的转换。显式转换需要使用强制类型转换符,例如(byte)等。 精度问题 浮点数的运算可能会出现精度问题...

    Android中使用隐式方式打开一个新的Activity

    当需要在不同Activity之间跳转时,Android提供了两种Intent类型:显式Intent和隐式Intent。本篇将深入探讨如何使用隐式Intent在Android中打开一个新的Activity。 **隐式Intent** 的主要特点是不直接指定目标...

    Java 接口与继承

    `this`和`super`常常用于解决成员变量的隐藏和方法的覆盖问题,尤其是在构造方法中调用其他构造方法或父类的构造方法时。 总的来说,继承和接口是Java中实现代码复用、模块化和扩展性的核心工具。通过合理利用这些...

    Java软件开发实战 Java基础与案例开发详解 5-6 方法的定义 共24页.pdf

    1. **隐式无参构造方法**:如果类中没有显式定义任何构造方法,那么Java会自动为这个类添加一个默认的无参构造方法。 2. **显式无参构造方法**:开发者手动定义的不带参数的构造方法。 3. **显式有参构造方法**:带...

Global site tag (gtag.js) - Google Analytics