什么是面向过程:
面对一个需要解决的问题时,注重的是解决问题的步骤。第一步做什么,第二步做什么。在程序中相当于一个方法内按顺序执行代码的一个流程。
什么是面向对象:
同样是解决一个问题,面向对象的角度是将问题抽象成对象的形式。通过分类的思维方式,将问题分成几个解决方案的对象。给每个对象赋值属性和方法,对每个对象的细节进行面向过程的思维,执行自己的方法来解决问题。
面向对象的实质是:以类的方式组织代码(模板),以对象的形式封装数据(具体化)。
面向对象的重要思想是抽象。
正如世界一样,充满了多种多样的事物。把有相同特性的事物归纳起来组成一个类叫做抽象。
面向对象的特性:
封装:将具体的事物封装成对象后,对外隐藏对象中的逻辑代码。只留一个入口从外面调用对象。
继承:让某个类型的对象获取另一个类型对象的属性和对象。无需重新编写原来类的代码,实现子类继承父类的能力。
多态:在同一个类中不同对象使用该类的方法时,呈现的效果却大不相同。
类和对象的关系:
类是一个抽象的数据类型,对某一个事物进行描述和定义。将相同特征的事物总和在一起才称为类,并不能代表一个具体的事物。
例如:Student类、Teacher类一样,具备某一事物相同的属性和方法。
对象表示具体的一个事物,在一个类当中可以有多个不同的对象。
例如:张三这个人是Student类中可以被确定的具体实例。就像生活中每一个人一样,具备不同的特点和功能,而不是抽象的概念。
在创建类和对象之前,要有清晰的结构思维
创建一个只有main方法的主类,专门用来当做代码运行的入口测试类或启动类。
在另一个窗口创建一个只有public关键字的类来当作功能类(也叫做抽象的模板)。每当需要新增别的功能时,可以不修改原数据进行扩展操作。
以创建Person类的代码实例进行分析:
创建一个共同特性为Person的一个类 在这个种类的类当中可以定义最常见的两个变量name和age(在类中也叫成员属性)。
在这个Person类当中可以将创建的方法称之为成员函数,相当于拥有的共同特征。
若要使用这个类 就必须在主方法内进行实例化操作:
首先将抽象转换为具体,也叫做类的实例化。在这个案例当中创建了Sum和John这两个不同的人(对象)。
由于类只是一个模板,属性只有默认值。将每个对象中的属性进行定义,每个对象拥有不同的属性。称为对象的形式封装数据。
需要注意的是:
这两个类不在同一个Java文件中
一个类可以包含多个对象
对象的模板中只能声明属性,不能将属性初始化。
当一个抽象类被创建对象后,会在.class编译文件中自动生成一个修饰符为public的方法。称为构造方法。
构造方法的特点:
方法名与类名相同。
没有返回值。
只要创建了该类的对象,便自动生成。
构造方法的类型:无参构造和有参构造。
无参构造:
有参构造:
有参构造中含有形参所对应的是在主方法括号内可以输入该属性的值将其传递给这个构造方法。
创建类和对象时,会用到Java内存当中的栈、堆、方法区。
类和对象分别存放的位置:
创建的类会被存放在方法区中
每个对象的引用变量存放在栈当中
定义的对象属性和方法会被存放在堆当中
利用代码案例分析原理图:
当代码执行到主类时,会在方法区中生成main方法和其他相关的属性,将main方法压栈在内存中。
使用new操作符创建对象之前,将Pet类及属性和方法载入方法区当中作为对象模板。
创建对象时,则会在栈内存当中生成这个对象的引用变量,用来指向堆内存中对象的地址。
当给对象属性和方法进行定义时,通过方法区给出的Pet类模板将定义的属性存放在堆内存中。
当创建另外一个不同的对象时,将上述步骤重复执行后,在堆内存中生成一个新的对象块。
需要注意的是:方法区除了存放创建的方法数据以外。还有一个静态方法区,用于存放包含static修饰符的方法,便于和类一起加载。