`
bornlone
  • 浏览: 29432 次
  • 性别: 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了,呵呵

相关推荐

    Java面向对象总结

    调用子类的构造方法时,会先调用父类的构造方法。默认隐式调用父类无参数的构造方法 4.如果要在子类的构造方法中显式调用父类的构造方法。使用super(参数列表),但是这行代码必须是在 子类的构造方法的第一行。

    java编程基础笔记

    java编程基础笔记java编程基础笔记java编程基础笔记java编程基础笔记

    SampleIntent:Android上的隐式和显式意图实现的示例项目

    在示例中,该程序将隐式和显式显示Intent的实现。 参考: : 专业的Android 4应用程序开发页面166-183 有关此样本的理论,请阅读示例代码实验室程序在在关注印度尼西亚语CodeLab Android。 希望有用。

    毕业设计-->物流管理系统的设计与实现(java).zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    基于Vue的电影在线预订与管理系统-后台java代码(ssm)(毕业设计).zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计 健身房管理系统 java后端.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    基于java的校园二手交易系统毕业设计.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计管理系统java服务端,采用spring mvc.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    基于java web技术的毕业设计商城项目。.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计,关于新浪微博API的Java编程..zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    本科毕业设计项目-Java电影推荐系统-管理后台.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计基于Cesium时空数据可视化后台Java SSM框架.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    使用Spring Boot的小型诊所信息系统,毕业设计Java版.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计---蚁群算法实现vrp问题java版本.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计---基于java的软件资源库的实现(后端).zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    基于Java Web的智能二维码门禁管理系统(本科毕业论文+毕业设计).zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    计算机毕业设计,课程设计,基于java电影院订票选座系统,带论文.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计项目,基于Java语言,Tomcat9.0,MySQL8.0考研机构信息管理系统.zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

    毕业设计——流媒体视频直播服务器(Java + MySQL + FFmpeg + RTSP + RTP).zip

    Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。 可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的...

Global site tag (gtag.js) - Google Analytics