static
2019-06-27 14:01 更新
static
非静态的可以访问静态的;
静态的不能访问非静态的。
静态的和类相关;
非静态和对象相关。
1.访问静态成员:
类名.静态成员;
对象名.静态成员;
2.关于带static代码执行顺序:
1 加载类:
1.1 先将所有的静态属性做默认初始化。
1.2 根据设置的值做显式的初始化。
1.3 调用静态代码块。
注意:系统调用StaticTest的main方法时必须先加载StaticTest类,
而不是在main方法中StaticTest d才加载StaticTest类。
2 创建对象时:
2.1 对所有的实例属性做默认的初始化。
2.2 根据设置的值做显式的初始化。
2.3 调用构造代码块。
2.4 调用构造方法(如果有父类,先调用super())
3 系统在堆内存中给对象分配空间,确定对象的首地址。
3.小练习: 其中(1(1.1))代表第1次执行了1.1步骤。
public class StaticTest {
public static int i = 0;//(1(1.1))、(5(1.2))
public static StaticTest s1 = new StaticTest("s1");//(2(1.1))、(6(1.2))
public static int j = StaticTest.print("i");//(3(1.1))、(12(1.2))
public static int k = 233;//(4(1.1))、(14(1.2))
public int x = 10;//(7(2.1))、(8(2.2))、(16(2.1))、(17(2.2))
// 静态代码块:(15(1.3))
static {
// 会着类的加载而调用,只会调用一次,某些程序中初始化的工作
System.out.println("调用了静态代码块。");
}
// 构造代码块:(9(2.3))、(18(2.3))
{
// 当创建对象的时候会被调用,而且会被调用很多次,取决于创建了几个对象;
// 会在构造器之前调用.
System.out.println("调用了构造代码块。");
}
// 构造方法:(10(2.4))、(19(2.4))
public StaticTest(String string) {
System.out.println("调用了构造方法。");
StaticTest.print(string);
}
// 静态方法(11)、(13)、(20)
public static int print(String s) {
System.out.println("---------------");
System.out.println("调用了静态方法。");
// 局部代码块
{
// 会产生一个局部作用域
int i = 233;
System.out.println("调用了局部代码块。");
}
System.out.println(s);
System.out.println("***************");
return 666;
}
public static void main(String[] args) {
StaticTest d = new StaticTest("S");
}
}
4.输出结果:
调用了构造代码块。
调用了构造方法。
---------------
调用了静态方法。
调用了局部代码块。
s1
***************
---------------
调用了静态方法。
调用了局部代码块。
i
***************
调用了静态代码块。
调用了构造代码块。
调用了构造方法。
---------------
调用了静态方法。
调用了局部代码块。
S
***************
以上内容是否对您有帮助:
← main
更多建议: