我们这里有一个 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 调用是构造方法之间的相互调用,而并不是指当前对象。
分享到:
相关推荐
**显式启动与隐式启动的对比** - **可控性**:显式启动更直接,控制性强,只启动指定的Activity;而隐式启动可能有多个Activity匹配,需要用户选择或系统决定。 - **灵活性**:隐式启动更灵活,可以实现跨应用的...
显式参数,例如在`public void add(int b)`中的`int b`,是我们在调用方法时需要提供值的变量。在方法内部,`b`将被用来执行特定的操作,如在给定的例子中,`b = a + b;`这个表达式中的`b`就是显式参数。在调用方法...
显式Intent通过指定目标组件进行直接调用,而隐式Intent则依赖于Intent Filter的匹配来寻找合适的响应者。熟练掌握这两种Intent以及Intent Filter的使用,对于开发高效且可扩展的Android应用至关重要。通过学习和...
启动Activity时,通过`startActivityForResult()`,并在目标Activity完成时调用`setResult()`,最后在原始Activity中重写`onActivityResult()`来接收结果。 ```java Intent intent = new Intent(this, ...
2. 如果父类没有无参数的构造函数,或者我们希望在子类构造时传递特定参数给父类,可以在子类的构造函数中使用`super()`关键字显式调用父类的构造函数。这里的`super()`后面可以跟随一个参数列表,与父类构造函数的...
所以此时必须要保证父类中有无参构造方法,如果父类中的显示定义了带参数的构造方法时,就必须要显示定义无参数的构造方法,以确保父类中无参构造方法存在,否则就会出现编译错误。 三、通过 super 调用父类的构造...
在Java中,当子类继承父类时,子类的构造方法会隐式或显式地调用父类的构造方法。如果子类的构造方法没有明确调用父类的构造方法,那么Java会默认调用父类的无参构造方法。但如果父类中没有无参构造方法,或者需要在...
- **定义**:当子类中的方法与父类中的方法具有相同的方法名、参数列表和返回类型时,称子类方法重写了父类的方法。 - **规则**: - 方法名、参数列表和返回类型必须完全相同。 - 子类方法的访问级别不能小于父类...
在Android开发中,有时我们需要实现一个应用程序(APK)调用另一个应用程序并传递参数的功能。这通常是通过Intent机制来完成的,Intent是Android系统中用于启动活动(Activity)、服务(Service)或者其他组件的一种...
- 调用带有可变参数的方法时,我们可以像传递普通参数一样直接列出这些参数,例如`sumUp(1, 3, 5, 7)`。 - 编译器会将这种调用方式隐式转换为数组形式,如`sumUp(new int[]{1, 3, 5, 7})`。 - 可以传递零个参数,...
此外,服务生命周期中的`onStartCommand()`和`onCreate()`方法是服务启动时调用的重要方法,开发者需要在此处进行初始化工作和处理启动请求。 在`TestService1`这个例子中,我们可以看到具体的实现细节,包括服务的...
当父类既有无参数的构造方法,也有带参数的构造方法时,子类如果没有显式调用`super`,则默认会自动调用父类的无参数构造方法。这是因为如果子类没有指定要调用哪个父类构造方法,编译器会选择最安全、最通用的选择...
当在方法中需要调用本类的其他方法时,也可以使用this关键字。这种方式在方法的内部比较常见,比如在类A的print方法中,通过this.print()调用了本类的另一个print方法。这样的调用可以按照方法的重载规则找到合适的...
这使得通过基类引用调用方法时,实际执行的是派生类中的方法。 2. **向上转型(Upcasting)**:派生类对象可以通过基类引用进行引用,这是多态的基础。这种转型是自动且安全的,无需显式转换。 3. **动态绑定...
鸿蒙HarmonyOS App(JAVA) page的隐式跳转demo.rar" 涉及的是华为推出的开源操作系统鸿蒙HarmonyOS中,关于Java开发App时页面的隐式跳转实践。在鸿蒙系统中,页面跳转是应用交互的重要组成部分,而隐式跳转则是一种...
除了访问属性之外,EL还可以调用 Java 类中的公共静态方法。为了实现这一点,需要在 TLD 文件中声明方法对应的 `<function>` 元素,并指定方法的全限定名、方法签名等信息。例如: ```xml ``` 在 JSP 页面中使用时...
类型转换是JAVA中的一个重要概念,包括隐式转换和显式转换。隐式转换是JAVA自动完成的,例如从小类型到大类型的转换。显式转换需要使用强制类型转换符,例如(byte)等。 精度问题 浮点数的运算可能会出现精度问题...
当需要在不同Activity之间跳转时,Android提供了两种Intent类型:显式Intent和隐式Intent。本篇将深入探讨如何使用隐式Intent在Android中打开一个新的Activity。 **隐式Intent** 的主要特点是不直接指定目标...
`this`和`super`常常用于解决成员变量的隐藏和方法的覆盖问题,尤其是在构造方法中调用其他构造方法或父类的构造方法时。 总的来说,继承和接口是Java中实现代码复用、模块化和扩展性的核心工具。通过合理利用这些...
1. **隐式无参构造方法**:如果类中没有显式定义任何构造方法,那么Java会自动为这个类添加一个默认的无参构造方法。 2. **显式无参构造方法**:开发者手动定义的不带参数的构造方法。 3. **显式有参构造方法**:带...