Java中对象初始化
系统在生成对象时,会为对象分配内存空间,并调用构造方法对实例变量进行初始化。当对象不会使用时,系统会自动调用垃圾回收程序回收其占用的内存。
一.构造方法
构造方法名与类名相同,不定义返回类型,通常被声明为public,可以有任意多个参数,不能在程序中显示的调用。当要生成一个对象时,会自动调用该类的构造方法为对象进行初始化,若未声明构造方法,编译器便会自动使用默认的构造方法。
默认构造方法:
1.无参数,方法体为空
2.使用默认的构造方法初始化对象时,如果在类中没有给实例对象赋初值,则对象的属性值为0或空。
public class BankAccount{
String ownerName;
int accountNumber;
float balance;
}
public class BankTester{
public static void main(String[] args){
BankAccount myAccount = new BankAccount();
System.out.println("ownerName = " + myAccount.ownerName);
System.out.println("accountNumber =" + myAccount.accountNumber);
System.out.println("balance = " + myAccount.balance);
}
}
//运行结果
ownerName = null
accountNumber = 0
balance = 0.0
自定义构造方法
在生成对象时给构造方法传送初始值,为对象进行初始化。也可以显示声明无参数的构造方法,方法体中可以定义默认初始化方式。
//为BankAccount声明一个有三个参数的构造方法
public BankAccount(String initName, int initAccountNumber, float initBalance){
ownerName = initName;
accountNumber = initAccountNumber;
balance = initBalance;
}
//假设一个新账号的初始余额为0,则可增加一个带有两个参数的构造方法
public BankAccount(String initName, int initAccountNumber){
ownerName = initName;
accountNumber = initAccountNumber;
balance = 0.0f;
}
//无参数的构造方法
public BankAccount(){
ownerName = "";
accountNumber = 99999;
balance = 0.0f;
}
二.方法重载与方法重写
1.方法重载
在一个类中可以允许有两个及以上的同名方法,但是必须要有独一无二的参数列表。在方法调用时时,可以通过参数列表的不同来辨别调用哪一个方法。
方法调用的规则为:
- 被重载的方法必须与重载的方法参数列表中有所不同。
- 被重载的方法可以改变返回类型、访问修饰符、可以声明新的或更广的检查异常
- 方法能够在同一个类中或者在一个子类中被重载
//为BankAccount声明一个有三个参数的构造方法
public BankAccount(String initName, int initAccountNumber, float initBalance){
ownerName = initName;
accountNumber = initAccountNumber;
balance = initBalance;
}
//假设一个新账号的初始余额为0,则可增加一个带有两个参数的构造方法
public BankAccount(String initName, int initAccountNumber){
ownerName = initName;
accountNumber = initAccountNumber;
balance = 0.0f;
}
//无参数的构造方法
public BankAccount(){
ownerName = "";
accountNumber = 99999;
balance = 0.0f;
}
声明构造方法时使用this方法,可以在一个构造方法中调用另外的构造方法,通常是参数较少的构造方法调用参数较多的构造方法。
public BankAccount(){
this("",99999,0.0f);
}
public BankAccount(String initName, int initAccountNumber){
this(initName,initAccountNumber,0.0f);
}
public BankAccount(String initName, init initAccountNumber,
float initBalance){
ownerName = initName;
accountNumber = initAccountNumber;
balance = initBalance;
}
2.方法重写
方法重写是建立在继承的基础上的,重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
方法重写的规则为:
- 父类方法中声明为fianl的不可以被重写,static不可以被重写,但能被再次声明
- 重写方法的参数列表必须与其所继承父类的方法参数列表一定要相同
- 返回类型可以与被重写的方法的返回类型不一样,但必须是父类返回值的派生类
- 访问权限不能比父类中被重写方法的使用权限更低
- 子类与父类在同一个包中,子类可以重写父类中除private和final的所有方法;否则只能重写父类中声明为public和protected的非final方法
- 构造方法不能被重写
class Account{
public void add(String Name,int Id){
}
}
class BankAccount extends Account{
public void add(String Name,int Id){
System.out.println("The accountname is" + Name + "and Id is " + Id);
}
}
当需要在子类中调用父类被重写的方法时,需要使用super关键字。
public void onResume(){
super.onResume();
}
浙公网安备 33010602011771号