问答
犯规~
1楼
老师是用什么软件进行演示的?我想去下载


尚新途

好像是微软下的一个画图工具,具体是什么老师也有点忘记了

????
2楼

老师你好

p1.age=24
p2.age=35

这个24和35,是它们本身在常量池中,赋值后,把它们的地址给变量,让变量指向常量池中的值。还是值就在堆中,不指向常量池?

尚新途

24在p1指向的堆区中
35在p2指向的堆区中

尚新途

意思是24和35在堆中的对象里?所以变量不是指向常量池对吗?

p1、p2指向的堆里存放的24、35是常量池中值的副本?

尚新途

嗯嗯,是的,24和35会在堆中开辟一块空间存放在堆中。
P1和p2.age,表示对堆中对象的一个引用,指向了这个变量。

3楼
Person p1 = new Person();

是先在堆中创建对象,然后栈中有p1这个变量 ,然后把对象的内存地址赋值给p1

还是栈中先有p1值为null然后在堆中创建对象,在把对象内存地址赋值给p1

尚新途

是先在堆中创建对象,然后栈中有p1这个变量 ,然后把对象的内存地址赋值给p1。

白菜
4楼

老师,作业中的文字和图像描述程序的执行过程,可有标准答案查看啊?

尚新途

答案不能给你们哈!

尚新途

做过的作业也没有答案吗?

尚新途

做过作业呢,提交到作业后台,如果有疑问,没有思路的可以请教一下技术老师呢

白菜
5楼

老师:

p1.age=24
p2.age=35

这两个数值24和35为什么不在常量池中,那它们放在哪呢?

尚新途

放在p1(p2)所属对象的堆区中

image.png

????
6楼

总结一下,我在本章学到的内容,请老师检查一下是否有理解错误的地方

1、方法区

是堆,所有线程共享,只有一个

存放:static修饰的内容、不变及唯一的内容、类的信息(成员变量、方法、构造器)

2、堆

所有线程共享,只有一个。分配灵活,速度慢

存放:对象(对象的共性是都有同一个类的方法和成员变量,个性是由构造器代入实参赋予的?)(对象是内存地址,存着方法区中类的信息所在的地址?)

3、栈

可以存在复数的栈和线程。每个线程中可以有多个栈,栈属于线程私有,线程间不能共享。且同一个线程栈与栈之间也不共享信息(局部变量);先进后出;由JVM分配空间,速度快。

存放:方法的信息(局部变量)



尚新途

可以的,理解的不错

杨安逸
7楼

1.main方法里调用一个Person()这样的空构造器是为了什么,有什么用吗?

2.p1.age=24和p1.name="张三"又对这个空构造器做了什么吗?

3.调用show方法为什么不能像之前一样直接调用,而是要在前面加“p1.”呢

image.pngimage.png

尚新途

1.main方法里调用一个Person()这样的空构造器是为了什么,有什么用吗?

解答:创建一个对象,然后使用对象中的成员变量和成员方法,完成一个程序,java是面向对象的编程方式语言


2.p1.age=24和p1.name="张三"又对这个空构造器做了什么吗?

解答:这里并没有对空构造器做什么,只是通过创建出来的对象 通过变量名 设置了成员属性的值


3.调用show方法为什么不能像之前一样直接调用,而是要在前面加“p1.”呢

show方法呢,是属于 Person 的成员方法,p1呢是Person实例化的一个对象,当然要用对象的方式调用对象的成员方法啦


老师看到你近期提交的问题看出来,你对java的语法可能还不是很熟悉,多琢磨,多练习


微信用户
8楼

老师,有几个问题:

    1、标题给的是参数传值机制,但是给的例子并没有参数?

    2、Java中,方法中所有参数都是“值传递”,但是视频的图解好像又是引用传递?

    3、值传递是不是基本数据类型参数的传值?

    4、基本数据类型参数的传值    和   引用类型参数的传值,能否分别给个例子解释一下。

    5、视频图解的过程听懂了,但是概念对不上,云里雾里的。

尚新途

首先提问每一个问题,要在对应的视频中进行提问。

第三个问题:不是的。

值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

4:传入基本类型参数,例如a(int b)这个b就是基本类型参数传值,引用类型传值,例如a(User user)这种非基本类型传值,为引用类型传值,Java中除基本类型为全部为引用类型。

5:听不懂也不用担心,概念理解没有到位,下来多敲代码,写几次就会有不一样的感悟了。

尚新途

   

1、  5个问题都是同一个视频,

2、 这里有三个概念,后面的图解过程能理解,就是和概念对不上。

3、 标题是参数传输机制,后面图解传递的是地址,这是 值传递 还是 引用传递?

4、 我觉得老师没讲清楚



网页捕获_7-4-2022_2653_www.itbaizhan.com.jpeg




尚新途

问题1:标题是机制,更多的是概念的理解。这里说的值传递不是指基本数据类型。包括对象,引用类型。

问题2:值传递不是说参数传递,包括赋值。这里不是引用传递。值传递的意思是调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。,这是值传递的概念,不要理解为数字这些。将一个对象赋值给一个变量,也是值传递。Java中只有一种传递方式,那就是值传递。

尚新途

尚新途

image.png

这是什么?

尚新途

ok,谢谢老师——奇怪,没显示出来

尚新途

不客气。

John
9楼


老师,这里面的Point是什么意思?

image.png

尚新途

这个方法需要一个Point类型的参数,Point是你自己定义的一个类,这个也可以作为一个类型,就像String一样,String是jdk自带的类型,而Point是你自己去定义的一个类型。

张磊
10楼

image.png

在这里创建p1的时候,内存分析是不是这样的:先在栈里面执行无参构造、再才是堆里面形成对象,然后无参构造方法出栈,最后把对象的地址给到main方法里面的p1?


尚新途

对的,理解正确

尚新途

好滴~

尚新途

W
11楼

很好奇,高老师用的什么画图软件,想用来做思维导图

尚新途

这个是xmind软件,可以去下载一个

douzhi166
12楼

老师 

p1.show()和p2.show() 得出的结果应该放在内存的哪里呢?

尚新途

企业微信截图_1637128685190.png就在栈里面了

zjshaopku
13楼

关于例4-12,

u3 = u1 的写法,

如果u3改变的是基本数据类型,如id,那么u1是否也会改变?

尚新途

这个是把u1的给了u3,你修改u3的不会影响

14楼
   public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

set  get 是干什么 的

尚新途

set为赋值,get为调用值,外部创建对象后,可以通过调用set方法,为其变量赋值,同样,可以在外部通过调用get方法调用改对象属性值


富裕
15楼

老师,我在这个地方搞不懂。为什么要在这个地方开辟一个栈帧给person类,而且new person调用了方法构造器吗?为啥要说new person调用了构造器?所以开辟一个栈帧?为啥这么说


image.png

尚新途

在new的时候,就是实例化这个类,就要调用它的构造方法来执行,所以要开辟一块空间给它

自我检测(5S)