在基础学习中,我常常会概念模糊,特作此学习笔记,进行一下对比,思路自然就清晰了。
构造函数
构造函数定义:构造函数是与类名相同,但没有返回值的函数。
例子:
class Person { //构造函数 public Person() {} } |
作用:给对象初始化的。
构造函数的使用方法:
构造函数的作用是对对象进行初始化,当一个类中没有定义构造函数时,系统默认为该类提供默认构造函数(参数为空)。
在创建对象时,调用对应的构造函数。当用户自定义构造函数时,系统的就不提供默认构造函数。
创建一个对象时,只调用一次构造函数。
特点:1.函数名与类名相同
2.不用定义返回值类型
3.不可以写return语句
注意:1.默认的构造函数的特点(当一个类中没有定义构造函数时,系统默认该类提供的构造函数,参数为空)。
当自定义构造函数时,系统的就不提供默认构造函数。创建一个对象时,只调用一次构造函数。
2.多个构造函数是以重载的形式存在的。
构造代码块
作用:
1. 构造代码快的作用是对对象进行初始化。
2. 先于构造函数,即在调用构造函数之前执行构造代码快。
构造代码块和构造函数的区别:
(1)构造代码快是给所有的对象进行统一初始化。
(2)构造函数是给对应的一个对象进行初始化。
例:
class Person {
//构造代码块 {
|
静态代码块
静态代码块的格式:
//静态代码块格式
static{
//静态代码块中的语句
}
特点:随着类的加载而执行,只执行一次,并优先于主函数执行。
作用:给类进行初始化。
静态代码快和构造代码快的区别:
1.static 代码块优先于构造代码块执行,构造代码块优先于构造函数执行。
2.static 代码块是给类加载而执行的,而构造代码块是随着对象的创建而执行的
3.static 代码块只执行一次,而构造代码块是创建几个对象就执行几次。
4.static 代码块中不能访问非static的成员变量,而构造代码块可以访问。
class staticDemo { //构造代码块 { System.out.println(“Constructor”); } //静态代码块 Static { System.out.println("StaticDemo"); } } public class StaticCode { //静态代码块 static { System.out.println(“StaticCode1”); } public static void main(String[] args) { new StaticDemo(); new StaticDemo();//虽然创建了两个StaticDemo,但只输出一次“StaticDemo”,因为静态代码块只能加再一次。 } //静态代码块 static{ System.out.println(“StaticCode2”); } } 运行结果: StaticCode1 StaticCode2 StaticDemo Constructor Constructor |
过程解析:1.StaticCode类进入内存:这时最先执行的是是StaticCode类中的静态代码块。因为它随着类的加载而执行,只执行一次,并优先于主函数执行。
所以输出为: StaticCode1StaticCode2
2.执行main函数,对创建的StaticDemo的对象加载,并同时执行该类的静态代码块。静态代码块只执行一次。
输出为:StaticDemoConstructor
Constructor
注意:当静态代码块所在类的的对象为空时,不执行该类的任何操作,所有执行static代码快是没有任何意义的。
静态代码块优先于构造代码块执行。