类与对象
面向对象思想
面向对象思想---官方语言:
面向对象是一种设计的思想,与具体实现的语言工具无关。能让软件架构更符合人的思维模式,更为清晰明了,更易于理解与维护。这是大型软件必然的选择。面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。
相关理解
什么是面向对象编程思想?
难道把属性和方法封装在一起就是面向对象编程吗?
要回答这俩个问题,必须进入更深层层次看问题
抛开表象看本质。从本质概念上讲,面向对象大概有两层次的内涵:
- 基于对象。就是题主所说的,只要把数据和函数放在一起就可以了。(外加普通的“继承”,不考虑多态的简单继承还算是基于对象的。)
- 多态。首先,方法可以在子类中重写;调用对象方法的时候,调用父类还是子类还是孙类的方法,能否自动选择到合适的呢?解决这个问题的设计就是“多态”。
实际上“基于对象”最重要、最常用、最根本。讨论问题本质的时候,甚至可以先不管多态。多态虽然很有用,但是如果把二者放在一起讨论,反而只会捣乱。
也就是说,要想理解透、用好 面向对象 ,关键要理解透、用好 基于对象 ,而这恰恰就是题主所说的,只要把属性和方法正确封装好,事情就成功了大半。
1、面向对象学习的三条主线:
- Java类及类的成员:属性、方法、构造器:代码块、内部类
- 面向对象的大特征:封装性、继承性、多态性、( 抽象性 )
- 其它关键字:this、super、static、final、abstract、interface、package、import等
大处着眼,小处着手
2、面向对象与面向过程(理解)
- 面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
- 面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
举例对比:人把大象装进冰箱
/*
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做
1.打开冰箱
2.把大象装进冰箱
3.把冰箱门关住
面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做
人{
打开(冰箱){
冰箱.开门();
}
操作(大象){
大象.进入(冰箱);
}
关闭(冰箱){
冰箱.关门();
}
}
冰箱{
开门(){ }
关门(){ }
}
大象{
进入(冰箱){ }
}
*/
3. 完成一个项目(或功能)的思路
- 根据问题需要,选择问题所针对的现实世界中的实体
- 从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类
- 把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构成计算机能够识别和处理的数据结构
- 将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具
4. 面向对象中两个重要的概念:
类:对一类事物的描述,是抽象的、概念上的定义
对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)
- 面向对象程序设计的重点是类的设计
- 设计类,就是设计类的成员
二者的关系:
对象,是由类new出来的,派生出来的
5. 面向对象思想落地实现的规则一
- 创建类,设计类的成员
- 创建类的对象
- 通过 " 对象.属性 " 或 “ 对象.方法 ” 调用对象的结构
补充:几个概念的使用说明
- 属性 = 成员变量 = field = 域、字段
- 方法 = 成员方法 = 函数 = method
- 创建类的对象 = 类的实例化 = 实例化类
6、 对象的创建与对象的内存解析
典型代码:
Person p1 = new Person();
Person p2 = new Person();
Person p3 = p1;//没有新创建一个对象,公用一个堆空间中的对象实体
说明:
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非 static 的)
意味着:如果我们修改一个对象是属性a,则不影响另一个对象属性a的值
对象的内存解析:
7、匿名对象:
定义:我们创建的对象,没显式的赋给一个变量名。即为匿名对象
特点 : 匿名对象只能调用一次
举例:
//匿名对象
new Phone().sendEmail();
new Phone().playGame();
new Phone().price = 1999;
new Phont().showPrice();//0.0
应用场景:
PhontMall mall = new PhoneMall();
//匿名对象的使用
mall.show(new Phone());
//其中类
class PhoneMall{
public void show(Phone phone){
phone.sendEmail();
phone.playGame();
}
}
8、理解“万事万物皆对象”
- 在java语言范畴中,我们都将功能、结构等封装到类中,通过类的实例化,来调用具体的功能结构
- Scanner , String 等
- 文件:File
- 网络资源:URL
- 涉及到Java语言与前端Html、后端的数据库交互时,前后端的结构在Java层面交互时,都体现为类、对象
JVM内存结构
编译完源程序以后,生成一个或多个字节码文件
我们会议JVM中的类的加载器和解析器对生成的字节码文件解析解释运行。意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析。
《JVM规范》
虚拟机栈,即为平时提到的栈结构。我们将局部变量存储在栈结构中
堆,我们将new出来的结构(比如:数组、对象)加载在堆空间中。补充:对象的属性(非 static 的)加载在堆空间中
方法区:类的加载信息、常量池、静态域