一.面向对象
1.万物皆对象:
Java是一门面向对象的编程语言,万物皆对象,每个对象都是唯一的。在现实生活中就存在对象与类这两种事物,我们从小的时候就不断接触很多的对象,我们的大脑就会把这些具备相同属性与行为的事物进行分类。而计算机是服务于人类的,为了让计算机更加接近我们的生活,这时候就出现了面向对象的计算机语言。
2.类和对象:
(1)对象:真实存在的唯一的事物。
(2)类:实际上就是对某种类型事物的共性属性与行为的抽取。类是抽象的概念,比如车。
在现实生活中,往往是先有对象再有类;而在Java中,是先有类再有对象。
3.面向对象概述:
(1)面向对象(Object Oriented,简称OO)是一种以事物为中心的编程思想。
(2)面向对象程序设计(Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
(3)面向对象是相对于面向过程而言的(c语言则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作的指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。
4.面向对象与面向过程的区别:
5.面向对象的特征:封装、继承、多态。
6.面向对象的思维逻辑的两个阶段:
(1)抽象逻辑:
每一个独立的对象都有共同的特征或者共同的行为,把若干个具体对象的共同特征或者共同行为抽象出来提取出一个共同的概念。最后得出抽象的结果都是用来描述事物,与别人交流的,在和别人交流时就会用到抽象逻辑。比如:我们去吃饭,而饭又是什么东西?
(2)具象逻辑:
在执行动作、行为的时候才会是具象逻辑。
7.凡是面向对象的代码,类就是抽象逻辑的产物,是各个名词所属的范围,而这些抽象的产物是不能执行行为的。只能把类再进行具象,得出一些个体去执行这些行为
8.写代码的步骤:
(1)涉及到几个事物就声明几个类(类名都是名词)。
(2)通过类中的个体去执行交互。
9.面向对象的计算机语言的核心思想:找适合的对象做适合的事情。
10.如何找适合的对象(两种方法):
(1)sun已经定义好了很多的类,我们只需要认识这些类,就可以通过这些类创建对象使用。
(2)自定义类,通过自定义类来创建对象使用。
11.自定义类创建对象的三步骤:
(1)自定义类
格式:
class 类名{
事物的公共属性使用成员变量描述;
事物的公共行为使用函数描述;
}
(2)通过自定义类创建对象
格式:类名 变量名 = new 类名( );
(3)访问(设置)对象的属性或者调用对象的功能
①访问对象属性的格式:对象.属性名;
②设置对象的属性:对象.属性名 = 数据;
③调用对象的功能:对象.函数名( );
12.注意事项:
(1)类中的main方法和面向对象无关,main方法是为了让代码运行而生成的产物。
(2)如果想让代码以面向对象的方法运行,必须要写两个类,第一个类用来描述事物的特征(自定义类),而第二个类是为了让代码运行(包含main方法的类),比如XxxTest。
(3)并不是每一个类都需要主函数的,如果这个类不需要独立运行,那么它就不属于主函数。
(4)事物的公共属性使用成员变量描述,(比如要描述一个汽车类,而车铃是自行车的特征,就不能写进来)
(5)Car c = new Car( );通过Car类创建了一个车对象,并使用Car类声明了一个变量c,让c变量指向这个车对象。所以,通过类创建对象后,需要变量去引用,如果没有变量引用,就很难找到这个对象,一般会声明一个变量去指向这个对象。
二.匿名对象
1.定义:
没有引用类型变量指向的对象称作为匿名对象。
2.匿名对象的应用场景:
(1)如果一个对象需要调用一个方法一次的时候,而调用完这个方法之后,该对象就不再使用了,这时候可以使用匿名对象。
(2)可以作为一个实参调用一个函数。
3.匿名对象的好处:
(1)简化书写。
(2)可以尽快的释放内存空间。
如果用Student s = new Student();s.study();这种普通方式,假设后面还有很多代码,但是后面的这些代码都没有再使用到这个对象了。此时这个对象只有在变量s消失的时候才会成为垃圾对象被Jvm回收,s这个变量是在主方法执行完毕才消失。
如果用匿名对象,一旦执行完new Student().study();这句话马上成为垃圾对象,在后面那些代码运行之前,这个对象就有可能被回收掉了。
4.匿名对象要注意的事项:
(1)我们一般不会给匿名对象赋予属性值,因为永远无法获取到。
(2)两个匿名对象永远都不可能是同一个对象。因为每new一次都会有一个新的对象产生。
(3)匿名对象调用属性是没有意义的。
5.实例
class Student{
int num; //学号
String name; //名字
public void study(){
System.out.println("好好学习");
}
}
class Demo1{
public static void main(String[] args){
Student s = new Student();
s.study();
new Student().study();//匿名对象
}
}
运行结果如下图所示:
注意:
new Student();如果没有变量引用,那么就是创建了一个匿名对象。如new Student( ).name = "张三";就是一个匿名对象。