chapter-07 对象编程

目录

1、类与对象创建

2、类与对象的内存分配机制(重要)198

3、Java内存的结构分析

5、成员方法(方法)概述

方法调用机制原理

成员方法的必要性

成员方法的定义梳理

成员方法 注意事项和使用细节

//总结1:

//总结2

//总结3

练习题1 方法练习:

成员方法传参机制(重要)parameter

练习2 克隆对象

6、方法递归调用

1、打印问题

2、阶乘问题

3、方法递归调用重要规则

4、递归斐波那契

5、猴子吃桃

6、递归调用经典案例——迷宫问题

7、汉诺塔问题 HanoiTower.java

8、八皇后问题 代码未写

7、方法重载 (形参列表不一致)

8、可变参数

1-基本概念

2-使用细节

3-可变参数练习

9、作用域

1-基本概念

2-使用细节

10、构造方法、构造器

1-基本方法

​编辑

2-快速入门

3-注意事项

4-构造器练习

11、对象创建的流程分析

12、this关键字

1-问题引入

2-初步认识

3-深入理解

4-使用细节

5-this练习


1、类与对象创建

Cat cat;声明对象,先在左边创建一个cat对象→空,地址空间没有分配,指向空

      cat= new Cat();创建,在右边开辟地址空间,然后赋值给左边Cat对象名

2、类与对象的内存分配机制(重要)198

 

过程:

1、在方法区加载Person类信息,包括属性信息、方法信息,

2、person p1=new person(),在栈内开辟对象空间,指向堆地址0x0011,

      此时age=0,name=null

3、p1.age=10;在堆内赋属性值 

4、p1.name=“小明”,字符串常量会放在常量池,所以在常量池创建小明,将地址赋给堆中的name属性【只要有数据空间就会有一个地址,地址由系统分配】

5、栈是自下而上,person p2=p1,把p1地址拷贝给p2,p1、p2同时指向相同的堆里面的空间

内存图就可以画好了,p2.age = 10;

如果此时执行p1.age=80,问:p2.age=?,答案是80

3、Java内存的结构分析

b.name=小明;a.age=200 ;  b.age=不存在这个属性 抛出异常;b=null,就是不再指向

5、成员方法(方法)概述

方法不被调用,不会输出

  

  

  

方法调用机制原理

getSum栈执行完return res;之后其实就已经没有了

当main栈执行完,也退出,相当于整个程序执行完毕

成员方法的必要性

   

成员方法的定义梳理

成员方法 注意事项和使用细节

一个方法最多有一个返回值,如何返回多个结果?

  

要求返回值类型必须和return值类型一致或兼容

//如果方法是void,则方法体中可以没有return语句,或者只写return ;

(return后面不能再带返回值)

//总结1:

低精度可以兼容高精度

//总结2

//总结3

练习题1 方法练习:

1、判断奇数

  

2、根据行、列、字符打印 对应行数和列数的字符

成员方法传参机制(重要)parameter

1、方法中的值是tmp,不会改变main方法中的变量值,主方法是全局global

  

解释:

主方法,在栈中 main栈

调用swap方法,会在栈中创建swap栈,里面是临时变量tmp

最后一句话输出时,swap栈已经没了,输出main栈的a,b

2、方法可以接收数组,然后修改,修改之后原来的数组是否改变?
引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!

arr,在堆中,只有一个,在主方法和方法中,指向的都是一个引用地址

 

B类中编写一个方法test200,可以接收一个Person(age,sal)对象,在方法中修改该对象属性,看看原来的对象是否变化?
用方法修改主类中对象属性,原来对象会发生变化

测试题1,如果 test200执行的是p = null ,下面的结果是 10 

原因:方法中置为空,只是把方法中那根指向的线给断了,主方法还是有指向的,所以输出10

测试题2,如果test200 执行的是p = new Person();...,下面输出的是10

方法中,新建对象,指向新的对象,和原来主方法的对象没有关系

局部变量当test200在栈中弹出后,就会成为垃圾被回收

练习2 克隆对象

 

6、方法递归调用

自己调用自己

1、打印问题

这个递归调用,需要注意,顺序是2、3、4,就是说会一直递归,

到最后一个栈,先输出,栈弹出,再输出下一个...以此类推

改一下代码,不大于2的时候输出,结果是只输出2,每个栈是完整执行的

2、阶乘问题

3、方法递归调用重要规则

4、递归斐波那契

·1.请使用递归的方式求出斐波那契数1,1,2.3.5,8,13.….给你一个整数n,求出它的值是多

5、猴子吃桃

猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃其中的一半,然后再多吃一个。当到第10天时,
想再吃时(即还没吃),发现只有1个桃子了。问题︰最初共多少个桃子?

6、递归调用经典案例——迷宫问题

1、先创建地图

2、如何出迷宫 findWay

3、改变策略 findway2,看看路径是否变化,上右下左——路径发生变化

4、测试回溯现象——选择下一个点后走不通,设置为3,再返回原来的点

5、思考——如何求出最短路径?穷举/图->求出最短路径

7、汉诺塔问题 HanoiTower.java

8、八皇后问题 代码未写

7、方法重载 (形参列表不一致)

形参的顺序不同,也算是方法重载

返回类型不同,不代表方法不同,不是构成方法重载的条件。

 

8、可变参数

1-基本概念

2-使用细节

 

3-可变参数练习

9、作用域

1-基本概念

2-使用细节

遵循就近原则

在同一个作用域,比如在同一个方法中,两个局部变量不能重名;全局可以有name,每个方法都可以有name,作用域不一样,是正确的

当执行方法时,局部变量创建,当方法执行完毕,局部变量销毁(其他栈,使用完后就弹出)

属性(全局变量)仍然可以使用(主栈)

在类可以使用其他类的全局变量

属性可以加修饰符;局部变量不能加修饰符;

10、构造方法、构造器

1-基本方法

2-快速入门

构造器名字和类名一致;没有返回值;形参列表和成员方法一样

3-注意事项

构造器重载,一个类可以有多个不同的构造器

构造器是完成对象的初始化,并不是创建对象,没有构造器,就是默认值;

构造器不能p1.构造器,它类似方法但不是方法,功能是完成对象初始化;

系统默认的无参构造器,反编译javap,即从.class文件得到JAVA文件

一旦定义了,就会覆盖原始的构造器;除非再显示定义无参构造器

4-构造器练习

11、对象创建的流程分析

对象在堆里,栈里面的是对象引用

12、this关键字

1-问题引入

2-初步认识

不同的对象都有this,当使用this的时候,this指向当前对象

哪个对象调用,this就指向哪个对象

3-深入理解

可以理解为每个对象都有一个this属性,这个属性存了一个地址,指向堆中自己的地址

使用hashcode代替对象的实际地址,

4-使用细节

3. this.方法名(参数列表)

4.在一个构造器中去访问另一个构造器

5-this练习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值