1.初始化数据域有哪些方法?
数据域是全局变量存放的地方。初始化数据域有三种方法,分别为在声明中赋值,在构造器中赋值与初始化块进行赋值。
2.声明中是否可以不赋值?
在没有显式的赋值时,域会被自动赋予初始值,而方法中的变量也就是局部变量必须赋予初始的值,并且注意局部变量不能声明静态变量。静态变量只能在域中用static声明,并且在类中加载一次。一般尽量给变量赋予初始值会使代码可读性更高。
3.变量在初始化时可否调用方法?
可以,变量初始化可以赋予常量,也可以调用方法赋予初始值。
4.变量初始化的顺序是什么?
首先所有数据域被初始化为默认值
按照在类声明中出现的次序,一次执行所有域初始化语句与初始化块。
静态数据初始化先于非静态数据初始化。
如果构造器第一行调用了第二个构造器,则执行第二个构造器。
执行这个构造器的主题。
5.是否可以将全局变量与局部变量设置成相同名字。
可以,此时需要用this.变量名 = 变量名这种语法,甚至推荐这样做,会更清晰。如果两个名字不一样则不需要用到this关键字。
6.this关键字还有什么其他用法?
第二个用法是可以用于return this返回当前的对象,最后一个用法是用于构造器中,用来调用另一个构造器。
7.初始化块的语法是什么?
可以将一些变量用花括号括起来表示初始化块,用static声明为静态初始化块。这种机制不是必须也不常见,建议将初始化代码放到构造器中。
8.全局变量的初始化编写代码的顺序是什么?
由于全局变量初始化由特定的顺序,编码也尽量按照这个顺序,即静态变量,变量,初始化块,构造器。
9.static声明的方法有什么特殊之处?
首先之前提到过不能再静态方法中声明静态变量,另外静态方法也不能调用非静态方法,静态方法中不能使用this关键字。他很像全局方法,如果在java中出现大量静态方法,就该考虑重新设计程序,毕竟java是面向对象的编程语言,而static不是面向对象的。
10.构造方法可以重载吗?
可以,和一般方法重载一样。一个方法的签名包括名字与参数列表,其中参数列表包含参数数量,类型与顺序。方法签名相同而返回值不同的方法不能称为方法重载,是不允许的。
下面有一个实际例子:
package test;
class Bowl{
Bowl(int num){
System.out.println("bowl"+num);
}
}
class Table{
static Bowl b1 = new Bowl(1);
Table(){
System.out.println("table");
}
void dosome(int num){
System.out.println("tabledosome"+num);
}
static Bowl b2= new Bowl(2);
}
class Cup{
Bowl b3 = new Bowl(3);
static Bowl b4= new Bowl(4);
Cup(){
System.out.println("cup");
}
void dosome(int num){
System.out.println("cupdosome"+num);
}
static Bowl b5= new Bowl(5);
}
public class StaticInitialization {
public static void main(String[] args){
System.out.println("main");
new Cup();
new Cup();
table.dosome(1);
cup.dosome(1);
}
static Table table = new Table();
static Cup cup = new Cup();
}
结果为
bowl1
bowl2
table
bowl4
bowl5
bowl3
cup
main
bowl3
cup
bowl3
cup
tabledosome1
cupdosome1
注意,该程序只是为了演示,不建议编码顺序如此混乱,应该按照推荐顺序编码。