面向过程:把问题分解成多个步骤,一步步完成
面向对象:把问题分解成多个小问题,把小问题分配给不同的对象去完成
1.类与对象
字符串按照jvm的规定会放在方法区一个叫常量池的空间,
年龄是一个基本数据类型,直接存放在了堆中。
在执行Cat cat = new Cat();这句话的时候,会将我们类的信息加载到方法区。
1.属性
2.创建对象,访问属性
3.对象分配进制
4.对象创建过程
5.对象机制练习
b = null,b地址那个位置就置空了,置空了之后那条线就断开了
最后由于b为空,故System.out.println(b.age)会出现一个异常。
2.方法
1.方法快速入门
(1)
(2)
(3)
(4)
2.方法的调用机制
3.方法的妙用
4.方法的定义
5.方法注意事项和细节
(1)
(3)
return n可以输出,int ->double成立,这就是兼容
(4)
会报错,因为void不可以返回任何值
这就对了,return后面不能加任何值
6.方法练习题
三元运算符写错了,应该是return num % 2 != 0?true :false;
7.方法的传参机制
1.基本数据类型
main中的a和b就是实参
Swap中的a和b为形参
这个本质就是值传递
main中的a,b变量与swap中的a,b变量不会冲突
下面两种都是引用传递
2.数组(test100案例)
3.对象(Test200案例)
对象也属于引用类型,所以原来的对象也会发生改变
最关键的是b.test200(p)是将p的地址赋给了test200
4.案例
P=null输出10
P=null就意味着那条红线断了
P = new Person(),输出10
public void test200(Person p)确实产生一个箭头指向人对象,
但P = new Person();重新new一个会在堆中产生一个新的人对象
3.克隆对像
我写的(重新起名了,更加容易理解)
老师写的
这里必须new一个新的对象p2,然后分别赋值
不能直接p2 = p,这样的话p和p2是指向同一个地址,不能算克隆
最后验证一下p与p2是否是同一个,发现不是,拷贝成功。
4.递归
1.递归能解决什么问题
2.递归的执行机制
案例一
每次执行test都会开一个新栈
案列二
3.斐波那契数
4.猴子吃桃
5.老鼠出迷宫
6.汉诺塔
7.八皇后问题
5.重载
1.重载介绍
2.重载快速入门
这个使用会自动匹配下面的方法
下面的四个方法calculate构成了重载
3.重载的使用细节
下面没有构成重载,编译器会报错(参数名n1,n2,a1,a2对编译器来说一样)
下面也没有构成方法的重载,返回的类型无所谓,编译器会报错
4.重载的课堂练习
6.可变参数
1.可变参数的使用
2.可变参数的细节
第三条:可变参数的本质就是数组
传入的实际参数为实参
3.可变参数练习
7.作用域
1.作用域的基本使用
全局变量也叫属性
2.作用域使用细节
第四条
第五条
8.构造器(构造方法)
1.构造器的基本介绍
2.构造器的快速入门
3.构造器的使用细节(javap)
第一条
构造器重载(构造器本身也是一个方法)
第五条
调用构造器会出错
第六条
new Dog()这个后面的小括号就是用来调用默认构造器
第七条
如果想要Dog dog1 = new Dog();成功运行,则需要显示的定义一下 无参构造器
4.构造器课堂练习
9.对象创建的流程分析
10.This
1.引出this
2.this入门
3.this本质
4.this细节
细节一(this可以访问属性)
传统方式是按照就近原则来找的,要访问当前局部变量有没有name和num
而使用this则就直接访问的属性(全局变量)
如果加一个局部变量,那么结果就会发生改变
细节三(this可以访问方法)
细节四(this可以访问构造器)
5.this课堂练习
这里面构造器用来初始化属性,不用也可以,再new完一个对象后,再赋属性。
11.本章作业
第一题(注意考虑代码的健壮性
1.数组可能为空 ,double arr[] = {};
2.数组可能为null ,double arr[] = null;
)
第二题
第三题
第四题
第五题
第六题
第八题
匿名对象只能用一次,new Test().count1();执行完后,count变为10,之后就被销毁。
第九题
第十题
第十一题
第十二题
如果使用下面这种方式会报错
因为
所以应该使用以下方式进行处理
第十三题
自己写的
第十四题