Java之类及方法的加载顺序,各种变量的工作原理

x33g5p2x  于2021-11-03 转载在 Java  
字(1.6k)|赞(0)|评价(0)|浏览(548)

1、第一种情况,没有静态对象

  1. class A {
  2. private static int numA;
  3. private int numA2;
  4. static {
  5. System.out.println("A的静态字段 : " + numA);
  6. System.out.println("A的静态代码块");
  7. }
  8. {
  9. System.out.println("A的成员变量 : " + numA2);
  10. System.out.println("A的非静态代码块");
  11. }
  12. public A() {
  13. System.out.println("A的构造器");
  14. }
  15. }
  16. class B extends A {
  17. private static int numB;
  18. private int numB2;
  19. static {
  20. System.out.println("B的静态字段 : " + numB);
  21. System.out.println("B的静态代码块");
  22. }
  23. {
  24. System.out.println("B的成员变量 : " + numB2);
  25. System.out.println("B的非静态代码块");
  26. }
  27. public B() {
  28. System.out.println("B的构造器");
  29. }
  30. }
  31. public class Test {
  32. public static void main(String[] args) {
  33. A ab = new B();
  34. System.out.println("---");
  35. ab = new B();
  36. }
  37. }

2、第二种情况有静态变量

  1. class A {
  2. private static int numA;
  3. private int numA2;
  4. public static A a = new A();
  5. static {
  6. System.out.println("A的静态字段 : " + numA);
  7. System.out.println("A的静态代码块");
  8. }
  9. {
  10. System.out.println("A的成员变量 : " + numA2);
  11. System.out.println("A的非静态代码块");
  12. }
  13. public A() {
  14. System.out.println("A的构造器");
  15. }
  16. }
  17. class B extends A {
  18. private static int numB;
  19. private int numB2;
  20. static {
  21. System.out.println("B的静态字段 : " + numB);
  22. System.out.println("B的静态代码块");
  23. }
  24. {
  25. System.out.println("B的成员变量 : " + numB2);
  26. System.out.println("B的非静态代码块");
  27. }
  28. public B() {
  29. System.out.println("B的构造器");
  30. }
  31. }
  32. public class Test {
  33. public static void main(String[] args) {
  34. A ab = new B();
  35. System.out.println("---");
  36. ab = new B();
  37. }
  38. }

3、对象加载顺序

(1) 父类静态对象和静态代码块

(2) 子类静态对象和静态代码块

(3) 父类非静态对象和非静态代码块

(4) 父类构造函数

(5) 子类
非静态对象和非静态代码块

(6) 子类构造函数

4、阐述静态变量和实例变量的区别?

不管创建多少个对象,静态变量在内存中有且仅有一个;
实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。
静态变量可以实现让多个对象共享内存。

相关文章

最新文章

更多