本文共 2500 字,大约阅读时间需要 8 分钟。
面向过程(Procedure Oriented,简称PO):是一种以过程为中心的编程思想,该思想是站在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先干啥,后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。
面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想。
面向对象(Object Oriented,简称OO):是一种以事物为中心的编程思想,该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。
面向对象一种基于面向过程的新的编程思想。
面向对象的三大特征:封装(Encapsulation)、继承(Inheritance)和多态(Polymorphism)。
面向对象最小的程序单元是类
1、抽象与对象
抽象:从某种角度出发,抽取我们所关注的特征和行为。
对象(object)也称为实例(instance):具备某种功能(状态和行为)的实体,一切事物都可以认为是对象。
对象具有状态和行为:
对象具有状态,比如姓名,年龄,性别等。
对象还有行为,比如吃饭,睡觉,写代码等。
2、类(类型)
具有相同特性(数据元素)和行为(功能)的多个对象的抽象就是类。因此,对象的抽象是类,类的实例化是对象,类实际上就是一种数据类型。
类具有特性:对象的状态,用成员变量来描述。
类具有功能:对象的行为,用方法来描述。
在编程中,是先有类,再有对象。对象是根据类创建出来的,类是对象的类型/模板,就是使用一个类作为构建该对象的基础。
// 类的定义语法修饰符 class 类名{ 零到多个成员变量(field ) 零到多个构造器 零到多个方法}
注意:
1)修饰符可以是 public、final、abstract,或者完全省略。若类使用 public 修饰,则当前所在的文件名必须和类名相同。
2)类名必须符合标识符的命名规范(使用名词,首字母大写)。
3、类的定义和对象的创建与使用
1)对象的创建与使用
创建对象:类 对象名 = new 类名();
对象调用方法:对象名.方法名([实参]);
对象操作字段:赋值:对象名.变量 = 值; 取值:变量 = 对象名.变量;
打印对象:默认输出:Servant@670e0bfd,对象的类型@十六进制的hashCode。 比较对象:每次new,都会在堆内存开辟新的内存空间,而"=="号在比较引用类型的时候,比较的是引用类型的内存地址值。
对象的生命周期:
从使用new在堆中开辟内存开始,到垃圾回收期回收之间,垃圾:内存中的某一块空间没有被某一个变量所引用,垃圾产生时,不一定运行GC,GC是自行调度,程序员控制不了。
2)创建一个 Student 类
public class Student { String name; int age; public void eat(){ System.out.println("在吃饭"); } public static void main(String[] args) { Student stu = new Student(); System.out.println(stu.name); // null stu.eat(); // 在吃饭 }}
Student stu = new Student(); 其实我们在创建对象的时候,都是调用构造方法/构造函数/构造器。
构造器最大的作用:就是在创建对象时并进行初始化对象数据。
1、构造器的特点
类都有一个默认构造器,当不显示的定义构造器时,编译器会在编译的时候,提供一个默认构造器。
1)构造器的名字必须和当前所在类的类名相同.
2)不需要定义返回值类型,更加不能使用void作为返回.
3)构造器中不需要使用return来返回当前构造的对象.
2、默认构造器
1)无参数,无方法体.
2)构造器的访问修饰符和当前类的修饰符相同(是否有public).
3)一旦在类中显示地提供了构造器,则默认的构造器就不再提供了.
推论: 一个类至少有一个构造器(即使没有自定义,编译器也会创建一个默认的).
3、构造器重载
不同类的构造器是不相同的. 对于构造器重载来说,肯定是在同一个类中,并且构造器都是和类名相同.
所以在同一个类中的多个构造器就必须参数列表不同(参数类型,参数个数,参数顺序).
public class Student { String name; int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } public void eat(){ System.out.println("在吃饭"); } public static void main(String[] args) { Student stu = new Student(); System.out.println(stu.name + "--" + stu.age); //null--0 Student stu2 = new Student("李四",17); System.out.println(stu2.name + "--" + stu2.age); //李四--17 }}
ends ~
转载地址:http://gjcgn.baihongyu.com/