?面向过程(POP&)面向对象(OOP):
两者都是一种思想,面向对象是相对于面向过程而言的。
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
面向对象:将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法和原则,如:抽象、分类、继承、聚合、多态等。
(一)面向对象分析问题的思路和步骤:
- 根据问题需要,选择问题所针对的现实中的实体
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
- 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把构造成计算机能够识别和处理的数据结构
- 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
(二)面向对象的两个要素
- 类 :是对一类事物的描述类的设计,其实就是类的成员的设计。面向对象程序设计的重点是类的设计
- 对象:实际存在的该类事物的每个个体,因而也称为实例(instance)
一、JAVA类及类的成员
(一)JAVA类及类的成员
属性、方法、构造器;代码块、内部类
- 属性:对应类中的成员变量
- 行为:对应类中的成员方法
类和对象的使用(面向对象思想落地的实现):
? ? ? ? ? ? ? ? ?1.创建类,设计类的成员
? ? ? ? ? ? ? ? ?2.? ?JAVA类的实例化,即创建类的对象
? ? ? ? ? ? ? ? ? ? ? ?创建类的对象 = 类的实例化 = 实例化类
? ? ? ? ? ? ? ? ?3.通过“对象.方法”或“对象.属性”调用对象的结构
Field = 属性 = 成员变量? = 域、字段? ? ? ?Method = (成员)方法 = 函数
public class OOPTest {
public static void main(String[] args) {
//创建person类的对象
Person p1 = new Person();
//Scanner scanner = new Scanner(System.in)
//调用对象的结构:属性、方法
//调用属性:“对象.属性”
p1.name = "Peter";
p1.isMale = true;
p1.age = 20;
System.out.println(p1.name);
System.out.println(p1.isMale);
System.out.println(p1.age);
//调用方法:“对象.方法”
p1.eat();
p1.sleep();
p1.speak("Chinese");
}
}
class Person{
//属性
String name;
int age;
boolean isMale;
//方法(功能)
public void eat()
{
System.out.println("人可以吃");
}
public void sleep()
{
System.out.println("人可以睡觉");
}
public void speak(String language)
{
//括号内定义参数
System.out.println("人可以说话,使用的是:"+language);
}
}
输出结果:

?
(二)对象的创建和使用
1.如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
//意味着:如果我们修改一个对象的属性a,则不影响另一个对象属性a的值
Person p2 = new Person();
System.out.println(p2.name); //未赋值时,结果为null
//将p1变量保存的地址值赋给p3,导致p1和P3指向了堆空间中的同一个对象实体。
Person p3 = p1;
System.out.println(p3.name); //Peter
2.内存解析
- 堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点JAVA虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配
- 通常所说的栈(Stack),是指虚拟机栈。用于存储局部变量等。局部变量表存放了编译器可知长度的各种基本数据类型(boolean,byte,char,short,int,float,long,double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。方法执行完,自动释放
- 方法区(Method Area):用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据
?
?
(三)类中属性的使用
属性(成员变量)&局部变量
public void talk(String language) {//language是形参,也是局部变量
System.out.println("我们使用的是"+language+"进行交流");
}
public void food(){
String shiwu = "豆腐脑";//局部变量
System.out.println("我喜欢吃"+shiwu);
}
1.相同点:
1.1? 定义变量的格式:数据类型 变量名 = 变量值
1.2? 先声明后使用
1.3? 变量都有其对应的作用域
2.不同点:
2.1? 在类中声明的位置的不同
属性:直接定义在类中的{ }内 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
2.2? 关于权限修饰符
属性:可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符:
private? ?public? ?缺省(定义时数据类型前无任何修饰符)? ? protected—>封装性
局部变量:不可以使用权限修饰符
2.3? 默认初始化值的情况: 属性:类的属性,根据其类型,都有默认初始化值
整型——byte、short、int、long:0
浮点型——float、double:0.0
字符型——char:0(或'\u0000')
布尔型——boolean:false
引用数据类型(类、数组、接口):null
局部变量:没有初始化值
意味着:在调用局部变量之前,必须要显式赋值
特别地:形参在调用时,赋值即可
2.4? 在内存中加载的位置:
属性:加载到堆空间中
局部变量:加载到栈空间中
(四)类中方法的声明和使用
方法:描述类应该具有的功能
1.方法的分类:按照是否有形参及返回值
| 无返回值 | 有返回值 |
|---|
| 无形参 | void方法名( ){} | 返回值的类型 方法名( ){} |
|---|
| 有形参 | void方法名(形参列表){} | 返回值的类型 方法名(形参列表){} |
|---|
2.方法的声明:
权限修饰符? 返回值类型? 方法名(形参列表){
? ? ? ? ? ? ? ? ? ? ? ?方法体
}
3.说明
? ? ? ? ?3.1? 关于权限修饰符
? ? ? ? ? ? ? ? ?JAVA规定的四种权限修饰符:private? ?public? ?缺省? ?protected
? ? ? ? ?3.2? 返回值类型? ——? 有返回值 & 没有返回值
? ? ? ? ? ? ? ? ?3.2.1? 如果方法有返回值,则必须在方法声明时,指定返回值的类型.同时,方法中需要? ? ? ? ? ? ? ? ? ? ? ? ? ? ?使用return关键字来返回指定类型的变量或常量
? ? ? ? ? ? ? ? ?3.2.2??
二、面向对象的三种特征
(一)封装性
(二)继承性
(三)多态性
*(四)抽象性
三、其它关键字
this? super? static? final? abstract? interface? package? import等
|