
Java是一种面向对象的编程语言。面向对象编程英文是Object-Oriented Programming简称OOP。那什么是面向对象编程和面向对象编程不同的是面向过程编程。面向过程编程是把模型分解成一步一步的过程。比如老板告诉你要编写一个TODO任务必须按照以下步骤一步一步来读取文件编写TODO保存文件。而面向对象编程顾名思义你得首先有个对象有了对象后就可以和对象进行互动GirlFriend gf new GirlFriend(); gf.name Alice; gf.send(flowers);因此面向对象编程是一种通过对象的方式把现实世界映射到计算机模型的一种编程方法。在本章中我们将讨论面向对象的基本概念包括类实例方法面向对象的实现方式包括继承多态Java语言本身提供的机制包括packageclasspathjar以及Java标准库提供的核心类包括字符串包装类型JavaBean枚举常用工具类面向对象基础面向对象编程是一种通过对象的方式把现实世界映射到计算机模型的一种编程方法。现实世界中我们定义了“人”这种抽象概念而具体的人则是“小明”、“小红”、“小军”等一个个具体的人。所以“人”可以定义为一个类class而具体的人则是实例instance现实世界计算机模型Java代码人类 / classclass Person { }小明实例 / mingPerson ming new Person()小红实例 / hongPerson hong new Person()小军实例 / junPerson jun new Person()同样的“书”也是一种抽象的概念所以它是类而《Java核心技术》、《Java编程思想》、《Java学习笔记》则是实例现实世界计算机模型Java代码书类 / classclass Book { }Java核心技术实例 / book1Book book1 new Book()Java编程思想实例 / book2Book book2 new Book()Java学习笔记实例 / book3Book book3 new Book()class和instance所以只要理解了class和instance的概念基本上就明白了什么是面向对象编程。class是一种对象模版它定义了如何创建实例因此class本身就是一种数据类型而instance是对象实例instance是根据class创建的实例可以创建多个instance每个instance类型相同但各自属性可能不相同定义class在Java中创建一个类例如给这个类命名为Person就是定义一个classclass Person { public String name; public int age; }一个class可以包含多个字段field字段用来描述一个类的特征。上面的Person类我们定义了两个字段一个是String类型的字段命名为name一个是int类型的字段命名为age。因此通过class把一组数据汇集到一个对象上实现了数据封装。public是用来修饰字段的它表示这个字段可以被外部访问。我们再看另一个Book类的定义class Book { public String name; public String author; public String isbn; public double price; }请指出Book类的各个字段。创建实例定义了class只是定义了对象模版而要根据对象模版创建出真正的对象实例必须用new操作符。new操作符可以创建一个实例然后我们需要定义一个引用类型的变量来指向这个实例Person ming new Person();上述代码创建了一个Person类型的实例并通过变量ming指向它。注意区分Person ming是定义Person类型的变量ming而new Person()是创建Person实例。有了指向这个实例的变量我们就可以通过这个变量来操作实例。访问实例变量可以用变量.字段例如ming.name Xiao Ming; // 对字段name赋值 ming.age 12; // 对字段age赋值 System.out.println(ming.name); // 访问字段name Person hong new Person(); hong.name Xiao Hong; hong.age 15;上述两个变量分别指向两个不同的实例它们在内存中的结构如下┌──────────────────┐ ming ──────▶│Person instance │ ├──────────────────┤ │name Xiao Ming│ │age 12 │ └──────────────────┘ ┌──────────────────┐ hong ──────▶│Person instance │ ├──────────────────┤ │name Xiao Hong│ │age 15 │ └──────────────────┘两个instance拥有class定义的name和age字段且各自都有一份独立的数据互不干扰。注意一个Java源文件可以包含多个类的定义但只能定义一个public类且public类名必须与文件名一致。如果要定义多个public类必须拆到多个Java源文件中。喜欢这个系列的同学可以关注我爆肝一个月Python 从入门到精通