初始化过程:
1. 初始化父类中的静态成员变量和静态代码块 ;
2. 初始化子类中的静态成员变量和静态代码块 ;
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法;
案例:
- public class Z extends X{
- Y y = new Y();
- Z () {
- System.out.println("Z");
- }
-
- public static void main(String[] args) {
- new Z();
- }
- }
- public class X {
- Y y = new Y();
-
- X(){
- System.out.println("X");
- }
- }
- public class Y {
- Y(){
- System.out.println("Y");
- }
- }
程序运行时,控制台输出信息:
Y
X
Y
Z
实例初始化就是执行
哪些方法不可以被重写?
对象的多态性
形参是基本数据类型:传递数据值
实参是引用数据类型:传递地址值;特殊的类型:String、包装类等对象不可变性
- public static void main(String[] args) {
- int i = 1;
- String str = "hello";
- Integer num = 200;
- int[] arr = {1, 2, 3, 4, 5};
- MyData my = new MyData();
-
- change(i, str, num, arr, my);
-
- System.out.println("i = " + i);
- System.out.println("str = " + str);
- System.out.println("num = " + num);
- System.out.println("arr = " + Arrays.toString(arr));
- System.out.println("my.a = " + my.a);
- }
-
- private static void change(int j, String s, Integer n, int[] a, MyData m) {
- j += 1;
- s += "world";
- n += 1;
- a[0] += 1;
- m.a += 1;
- }
-
- static class MyData {
- int a = 10;
- }
-
-
- /*输出结果
- * i = 1
- str = hello
- num = 200
- arr = [2, 2, 3, 4, 5]
- my.a = 11
- * */
局部变量与实例变量重名:
在实例变量前面加'this.'
局部变量与类变量重名:
在类变量前面加'类名.'