JAVA笔记7--构造方法

构造方法又称为构造函数,在调用时候必须配合关键字new,是不能被单独调用的。

 修饰符 方法名(参数列表){...}
 例如:
public Truck(){
   //初始代码;
}

注意:方法名与类名相同;构造方法不能有返回值。构造方法只能在对象实例化的时候被调用。构造器本身是一个比较特殊的方法,方法名就是类名,没有返回值(与void还是有区别的),构造器是类创建对象的唯一途径。

若没有显示的给一个类定义构造方法,则编译时则会给该类添加一个默认的构造方法。这时的构造方法是无参的。一个类中可以有多个构造方法(重载),当有指定的构造方法,无论是有参还是无参,系统都不会自动添加无参的构造方法了。

有参的构造方法:通过参数传递来为成员变量初始化。

public Game(String brand,String color,int maxSpeed){
		brand=brand;
		color=color;
		maxSpeed=maxSpeed;

	}

按照上述代码来写有参的构造函数,实例化输出时,结果是有问题的,如下:

Game game=new Game("奔驰","黑色",300);
		game.toString();
//输出结果
Game{brand='null', color='null', maxSpeed=0}

原因:

代码的逻辑遵循了一种就近原则--赋值过程中优先去找同一作用范围内的成员进行赋值操作。只有找不到的情况下才会扩大作用范围,去类里面找。通俗来讲,上面的只是将参数的值重新覆盖了一遍,并没有按照我们想要的那样给成员变量进行赋值。

两种修改方法--1,修改参数名(避免和成员变量同名)2,用this.属性名=参数名。(后续再细说this指针)

构造方法重载

public class Game {
	String brand;
	String color;
	int maxSpeed;
	public Game(String a){}
	public Game(String a,String b){}
	public Game(String a,String b,int c){}
}

构造器总结

  1. 在栈内存中,会存储对象名, 在没有执行构造器创建对象并赋值时,此时对象名对应的值应为null
  2. 通过new关键字调用类的构造器在堆内存中分配了一块对象区域;
  3. 通过赋值运算符 = ,将堆内存中的对象地址赋给栈内存中的变量名;
  4. 例如再次给对象的属性赋值: 通过栈内存中的地址定位到对象在堆内存中的地址,找到相应的成员变量,进行一个赋值操作

this关键字

Java中使用this关键字,指向调用该方法的当前对象。根据this所在的位置,可以分两种

  1. 出现在构造器中:引用该构造器正在初始化的对象
  2. 出现在普通方法中:正在调用该方法的对象(成员方法、成员变量)

this用在类的定义中,获取当前对象的属性或者调用当前对象的方法。

public Game(String brand,String color,int maxSpeed){
		this.brand=brand;//this代表对象,只有对象才能调用成员属性和方法
		this.color=color;
		this.maxSpeed=maxSpeed;

	}

this是可以省略的。

  1. Java允许对象的一个成员直接调用另一个成员,这实际上是省略了this;
  2. 当成员的名称存在冲突,会导致语法产生歧义时,就不能省略this关键字。

构造方法的调用

构造方法可以出现重载的情况。

public Cat() {}

public Cat(String name) {
    this.name = name;
}

public Cat(String name,int age) {
    this(name);
    this.age = age;
}

如上我们看出可以通过this()调用重载的构造器
说明

  1. 构造方法的调用,只能在构造方法之间来完成
  2. 构造方法内可以使用this()来调用构造方法(有参、无参均可,只要是声明过的),且必须放在方法体内第一行。而且不允许出现两条this()语句。
  3. 构造方法在类内,普通方法不能调用构造方法
  4. 构造方法在类外进行调用时,只能配合new关键字

类中的普通方法之间也可以相互调用,如:

public void run(){
    Cat(); //出错,普通方法不能调用构造方法
    eat();//可以调用普通方法
    System.out.println("aaa");
}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值