[java学习笔记]java语言核心----面向对象之构造函数

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

1.构造函数概念特点:函数名与类名相同不用定义返回值类型没有具体的返回值作用:               给对象进行初始化

注意:默认构造函数多个构造函数是以重载出现的一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数如果在类中定义了构造函数,那么类中的默认构造函数就没有了构造函数在创建对象时调用构造函数也有默认的return语句(省略不写)函数执行到return语句后,栈中该函数的方法区就会出栈如:

class Person{PRivateintage;

Person(){

age= 10;

}

}

一般函数和构造函数的区别构造函数:对象创建时,就会调用对应的构造函数,对对象进行初始化

一般函数:对象创建后,需要函数功能时才调用

一般函数不能调用构造函数,构造函数可以调用一般函数

classPerson{voidPerson(){

}

}

此方法为一般方法

2.构造函数的重载classPerson{privateString name;privateintage;

Person(){

age= 1;

name= "xiaoming";

}

Person(inta, String n){

age=a;

name=n;

}

public void speak(){

System.out.println(name+”:”+age);

}

}

 

在newPerson对象时,可以根据不同的构造函数,选择不同的创建方式。

Person p1 =newPerson();//使用Person类的无参构造函数来创建对象Person p2 =newPerson(10,”zhangsan”);//使用Person类有两个参数的构造函数来创建对象

p1.speak();

p2.speak();

运行结果为:

xiaoming:1

zhangsan:10

 

3.构造函数内存图解Person p2 =newPerson(10,”zhangsan”);

p2.speak();

 

这个代码在内存中的执行过程:

说明:

1.执行main方法,在栈内存中开辟一个main函数的方法区,创建一个Person类型变量p2

2.在堆内存中创建一个Person的实例,并初始化值,和分配地址值

3.在栈内存中开辟Person构造函数的方法区,并执行构造函数中的代码,即给堆内存中的Person实例的name和age属性赋值

4.Person方法区出栈

5.栈中创建speak的方法区,执行相应的代码

6.speak方法区出栈

4.构造函数的相互调用构造函数可以调用构造函数,如:

classPerson{privateString name;privateintage;

Person(String n){

name=n;

}

Person(String n,inta){this(n);

age=a;

}publicvoidspeak(){

System.out.println(name+”:”+age);

}

}

 

注意:

对this的调用必须是构造函数中的第一个语句不允许两个构造函数互相调用,即不能Person(String n)中调用this(“zhangsan”,10),再在Person(String n, int a)调用this(“xiaoming”),会导致栈内存溢出,因为它们在不断的互相调用,不断进栈,却没有出栈错误!!!栈内存溢出:

classPerson{privateString name;privateintage;

Person(String n){this("zhangsan",10)

name=n;

}

Person(String n,inta){this("lisi");

age=a;

}

}

this详解见   [java学习笔记]java语言核心----this关键字&super关键字

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航