Java学习笔记之面向对象1
什么是面向过程思想?面向过程简单的讲就是描述清楚完成一件事情所需的所有步骤,比如吃饭。在吃饭前先要准备好吃饭的食材,然后清洗食材、餐具,再开始用餐具做饭,做好之后再将做好的饭菜放入对应的餐具,最后才开始吃饭……中间有很多具体琐碎的步骤都需要我们一一完成。在计算机语言中的典型代表就是C语言。
什么是面向对象思想?面向对象简单的讲就是在完成一件事情时,把具体的细节交给“专业”的人去做,我们只需要去“调用”他们相应的功能,然后“他们”把完成的情况反馈给我们,最后得到最终的结果。还以吃饭为例,我们去餐馆吃饭时,只需对照菜单(相当于java的API)点菜,然后付钱(传入参数),最后就等待吃饭了。整个做饭的过程由专业的厨师等人来完成,我们只需等待最终的结果。在计算机语言中的典型代表是C++、java等语言。
由此可见面向对象是一种更符合我们思想习惯的思想设计模式,可以将复杂的事情简单化,将我们从“执行者”变成了“指挥者”。面向对象开发就是不断的创建对象,使用对象,指挥对象做事情。面向对象设计其实就是在管理和维护对象之间的关系。
java语言中,面向对象有三大特性:封装、继承、多态。
封装是指把对象的属性和行为看成一个密不可分的整体,隐蔽对象的功能实现细节。,对外提供公共的访问方式,提高了代码的复用性和安全性。类、方法、接口和被private修饰的成员变量都是封装的体现形式。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。这种技术使得复用以前的代码变得容易,能够大大缩短开发周期,降低开发费用。提高了代码的复用性与维护性。
多态按字面的意思就是“多种状态”。即同一个事物,在不同时刻表现出来的不同状态。在面向对象语言中,接口的多种不同的实现方式即为多态。多态的关键就是父类引用指向子类对象。
类与对象
Java语言是以“类”为单位的,“类”是对某一类事物相关的属性和行为的描述,是抽象的、概念上的定义。对象就是该类事物的具体体现,也称实例(Instance)。类的主要作用就是用来创建“对象”的。
举例:类和对象的关系图1所示。
图1
图1中,汽车设计图就是“类”,由这个图纸设计出来的若干的汽车就是“对象”。由此可见“类”就相当于一个模板,而“对象”就是该模板生产出来的具体实例。
public classPhone {
//成员变量
privateString brand; //品牌
private doublesize; //尺寸
//构造方法【作用:初始化成员变量】
publicPhone(String brand,doublesize){
this.brand = brand;
this.size = size;
}
//成员方法
public voidfunction(){
System.out.println("我是"+brand+"牌"+size+"寸的手机");
System.out.println("我具备打电话,发短信,上网等功能");
}
}
程序说明:
成员变量用来描述对象的静态属性。
构造方法在创建对象的时候,用来给对象中的成员进行数据初始化,如果没有写构造方法时,java虚拟机会给出一个空参数构造方法。当我们自己写了构造方法的时候(不管是有参还是无参),Java虚拟机就不会为我们自动创建空参数构造方法了。
成员方法是对象的动态特征。
对象的创建
public classPhoneTest {
public static voidmain(String[] args) {
//声明并实例化对象:有参构造函数
Phone P1 =newPhone("苹果", 5.0);
P1.function();
//System.out.println("----------------------")
//声明并实例化对象:有参构造函数
Phone P2 =newPhone("华为", 5.5);
//调用myPhone1中的方法
P2.function();
}
}
程序说明:
用new关键字和构造方法Phone()来创建对象,一个类可以创建多个对象。
可以用对象名.方法名的方式来调用对象的方法。
对象名P1和P2是局部变量,在内存的栈区分配,
newPhone("苹果", 5.0)和newPhone("华为", 5.5)是在内存的堆区分配的,是两个不同的对象。
程序输出结果:
我是苹果牌5.0寸的手机
我具备打电话,发短信,上网等功能
我是华为牌5.5寸的手机
我具备打电话,发短信,上网等功能
main方法说明
public:由于jvm需要调用类的main()方法,所以该方法的访问权限要足够大。
Static:JVM在执行main()方法时不必创建对象,直接用类名.方法名来访问。
void:表示main()方法不需要向java的jvm返回任何值。
main:一个约定俗成的程序主函数入口名称,虽然不是关键字,但是被jvm识别。
String[] args:在scanner类出现以前用于接收键盘输入String类型的字符串数组参数,该数组保存执行java命令时,传递给所运行的类的参数。
该程序执行时在内存中的分配过程,如图2所示。
图2
内存分配说明:
代码区code:存放编译后生成的xxx.class文件。
数据区data:存放静态变量和字符串常量。
堆区heap:存放new出来的对象,包括成员变量和方法的地址。
栈区stack:存放要执行的方法地址和局部变量。
本文是面向对象的前期基础学习笔记,如有总结错误,欢迎批评指正!