JavaDay02
1.Java程序初始化的顺序
3个原则(优先级依此递减)
1)静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始多次
2)父类优先于子类进行初始化。
3)按照成员的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造函数)被调用之前先初始化。
2.不同代码的优先级:
1父类静态变量>2父类静态代码块>3子类静态变量>4子类静态代码块>5父类非静态变量>6父类非静态代码块>7父类构造函数>
8子类非静态变量>9子类静态代码块>10子类构造函数
3.Java的作用域有哪些
变量的三种类型:
1)成员变量:类的成员变量的作用范围与类的实例化对象的范围相同,当类被实例化式,成员变量就会在内存钟分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才会结束。
2)静态变量:static修饰的成员变量被称为静态变量或全局变量,与成员变量不同的是,静态变量不依赖于特定的实例,而是被所有实例共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配存储空间。因此,就可以通过类名和变量名来访问静态变量。
3)局部变量:局部变量的作用域与可见性为它所在的花括号内。
成员变量的4种作用域
作用域与可见性 | 当前类 | 同一package | 子类 | 其他package |
---|---|---|---|---|
1 | true | true | true | true |
2 | true | false | false | false |
3 | true | true | true | false |
4 | true | true | false | false |
一个java文件是否可以定义多个类
一个Java文件可以定义多个类,但是最多只能由一个类被public 修饰,并且这个类的类名与文件名必须相同,若这个文件中没有public的类,则文件名随便是一个类的名字即可。
4.什么是构造函数
构造函数是特殊的函数,用来在对象实例化时初始化对象的成员变量。
1)构造函数的必须与欸的名称相同,并且不能有返回值(返回值不能为void).
2)每个类可以有多个构造函数。当开发人员没有构造函数时,编译器在把源代码编译称字节码的过程中提供了一个没有参数默认的构造函数,但该构造函数不会执行任何代码。如果开发人员提供了构造函数,那么编译器就会再创建默认的构造函数了。
3)构造函数可以有0个,1个或者多个参数。
4)构造函数总是伴随着new操作一起被调用,且不能由程序的编写者直接调用,必须要由系统调用。构造函数在对象实例化时会被自动调用,且只运行一次;而普通方法是在程序执行到它时被调用,且可以被该对象调用多次。
5)构造函数的主要作用是完成对象的初始化工作。
6)构造函数不能被基础,因此,它不能被覆盖,但是构造函数能够被重载,可以使用不同的参数格式或参数类型来定义多个构造函数。
7)子类可以通过super关键字来显示地调用父类的构造函数,当父类没有提供无参的构造函数时,子类的构造函数中必须显示的调用父类的构造函数。如果父类提供了无参数的构造函数,此时子类的构造函数就可以不显示的调用父类的构造函数,在这种情况下编译器会默认调用父类提供的无参数的构造函数。当由父类时,在实例化对象时会先执行父类的构造函数,然后执行子类的构造函数。
8)当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参数的构造函数,给子类也生成一个默认的无参数的构造函数。此外,默认构造器的修饰符只跟当前来的修饰符右过。