Java语言基础之:面向对象
2015-01-29 19:21
274 查看
一、 面向对象概念
1.1 理解面向对象
面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。
区别在于:面向过程强调的是功能行为;面向对象将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
1.2 面向对象的特点
1、是一种符合人们思考习惯的思想
2、可以将复杂的事情简单化
3、将程序员从执行者转换成了指挥者
如何实现需求: 如果有具备所需功能的对象,就调用这个对象;如果没有就创建一个具备所需功能的对
象并调用这个对象来完成需求先要去找具有所需的功能的对象来用。这样可以提高程序复用性并简化开发。
简言之:Java中实现需求就是找对象,建立对象,使用对象,维护对象的关系
1.3 面向对象开发过程、设计过程、特征
1、开发的过程:其实就是不断的创建对象,使用对象, 指挥对象做事情
2、设计的过程:其实就是在管理和维护对象之间的关 系。
3、面向对象的特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)
现实中对象无处不在:
空调:我们只需要操作遥控上的加热、制冷按钮,空调就能实现相应功能,而不需要我们去关心
其内部是如何运作。
灯:只需要打开开关,灯就会亮,而不用去了解灯内部具体的构造和实现原理。
二、类与对象的关系
类是对拥有相同行为特征对象的一个抽象描述,而对象是类这个抽象概念中事实存在的个体。
如:人类是对所有人的描述,张三就是这个类中的具体对象。
映射到Java中:描述就是被class定义的类(如 class Person)。具体对象就是Java在堆内存中
用new建立的实体(如 Person ZhanSan=new Person())
2.1 类与对象(图例)
类与对象的关系如图
可以理解为:
类就是图纸:图纸是用来描述汽车的属性。
汽车就是堆内存中的对象:汽车是具备图纸所描述属性的具体实体。
2.2 类的定义
生活中描述事物无非就是描述事物的属性和行为。
如:人有身高,体重等属性,有说话,打球等行为。
Java中用类class来描述事物也是如此:
属性:对应类中的成员变量。
行为:对应类中的成员函数。
定义类其实就是在定义类中的成员(成员变量和成员函数)。
2.3 成员变量和局部变量的区别
成员变量:成员变量定义在类中,在整个类中都可以被访问;成员变量存在于堆内,随着对
象的建立而建立,如果不再使用,JVM会应用垃圾回收机制进行回收;成员变量有默认初始化值。
局部变量:局部变量只定义在局部范围内,如函数内、语句内等;局部变量存在于栈内存中。
当作用的范围结束,变量空间会自动释放;局部变量没有默认初始化值。
2.4 创建对象,使用对象(以车为例)
对上例代码中对象在内存中结构的描述:
2.5 匿名对象
匿名对象是对象的简化形式
匿名对象两种使用情况:
1、当对对象方法仅进行一次调用时,用匿名对象来实现比较简化;如果对一个对
象进行多个成员调用,必须给这个对象起名字
2、匿名对象可以作为实际参数进行传递。
代码实例:
三、 封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:1.将变化隔离 2.便于使用 3.提高重用性 4.提高安全性
封装原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。
private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成
员只在本类中有效(既被私有修饰的成员只能被本类调用)。
Private关键字常用到的一个示例:将成员变量私有化,对外提供对应的set 、get 方法对
其进行访问。提高对数据访问的安全性。
四、 构造函数
构造函数特点:
1.函数名与类名相
2.不用定义返回值类
3.不可以写return语句作用: 给对象进行初始化。
注意:
1.默认构造函数的特点。
2.多个构造函数是以重载的形式存在的。
3.构造函数对象一建立就会调用与之对应的构造函数
构造函数的小细节:
1.当一个类中没有定义构造函数时,那么系统会默认给该类加入一个
空参数的构造函数
2.当在类中自定义了构造函数后,系统默认构造函数就消失
构造函数和一般函数区别:
1.写法上不同。
2.在运行上也有不同;构造函数是在对象一建立就运行,给对象初始化。
而一般方法是对象调用才执行,是给对象添加对象具备的功能
3.一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次
什么时候定义构造函数:
当分析事物时,该事物存在具备一些特性或者行为, 那么将这些内容定义在构造函数中
构造代码块:
构造代码块(定义不同对象共性的初始化内容)
作用:给对象进行初始化
运行:对象一建立就运行,而且优先于构造函数执行
与构造函数区别:
1.构造代码块是给所有对象进行统一初始化
2.而构造函数是给对应的对象初始化
代码示例:
五、this关键字
特点:this代表其所在函数所属对象的引用。 换言之:this代本类对象的引用。
换言之:哪个对象在调用this所在的函数,this就代表哪个对象。
什么时候使用this关键字:当在函数内需要用到调用该函数的对象时,就用this。
六、static关键字
static关键字用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下特点:
1.随着类的加载而加载
2.优先于对象存在
3.被所有对象所共享
4.可以直接被类名调用
使用注意:
1.静态方法只能访问静态成员
2.静态方法中不可以写this,super关键字
3.主函数(main)是静态的
1.1 理解面向对象
面向对象是相对面向过程而言,面向对象和面向过程都是一种思想。
区别在于:面向过程强调的是功能行为;面向对象将功能封装进对象,强调具备了功能的对象。
面向对象是基于面向过程的。
1.2 面向对象的特点
1、是一种符合人们思考习惯的思想
2、可以将复杂的事情简单化
3、将程序员从执行者转换成了指挥者
如何实现需求: 如果有具备所需功能的对象,就调用这个对象;如果没有就创建一个具备所需功能的对
象并调用这个对象来完成需求先要去找具有所需的功能的对象来用。这样可以提高程序复用性并简化开发。
简言之:Java中实现需求就是找对象,建立对象,使用对象,维护对象的关系
1.3 面向对象开发过程、设计过程、特征
1、开发的过程:其实就是不断的创建对象,使用对象, 指挥对象做事情
2、设计的过程:其实就是在管理和维护对象之间的关 系。
3、面向对象的特征:封装(encapsulation)、继承(inheritance)、多态(polymorphism)
现实中对象无处不在:
空调:我们只需要操作遥控上的加热、制冷按钮,空调就能实现相应功能,而不需要我们去关心
其内部是如何运作。
灯:只需要打开开关,灯就会亮,而不用去了解灯内部具体的构造和实现原理。
二、类与对象的关系
类是对拥有相同行为特征对象的一个抽象描述,而对象是类这个抽象概念中事实存在的个体。
如:人类是对所有人的描述,张三就是这个类中的具体对象。
映射到Java中:描述就是被class定义的类(如 class Person)。具体对象就是Java在堆内存中
用new建立的实体(如 Person ZhanSan=new Person())
2.1 类与对象(图例)
类与对象的关系如图
可以理解为:
类就是图纸:图纸是用来描述汽车的属性。
汽车就是堆内存中的对象:汽车是具备图纸所描述属性的具体实体。
2.2 类的定义
生活中描述事物无非就是描述事物的属性和行为。
如:人有身高,体重等属性,有说话,打球等行为。
Java中用类class来描述事物也是如此:
属性:对应类中的成员变量。
行为:对应类中的成员函数。
定义类其实就是在定义类中的成员(成员变量和成员函数)。
2.3 成员变量和局部变量的区别
成员变量:成员变量定义在类中,在整个类中都可以被访问;成员变量存在于堆内,随着对
象的建立而建立,如果不再使用,JVM会应用垃圾回收机制进行回收;成员变量有默认初始化值。
局部变量:局部变量只定义在局部范围内,如函数内、语句内等;局部变量存在于栈内存中。
当作用的范围结束,变量空间会自动释放;局部变量没有默认初始化值。
2.4 创建对象,使用对象(以车为例)
class Car//对Car这类事物进行描述 { String color = "red"; int num = 4; public static void show() { System.out.println("color="+color+"..num="+num); } } class CarDemo { public static void main(String[] args) { Car c1 = new Car();//建立对象 Car c2 = new Car(); c2.color = "black";//对对象的属性进行修改 c2.show();//使用对象的功能。 } }
对上例代码中对象在内存中结构的描述:
2.5 匿名对象
匿名对象是对象的简化形式
匿名对象两种使用情况:
1、当对对象方法仅进行一次调用时,用匿名对象来实现比较简化;如果对一个对
象进行多个成员调用,必须给这个对象起名字
2、匿名对象可以作为实际参数进行传递。
代码实例:
class Car { String color="red"; int num=4; void run() { System.out.println(color+","+num); } } class NiMingObject { public static void main(String[] args) { new Car().num=5; //在堆内新开辟Car类型的实例1,并将num改为5 new Car().color="blue";//在堆内新开辟Car类型的实例2,并将color改为blue new Car().run();//在堆内新开辟Car类型的实例3,调用其run()方法 Car c=new Car(); c.num=6; c.run(); //实例c可以通过c.对象成员 对属性进行修改及方法调用 new Car().num=6;//匿名对象只能修改一个属性 new Car().run();//匿名对象只能调用一个方法 Car q=new Car(); q.run(); } }
三、 封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:1.将变化隔离 2.便于使用 3.提高重用性 4.提高安全性
封装原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。
private关键字:是一个权限修饰符,用于修饰成员(成员变量和成员函数),被私有化的成
员只在本类中有效(既被私有修饰的成员只能被本类调用)。
Private关键字常用到的一个示例:将成员变量私有化,对外提供对应的set 、get 方法对
其进行访问。提高对数据访问的安全性。
class Person { //将age私有化之后,类以外即使建立了对象也不能直接访问,但人有年龄 //,就需要在Person类中提供对应访问age的方式 private int age; public void setAge(int a) { if (a>0&&a<130) { age=a; } else System.out.println("年龄错误"); } public int getAge() { return age; } void talk() { System.out.println("age="+age); } } class PersonDemo { public static void main(String[] args) { Person p=new Person(); //a.age=-23; //:30: 错误: age可以在Person中访问private p.setAge(-32); p.talk(); //输出结果”年龄错误 age=0“ //成员变量有默认值 局部变量不初始化不能参与运算 } }
四、 构造函数
构造函数特点:
1.函数名与类名相
2.不用定义返回值类
3.不可以写return语句作用: 给对象进行初始化。
注意:
1.默认构造函数的特点。
2.多个构造函数是以重载的形式存在的。
3.构造函数对象一建立就会调用与之对应的构造函数
构造函数的小细节:
1.当一个类中没有定义构造函数时,那么系统会默认给该类加入一个
空参数的构造函数
2.当在类中自定义了构造函数后,系统默认构造函数就消失
构造函数和一般函数区别:
1.写法上不同。
2.在运行上也有不同;构造函数是在对象一建立就运行,给对象初始化。
而一般方法是对象调用才执行,是给对象添加对象具备的功能
3.一个对象建立,构造函数只运行一次。而一般方法可以被该对象调用多次
什么时候定义构造函数:
当分析事物时,该事物存在具备一些特性或者行为, 那么将这些内容定义在构造函数中
构造代码块:
构造代码块(定义不同对象共性的初始化内容)
作用:给对象进行初始化
运行:对象一建立就运行,而且优先于构造函数执行
与构造函数区别:
1.构造代码块是给所有对象进行统一初始化
2.而构造函数是给对应的对象初始化
代码示例:
class Person { private String name;//构造代码块 private int age;//构造代码块 Person() { System.out.println("A:name="+name+",,age"+age); } Person(String n) { name=n; System.out.println("B:name="+name+",,age"+age); } Person(String n,int a) { name=n; age=a; System.out.println("B:name="+name+",,age"+age); } } class PersonDemo2 { public static void main(String[] args) { Person p2=new Person(); Person p1=new Person("zhang"); Person p3=new Person("zhang",6); } }
五、this关键字
特点:this代表其所在函数所属对象的引用。 换言之:this代本类对象的引用。
换言之:哪个对象在调用this所在的函数,this就代表哪个对象。
什么时候使用this关键字:当在函数内需要用到调用该函数的对象时,就用this。
六、static关键字
static关键字用于修饰成员(成员变量和成员函数)
被修饰后的成员具备以下特点:
1.随着类的加载而加载
2.优先于对象存在
3.被所有对象所共享
4.可以直接被类名调用
使用注意:
1.静态方法只能访问静态成员
2.静态方法中不可以写this,super关键字
3.主函数(main)是静态的
相关文章推荐
- 3. Java语言基础和面向对象设计
- 黑马程序员——java语言基础——面向对象
- [java学习笔记]java语言核心----面向对象基础
- 黑马程序员——Java语言基础——03.面向对象(3)异常
- 黑马程序员——Java语言基础——03.面向对象(1)思想和一些概念
- [零基础学JAVA]Java SE面向对象部分-06.面向对象基础(01)
- [零基础学JAVA]Java SE面向对象部分-11.面向对象基础(06) 推荐
- [零基础学JAVA]Java SE面向对象部分-14.面向对象高级(02) 推荐
- 面向对象语言基础 一
- 初学Java---面向对象基础1
- [零基础学JAVA]Java SE面向对象部分-17.面向对象高级(05) 推荐
- [零基础学JAVA]Java SE面向对象部分-21.包及访问权限 推荐
- [零基础学JAVA]Java SE面向对象部分-15.面向对象高级(03) 推荐
- Java面对对象编程---学习笔记(JAVA语言基础)
- 第二天----Java基础---面向对象上
- 《跟我学Java 26日通》第6天面向对象基础(1)
- [零基础学JAVA]Java SE面向对象部分-20.异常的捕获与处理 推荐
- [零基础学JAVA]Java SE面向对象部分-09.面向对象基础(04)
- Java面向对象基础要点
- [零基础学JAVA]Java SE面向对象部分-08.面向对象基础(03)