java学习笔记——对象的创建及执行过程

类是抽象的,是对事物的描述,不能直接使用,对象是类的实例,是真正存在的。一个类在正常情况下是不能直接使用的,类似于汽车图纸是不能直接行驶的,如果想使用这个类必须根据这个类去创建这个类的对象,就相当于根据汽车图纸去造车。

创建对象的格式:类名  对象名 = new 类名();

汽车类

public class Car {
    // 成员变量(属性)
    String color;// 颜色
    int price;// 价格
    String brand;// 品牌
    double width;// 宽度
    double length;// 长度

    // 成员方法(行为)
    public void run(){
        System.out.println("一辆汽车颜色是:"+color+",价格是:"+price+",品牌是:"+brand);
    }

    // 停止方法
    public void stop(){
        System.out.println("汽车停止行驶了");
    }
}
public class TestCar {
    public static void main(String[] args) {
        // 创建第一辆小汽车
        Car car1 = new Car();// 创建了一个汽车对象
        // 操作属性
        //System.out.println(car1.brand);// Null,成员变量保存在堆里面,成员变量有默认值,局部变量没有,必须初始化后使用
        car1.brand = "五菱宏光";
        car1.color = "白色";
        car1.price = 1000;
        car1.length = 8;
        car1.width = 2;
        System.out.println(car1.brand);

        // 操作方法
        car1.run();
        car1.stop();
        // 运行一段程序,要申请电脑内存,内存都是归jvm进行管理的(jvm向操作系统申请空间,分为五部分)
        /**
         * 内存分为五部分
         * 1.栈(stack):主要存放局部变量
         * 2.堆(Heap):new 出来的东西都在堆里面,在堆里面的变量都是成员变量,都会有默认值
         *  整数默认是0 浮点数默认是0.0 字符默认是空格(\u0000)布尔默认是false  引用类型默认是null
         * 3.方法区(Method Area):存放class文件
         * 4.本地方法区(Native Method Area):主要和操作系统有关,
         * 5.寄存器(pc Register):主要和cpu有关,决定运行速度
         */
    }
}

执行过程图

java学习笔记——对象的创建及执行过程_第1张图片

描述:
首先将java类编译成class文件,接着将class文件加载到方法区,然后开始运行类(将Car类中的的成员 变量,成员方法加载到方法区,加载TextCar类),首先运行的是TextCar类,将main方法进栈,在栈中开 辟一片空间保存main方法,然后开始执行main方法里面的代码,car1是局部变量(局部变量定义在方法中,成员变量定义在类下,方法外),在栈中开辟一片空间保存car1,new出来的东西都在堆中,在堆中栈中开辟一片空间保存new Car,然后从方法区加载Car里面的成员变量,并且给成员变量赋上默认值,接着将成员方法加载到堆里面,成员方法比较特殊,在堆中加载的不是方法体,加载的是方法区里面的地址值(每个方法都会生成对应的地址值),在堆中加载完成以后生成一个地址值,然后将该地址值赋值给局部变量car1,接着通过对象名给对应的属性赋值,car1代表的是指向堆里面的地址值,通过car1找到堆里面的地址值,根据car1后面的变量名找到堆中的成员变量给其赋值,通过car1调用方法,方法进栈,通过方法名找到堆中方法的地址值,通过地址值找到方法区中的具体方法,开始执行方法体,执行完成以后,方法出栈,main方法中的所有代码执行完以后,main方法出栈,程序执行完成

你可能感兴趣的:(java)