java面向对象代码解析(尚硅谷记录)

1、代码如下 

package com.atguigu.java;
public class Test2 {
	public static void main(String[] args) {
		Person_test p_test = new Person_test();// 第一句解析
		p_test.name = "Tom"; // 第二句解析
		p_test.age = 18;// 第二句解析
		p_test.sex = 1;// 第二句解析
        p_test.study(); // 第三句解析,无变量变化过程
		p_test.showAge();// 第三句解析,无变量变化过程
		int newAge = p_test.addAge(2); //第四句解析
		System.out.println(p_test.name + "的新年龄为:" + newAge); // 第五句解析
        System.out.println(p_test.age); //20,第六句解析


	}
	
}


class Person_test{
	String name;
	int age;
    /*sex:1表明是男性
      sex: 0表明是女性*/
	int sex;

	public void study(){
		System.out.println("studying");
	}

	public void showAge(){
		System.out.println(age);
	}

	public int addAge(int i){
		age += i;
		return age;
	}

}

2、存储的说明

      属性与变量的不同点与相同点

     

      注意:局部变量/形参 存储在;属性存储在

              

3、

  3.1  Person_test  p_test = new Person_test();# 第一句解析

1⃣️左边:在栈空间声明了一个p_test对象,指向了堆空间;

2⃣️右边:堆空间根据Person_test{}中,由于没有赋值,所以创建了的三个属性均是默认值;

               String name; -- 默认值为 null
               int age; -- 默认值为 0
               int sex; -- 默认值为 0

图示例: 

 3.2       p_test.name = "Tom"; // 第二句解析
             p_test.age = 18;// 第二句解析
             p_test.sex = 1;// 第二句解析

通过p_test调用 name/age/sex这些属性,堆空间赋值后结果为

     name 为 "Tom"; // 第二句解析
     age    为 18;// 第二句解析
     sex    为 1;// 第二句解析

图示例: 

3.3        p_test.study(); // 第三句解析,无变量变化过程
             p_test.showAge();// 第三句解析,无变量变化过程

3.4       int newAge = p_test.addAge(3); //第四句解析

右边:p_test.addAge(3);是调用了addAge(3)方法,addAge()方法为

                   public int addAge(int i){
                           age += i;
                           return age;
                   }

           addAge函数中,i是形参,形参就是局部变量,所以存储在栈中;并i=2

            return的age是p_test对象的,所以将i(即是2)累加到堆空间的age上,故age=20

            return age;则是将age即20返回

           方法结束后,i也就用完了,i出栈

左边:int newAge中newAge的是方法里面定义的变量,所以是局部变量,故存在栈中

图示例:

        System.out.println(p_test.name + "的新年龄为:" + newAge); // 第五句解析
        System.out.println(p_test.age); //20,第六句解析

  System.out.println(p_test.name + "的新年龄为:" + newAge); // 第五句解析
        输出的内容是栈空间的20(在栈空间)

 System.out.println(p_test.age); //20,第六句解析

        输出的内容是栈空间指到堆空间的内容,20(在堆空间)

图示例:

注:

猜你喜欢

转载自blog.csdn.net/weixin_46932303/article/details/114480450
今日推荐