Java面向对象-1

构造方法(函数)

构造方法概述和作用
  • 构造对象
  • 构造对象的时候给对象赋值
构造方法格式特点
  • 如果我们没有在类里面写构造函数,则JVM会自动提供一个默认的无参构造2. 函数
  • 构造函数的函数名称和类名一模一样
  • 构造函数不需要有返回值,同时也不需要使用void修饰
  • 如果说程序员提供了构造函数,则JVM不会再提供一个默认的无参构造函数
  • 如果在类里面定义了有参构造函数,建议把无参构造函数保留
    Java面向对象-1
    Java面向对象-1
    Java面向对象-1

对象实例化在内存中的状态分析

如上图中有一个CarAuto类,在CarAutoTest中实例化

  • 第一步: JVM将CarAutoTest加载到方法区,静态方法main也跟随CarAuto进入了方法区;同时所有使用stasic进行修饰的成员都加载。
  • 第二步: main函数进栈,CarAuto被加载到方法区,所有属性都被初始化为一个默认值。

各数据类型的数组初始值
整数型:byte short int long -> 0
浮点型:float double -> 0.0
布尔型:boolean -> false
字符型:char -> “\u0000”
字符串:string -> null

  • 第三步: CarAuto的构造方法进栈,对所有属性的值进行显示初始化,完成后构造函数弹栈。
  • 第四步: 对象在堆里创建完成,同时分配一个堆内存地址;普通成员(变量等)随对象的创建而创建。(new CarAuto)
  • 第五步: 在栈里创建CarAuto对象的引用car1,然后将CarAuto对象的堆内存地址存放到car1里面。(CarAuto car1 = new CarAuto;)
  • 第六步: 使用引用对象car1给对象里的属性重新赋值
		//无参数
		CarAuto car1 = new CarAuto();
		car1.tireNumber = 4;
		car1.color = "银色";
		//带参数,注意这种方式时,第六步不会执行,因为在第三步已经被执行了
		CarAuto car2 = new CarAuto(3,"红色",315.7);
  • 第七步: 使用引用对象car1调用对象中的属性、行为等。
  • 第八步: 程序执行结束,main函数弹栈,JVM开始回收垃圾。

小结:

  • 当JVM将类加载到方法区的时候,由static进行修饰的成员也加载到了方法区; 当类通过关键字new实例化出来一个对象的时候,在堆内存里面会进行成员属性和行为的默认初始化,同时还会创建一个关键字this来指向堆内存地址;即this滞后于static。
  • 普通成员随着对象的创建而创建;静态成员随着类的加载而加载(static)
  • 非静态方法既可以访问非静态的成员,也可以访问静态成员;静态方法只能访问静态成员;即静态变量是共享的。