面向对象和面向过程都是编程思想。
面向过程:
注重“过程”这两个字,按部就班的去完成一件事情————————————————执行者
面向对象:
注重“对象”这两个字,对象内部包含行为和特性两类东西,就可以操作“对象”—————指挥者
面向对象引入:
需求:分别计算两个班级的总分。
解决该问题:
将重复代码封装到一个方法中。
需求再次升级:多个程序中都有可能出现数组求和的问题;
如果在其他类中直接使用封住好的getSum方法,会出现
如何解决。
还是会出现代码复用性差的问题。
将getSum方法抽取出,放到一个Tool类中,通过使用面向对象思想解决该问题。
解决了多个类的代码重复的问题。
创建一个类的对象格式
类名 对象名 = new 类名();
指挥对象:
对象名.方法名(实际参数);
对象名.变量名 = 值 ;
模拟需求:猫抓老鼠
对象:猫和老鼠
class 老鼠{
跑(){}
}
class 猫{
看见(老鼠){
老鼠.跑();
}
追(老鼠){}
抓(老鼠){}
}
main(){
猫 小猫 = new 猫();
老鼠 小老鼠 = new 老鼠();
小猫.看见(小老鼠);
}
类和对象的区别:
类:一类事物的共性信息和行为的描述--class。
对象:就是该类事物的一个具体实体 --new。
成员变量:
- 直接定义在类中
- 存放在堆内存中,对象消失则消失
- 整个类中都可以使用
- 不给初始化也可以用,因为有默认值。
局部变量:
1.定义在方法内或者方法上
2.存放在栈内存中,方法结束则就释放
3.只能在它所属的大扩号中使用
4.必须有初始化值,才可以使用
注意:
在java中有一个原则,“就近原则”,如果内部有直接用,内部没有到类中找。如果类中也没有,则报错。
输出的结果为:method:100
匿名对象:
顾名思义:没用名字的对象。
Student s = new Student();//有名字创建对象
new Student();//没用名字对象
new Student();//匿名创建对象
//看对象的属性值
new Student().name = "wangwu";
System.out.println(new Student().name);
//总结:操作完成就成为垃圾,等待回收,因此匿名对象操作属性没有意义。
new.Student().study();
new Student().say();
//总结:对于一个匿名对象来说,方法只能调用一次;一般情况用在,测试方法。
一般作为参数传递时使用匿名对象有些意义。