黑马程序员_java构造函数,黑马_java构造函数
黑马程序员_java构造函数,黑马_java构造函数
-------- android培训、java培训、期待与您交流! ----------
------------------------------------------------------------------------------------------------------------------
关于java构造函数的一些探讨
1. 在java中声明对象后,java并不对对象分配内存,不像C++声明就要分配内存。
2. 在java中,只有在创建对象后才给对象分配内存,并调用默认构造函数初始化对象。
Example1:
class A
{
int x;
int y;
A()
{
System.out.println("x="+x+"\ty="+y);
}
}
public class gouzao {
public static void main(String [] args)
{
A a=new A();//调用构造函数来初始化类的实例。
}
}
①. A()这个既无返回值,又无参数的函数就是构造函数,那么在主函数中创建对象a后,将会调用默认构造函数,程序中显示的给出默认构造函数,给对象初始化。并且初始值x=0,y=0。
3为了进一步分析构造函数,在看下面一段程序,以便和Example1做对比。
Example2:
class A
{
int x;
int y;
}
public class gouzao {
public static void main(String [] args)
{
A a=new A();
System.out.print("x="+a.x+"\ty="+a.y);
}
}
①.执行这个程序后,你会发现x和y都获得了初值,并且x,y都为0.那么我们进一步验证了,在java中创建对象后会调用构造函数来初始化。
②.对于x,y权限问题也得做一个说明,在java中凡是没声明的类成员都为友好型(friendly)访问权限。友好类型只允许同一包中的相关类的方法访问,不让类的子类和其他类的方法访问。在同一个文件中的源程序属于同一个包。
4.再进一步看一下在对象传参的情况下,对象还调不调用默认构造函数。
Example3:
class A
{
intx;
inty;
A()
{
System.out.println("china.");
}
A(inta,int b)
{
x=a;
y=b;
System.out.println("chinaVs Japanese!");
}
}
public class gouzao {
publicstatic void main(String [] args)
{
Aa=new A(2,3);
System.out.print("x="+a.x+"\ty="+a.y);
}
}
Example3:
通过Example3的编译可以看到当对象有参数后不再调用默认构造函数,这一点要注意区分。
构造函数会对相应的对象进行匹配,自动进行调用。
5.构造代码块
Example4:
class C
{
privateint x,y;
C()
{
System.out.println("ConstructorC!");
}
C(inta,int b)
{
x=a;
y=b;
System.out.println("x="+x+"\ty="+y);
}
{
System.out.println("Publicmethod!");
}
}
public class gouzao
{
publicstatic void main(String[] args)
{
Cb=new C(2,3);
Ca=new C();
}
}
Example4:运行结果:
Public method!
x=2 y=3
Public method!
Constructor C!
通过构造代码块可以看出:
①.对象一创建就运行,而且优先于构造函数执行。
②.而且构造函数是给所有的对象统一进行初始化,即每创建一个对象便首先调用一次构造代码块。
6.派生类的构造函数。
Example5:
class A
{
A()
{
System.out.println("ConstructorA.......");
}
}
class B extends A
{
B()
{
System.out.println("ConstructorB........");
}
}
class C extends B
{
C()
{
System.out.println("ConstructorC........");
}
}
public class gouzao
{
publicstatic void main(String[] args)
{
Cb=new C();
}
}
Example5:执行结果:
Constructor A.......
Constructor B........
Constructor C........
通过这个程序可以看出:
①.Java中继承者含有基类的所有属性和方法。
②.当创建子类对象时,由于子类拥有超类所有的属性和方法,而必须要给对象分配保存这些属性的内存,这就必须要调用构造函数来初始化这些内存。
最后做一个总结:
①. 在java中声明对象并不分配内存,A a,声明了一个对象a,但是java中不会分配内存。
②. 创建对象后,即new 一个对象,java首先给对象分配足以保存相关数据的内存。
③. 分配完内存后就会自动调用默认构造函数来初始化。有构造代码块,先调用构造代码块。
④. 有参数的调用有参构造函数。
--------------------------------------------------------------------------------------------------------------------------
------- android培训、java培训、期待与您交流! ----------
详情请查看:http://edu.csdn.net/heima
相关文章
- 暂无相关文章
用户点评