达内课程-面向对象之对象创建过程和java数据传递

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/76599010

对象创建过程

class A{
    int v1 = 1;
    static int v2 = 2;
    static{
        ......
    }
    public A(){
        ......
    }
}
class B extends A{
    int v3 = 3;
    static int v4 = 4;
    static{
        ......
    }
    public B(){
        ......
    }
}

创建B实例

B b = new B();

  • 第一次用到A类和B类

    1. 加载父类(A),为父类静态变量分配内存(v2分配内存,但未执行赋值运算,默认值是0)
    2. 加载子类(B),为子类静态变量分配内存(v4分配内存,但未执行赋值运算,默认值是0)
    3. 执行父类静态变量赋值运算和静态初始化块(v2赋值和初始化块,按代码先后顺序执行)
    4. 执行子类静态变量赋值运算和静态初始化块(v4赋值和初始化块,按代码先后顺序执行)
  • 再次用到A类和B类

    1. 创建父类对象,为父类非静态变量分配内存(v1)
    2. 创建子类对象,为子类非静态变量分配内存(v3)
    3. 执行父类非静态变量赋值运算
    4. 执行父类构造方法
    5. 执行子类非静态变量赋值运算
    6. 执行子类构造方法

程序验证

public class Test {
    public static void main(String[] args){
        new B();
    }
}

class A{
    int v1 = 1;
    static int v2 = 2;
    static{
        System.out.println("A静态初始化块");
    }
    public A(){
        System.out.println("A构造方法");
    }
}

class B extends A{
    int v3 = 3;
    static int v4 = 4;
    static{
        System.out.println("B静态初始化块");
    }
    public B(){
        System.out.println("B构造方法");
    }
}

java的数据传递

  • 传值
    1. 基本类型变量的值,是值本身
    2. 引用类型变量的值,是内存地址

基本类型

public class Test {
    public static void main(String[] args){
        int a = 10;
        f(a);
        System.out.println(a);//输出10
    }

    private static void f(int a) {
        a = 100;
    }
}

引用类型

public class Test {
    public static void main(String[] args){
        Point a = new Point(3,4);
        f(a);
        System.out.println(a.x);//30
        System.out.println(a.y);//40
    }

    private static void f(Point a) {
        a.x = 30;
        a.y = 40;
    }

}
展开阅读全文

没有更多推荐了,返回首页