1、实例化对象
1、在类中如果成员属性没有赋值,它是有默认值的。比如下面的代码
package com.imooc;
public class Cat {
//成员属性
String name; //默认值为null
int month; //默认值为0
double weight; //默认值是0.0
String species; //默认值为null
}
2、单一职责原则:一个类中有且只有一个引起功能变化的原因。
2、new关键字
1、对象的实例化可以分为两个过程:声明对象和实例化对象。
2、就比如说Cat one=new Cat();这段代码前面Cat one是在声明对象,后面new Cat是在实例化对象,但是这两个步骤是在内存中不同的地方实现的,声明对象是在栈中开辟一个名字为one空间,在没有实例化的时候,one里面的内容为null。实例化对象是在堆中分配了一段内存。如下图所示:
3、当我们使用赋值符号将声明对象和实例化对象一关联后,那么上图中堆的内存地址0x0001就放在了one中,这时one里的内容就不在是null,而是堆中的地址。可以很形象的把堆中的空间比作房子,堆中空间的地址就是钥匙,钥匙放在了栈中one的手里,那么one是不是想去堆里拿什么就很随意了。
4、所以这样看来new的作用就是在堆中开辟新的内存空间。那么假如代码是这样:
Cat two=one
那么就意味着我们one把钥匙给了two一份,所以两个对象在堆中使用的同一段内存,两个对象的修改都会对堆中的内容产生修改,简单的来说,就是堆中的一套房子的钥匙在栈中被两个对象所拥有。
3、构造方法
1、构造方法的方法名和类名一样。构造方法没有返回类型的。只有访问修饰符。可以有参数可以没有参数
2、构造方法只能在对象被实例化的时候调用。所以构造方法是new的好伙伴。
3、构造方法没有显示的指定,系统会自动添加无参的构造方法。
4、this关键字
1、this表示当前对象,比如说this.run();这个this代表的就是调用run的主体对象,谁在调用run,这个this就代表的谁。
5、构造方法的调用
1、构造方法是不能够直接被类内普通成员函数所调用的。
2、构造方法的调用只能在构造函数之间完成。
3、可以使用this()这样的代码去在带参构造函数中去使用无参构造。且这句话要放在带参构造的第一行。比如下面的代码
public Cat() {
System.out.println("no parameter constructor");
}
public Cat(String name) {
this(); //在有参构造函数中调用了无参构造函数
this.name=name;
System.out.println("parameter constructor");
};