//下面是我整理的关于构造函数和代码块的笔记,希望可以帮到你
Constructor(构造函数,也称构造方法,构造器)
构造函数是肯定会存在的
1.如果你自己没有写,系统会默认帮你加一个无参数的构造函数,这个构造函数不执行任何操作
2.如果你自己写过,就会自动替换掉默认的空参数构造函数,这时候执行什么操作由你决定
注:由于接口不允许被实例化,所以接口中没有构造方法。
构造函数的存在有什么作用
JVM在创建对象的时候会同时调用与这个对象相对应的构造函数来完成对此对象的初始化工作。
当一个类的实例对象刚产生时,这个类的构造方法就会被自动调用,我们可以在这个方法中加入要完成初始化工作的代码。
这就好像我们规定每辆“车”要出厂都必须安车轱辘,我们就可以在“车”的构造方法中加入安装“轮胎”的程序代码,
于是每辆“车”一出厂前就会自动完成“安轮胎”,程序就不必再在每个车要出厂时一个一个地告诉它们要“安轮胎”了。
构造函数如何使用:
1.构造函数必须与类同名(如果一个源文件中有多个类,那么构造函数必须与公共类同名)
2.每个类可以有一个以上的构造函数
3.构造函数分为两种:无参数构造方法和有参数构造方法
4.构造函数可以重载,以参数的个数,类型。但是,不区分参数的排列顺序。
(当同一个类存在多个构造方法时,编译器会自动按照初始化时最后面括号的参数个数以及参数类型来自动一一对应,
完成构造函数的调用。)
和一般的方法重载一样,重载的构造方法具有不同个数或不同类型的参数,
编译器就可以根据这一点判断出用new 关键字产生对象时,该调用哪个构造方法了。
产生对象的格式是:new 类名(参数列表) ;
重载构造方法可以完成不同初始化的操作, 如:Person p=new Person (zhangsan, 22); 语句,
会做这样几件事:创建指定类的新实例对象,在堆内存中为实例对象开辟内存空间,
并调用指定类的构造方法,最后将实例对象的首地址赋值给引用变量p。
5.构造函数没有返回值,也不能定义为void
6.构造函数总是伴随着new 新对象操作一起调用
7.不能被static、final、synchronized、abstract和native修饰。
8.使用"super调用父类构造函数的语句"必须是子类构造函数的"第一条语句"。
9.构造函数不可以被子类重写,因为子类无法定义与基类具有相同型构的构造函数。
构造函数和代码块
代码块就是函数中的"{}"
普通代码块:就是一个普通方法中的"{}",只有在被调用时才会执行
静态代码块:仅使用关键字static声明{},将某一段代码声明为静态的,
其作用是给类进行初始化(一般针对类的静态属性进行),相对构造函数少用。
静态代码块只能定义在类里面,它独立于任何方法,不能定义在方法里面。
静态代码块会在类被加载时自动执行,而无论加载者是JVM还是其他的类。
一个类中允许定义多个静态代码块,执行的顺序根据定义的顺序进行。
静态代码块里面的变量都是局部变量,只在本块内有效。
静态代码块优先于main方法执行。
静态代码块只能访问类的静态成员,而不允许访问实例成员,
之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,
而静态代码块里的方法体在执行的时候还不一定存在对象。
构造代码块:直接在类中定义的"{}",简称三无人员,其作用是给对象进行初始化的,
而且是对所有对象的共性部分进行初始化,即每个对象创建时都会执行构造代码块。
构造代码块是给所有不同对象的共性进行统一初始化,构造函数是给对应的对象进行初始化
同一类中的不同构造代码块之间也按照在类中出现的先后顺序执行
执行顺序:静态代码块——构造代码块——构造函数
注:静态代码块与构造代码块的异同点
相同点:都是在JVM加载类时在构造方法之前执行,在类中都可以定义多个,
不同点:静态代码块只会在构造该类的第一个对象时执行,之后再构造该类对象则不再执行。
构造代码块每new一个新对象就会执行一次。 |