构造方法是一种特殊的方法,专门用于构造/实例化对象。
构造方法根据是否有参数分为无参构造方法和有参构造方法。
无参构造方法就是构造方法没有任何参数。无参构造方法在创建(new class类名())时调用;无参构造方法一般用于给属性赋默认值。语法:
[修饰符] 类名(){
.......
}
例如:
1 public class Dog{ 2 3 String name; 4 int health; 5 int love; 6 String strain; 7 8 public Dog(){ 9 System.out.println("构造方法"); 10 health = 100; 11 love = 0; 12 } 13 … 14 }
如果开发中没有定义无参构造方法,jvm(虚拟机)默认给类分配一个无参构造方法。
当构造/实例化对象时,可以向方法中传递参数,这样子构造的方法叫有参构造方法。
语法:
[修饰符] 类名(Type arg1,Type arg2,…){ // 初始化代码 }
注:有参构造方法与无参构造方法是方法重载。
如果一个类中提供了有参构造的方法,则JVM(虚拟机)中就不再给该类分配无参构造。
例如:
public class Dog{ String name; int health; int love; String strain; public Dog(String _name,int _health,int _love,String _strain){ name = _name; health = _health; love = _love; strain = _strain; }
1 public class TestCar{ 2 public static void main(String[] args){ 3 Dog dog = new Dog(); //调用无参构造方法 4 dog.name = name; 5 dog.health = 100; 6 dog.love = 0; 7 dog.strain = strain; 8 9 10 } 11 }
运行结果出错:
注意:在开发过程中,如果开发者提供了有参构造方法,一定要习惯性的提供无参构造。
对象初始化内存图
对象初始化内存图中的方法区位于栈和堆内存的上方,用于保存class和各种方法,对象初始化的过程中最先把class加载该区域,读取class文件中定义的属性和方法,根据定义的属性计算申请内存需要的字节数。
然后用 new在堆中申请内存并初始化内存。并在堆中生成This关键字,This中存放的是该对象本身的地址,也就说当调用This关键字时,还是指向对象本身。this可用于访问本对象属性,同时解决局部变量和成员变量同名的问题(成员变量可以用this.成员变量名代替)。
例如
1 public Dog2(String name,int health,int love,String strain){ 2 System.out.println("this:"+this); 3 this.name = name; //this.name代表的就是成员变量(成员属性),name代表的是你输入名。 4 this.health = health; 5 this.love = love; 6 this.strain = strain; 7 }
通过打印this中的引用,可以看出对象dog和this指向同一内存。
一般而言,dog用于类的外部,this用于类的内部。因为类的内部根本不知道dog变量名的存在。
原文:https://www.cnblogs.com/ruckly/p/10743432.html