Java中对构造函数的理解
来源:互联网 发布:女人被强奸 知乎 编辑:程序博客网 时间:2024/06/05 11:26
1使用构造器需要注意的事项:(构造器的作用是:对对象进行初始化,它能够把定义对象时的参数传给对象的域。)
当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。(备注:可以通过javap命令验证)1:构造器必须与类同名,(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2:每个类可以有一个以上的构造器
3:构造器可以有0个,1个,或者多个参数
4:构造器没有返回值,也不能定义为void,在方法名前面不声明方法类型。
5:构造器总是伴随着new操作一起调用
6:使用super调用父类构造器的语句必须是子类构造器的第一条语句
如果子类构造器没有显试的调用父类的构造器,则将自动调用父类的默认(没有参数)的构造器,
如果父类没有不带参数的构造器,并且在子类的构造器中又没有显试的调用父类的构造器,则java编译器将报告错误。
代码:
public class A{
public A(){
System.out.println("调用了无参的构造函数");
}
public A(String mess){
System.out.println("调用了有参的构造函数\n"+
"参数内容为:"+mess);
}
}
public class Test{
public static void main(String [] args){
A a_1=new A();//调用无参的构造函数
A a_2=new A("Hello");//调用有参的构造函数
}
}
pub
2构造函数与普通函数的区别:
1:一般函数是用于定义对象应该具备的功能。而构造函数定义的是,对象在调用功能之前,在建立之时,应该具备的一些内容,也就是对象初始化内容。2:构造函数是在对象建立时由jvm调用,给对象初始化,一般函数是对象建立后当对象调用该功能时才会执行。
3:普通函数可以使用对象多次调用,构造函数在创建对象是调用。
4:构造函数的函数名要与类名一样,而普通函数的函数名只要符合标识符的命名规则即可。
5:构造函数没有返回值类型。
3构造代码块:(构造代码块用一对“{}”表示,代码块位置没有具体的要求,但必须与类的成员同等级别,在括号的区域内,可以对所有该类的对象进行初始化,也就是说该类对象创建时都会执行到该代码块,并且其优先于构造函数执行。)
1:构造代码块的作用:给所有的对象进行统一的初始化。对象一建立就运行并且优先于构造函数。
2:与构造函数区别:
1:构造代码块是给所有对象进行统一初始化,构造函数是给对应的对象进行初始化;
2:构造代码块的作用是将所有构造方法中公共的信息进行抽取。
- class Perosn{
- private int id;
- private String name;
- private int age;
- {
- cry();// 每个Person对象创建出来都会执行这里的代码
- }
- public Perosn(){
- cry();
- }
- public Perosn(int id, String name, int age) {
- this.id = id;
- this.name = name;
- this.age = age;
- }
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void cry(){
- System.out.println("哇哇哇....");
- }
- }
4java构造函数的调用问题//不能继承
1:子类只调用父类默认构造函数,即无形参构造函数。如果父类没有默认构造函数(如果父类自定义了构造函数,这时默认的构造函数就没有了),那子类不能从父类调用默认构造函数。2:子类从父类处调用父类默认构造函数,不能成为子类的默认构造函数。
3:在创建对象是,先调用父类默认构造函数对象进行初始化,然后调用子类自身自己定义的构造函数。
4:如果子类想调用父类的非默认构造函数,则必须使用super来实现。
5:子类的构造函数中,super()语句代表调用了父类的构造函数;this()语句代表调用了子类自身的构造函数。
需要注意的是,如果这两条语句显式写出来必须放在构造方法的第一行,而且这两条语句不能共存,一个构造函数中的第一行要么是this()要么是super()。
为什么在第一行?
因为需要首先进行初始化。
为什么不能共存?
因为this()代表的本类的其他构造函数,也会去调用super(),出现了this()就没有必要再出现super()了,重复调用没有意义。
换言之,子类中至少有一个构造函数的开头为super(),当然可以隐式存在;也就是说至少有一个构造函数的开头不是this()。
5java构造函数的执行过程:
类初始化时构造函数调用顺序:1:初始化对象的存储空间为零活null。
2:调用父类构造函数。
3:按顺序分别调用类成员变量和实例成员变量的初始化表达式。
class Dollar {
Money m = new Money();
Rmb r = new Rmb();
public Dollar() {
System.out.println("Dollar is construct!");
}
public static void main(String[] args) {
new Dollar();
}
}
class Money {
public Money() {
System.out.println("Money is construct!");
}
}
class Rmb {
public Rmb() {
System.out.println("RMB is construct!");
}
}
输出结果:
Money is construct
RMB is construct
Dollar is construct!
阅读全文
0 0
- Java中对构造函数的理解
- java菜鸟对构造函数的理解
- 对构造函数的理解
- 关于对构造函数和拷贝构造函数的理解
- 对C++默认构造函数的理解
- java中关于构造器构造函数构造方法重载方法的理解
- C++中关于构造函数调用次序的一道经典例题及对虚函数构造顺序的理解
- 【个人理解向】对构造函数的理解
- 对通过拷贝构造函数对 对象初始化的理解
- 个人对构造函数理解
- 理解JAVA构造函数
- 对java中equals和hashCode函数的一些理解
- 对java中equals和hashCode函数的一些理解
- 对java中equals和hashCode函数的一些理解
- 对java中equals和hashCode函数的一些理解
- C++中构造函数的理解
- Java构造函数的一些理解
- 我对wxwidgets的体系结构和构造函数的理解
- 时间序列常用方法
- vue一知半解的总结
- PAT甲级 1126. Eulerian Path (25)
- 判断程序错误自动写入文件夹0703
- 多参与开源项目,这样你才会获取更多自信
- Java中对构造函数的理解
- 入门经典_Chap06_例题[三]:图的搜索 Floodfill 拓扑排序 欧拉回路
- crontab定时任务
- 自定义折扣券锯齿型布局
- 2.1 Git Basics
- ARM与X86 CPU架构对比区别
- CEF完整嵌入DUI窗体(一) --Cef3简介
- TCPIP函数调用大致流程
- 压缩、解压缩.zip,.rar,.7z格式java工具类