黑马程序员-Java语言基础–面向对象 第5天
来源:互联网 发布:车秘油耗数据导出 编辑:程序博客网 时间:2024/05/13 00:49
---------------------- android培训、java培训、期待与您交流! ----------------------
1、面向对象
一切皆对象,万物皆对象。Everything is Object!from《Think In Java》
面向对象是相对于面向过程而言的,是基于面向过程的。都是程序设计的一种思想。
面向过程:强调的是功能行为。
面向对象:将功能封装进对象,强调具备了功能的对象。
面向对象的特点
是一种符合人们思考习惯的思想
可以将复杂的事情简单化
将程序员从执行者转换成了指挥者
完成需求时:
①先要去找具有所需的功能的对象来用。
②如果该对象不存在,那么创建一个具有所需功能的对象。
③这样简化开发并提高复用。
面向对象的特征:
1、封装(encapsulation)
2、继承(inheritance)
3、多态(polymorphism)
面向对象的开发和设计特征
开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系。
2、类与对象的关系
谁拥有数据,谁就对外提供操作这些数据的方法。--- ---Mr zhang
使用计算机语言就是不断的在描述现实生活中的事物。
名词提炼法:人开门,门是对象,门拥有数据和功能。
Java中描述事物通过类的形式体现,类就是对现实生活中事物的描述。类是具体事物的抽象,概念上的定义(抽象)。提取对象中共性内容而得来的。
对象即是该类事物实实在在存在的个体(具体)。对象存在于堆内存中。
理解:生产汽车:类就是图纸,汽车就是堆内存中的对象
类的定义:
1·生活中描述事物无非就是描述事物的属性和行为。
如:人有身高,体重等属性,有说话,打球等行为。
2·Java中用类class来描述事物也是如此。
属性:对应类中的成员变量。
行为:对应类中的成员函数。
3·定义类其实在定义类中的成员(成员变量和成员函数)。
//需求:描述一个汽车。描述事物其实就是在描述事物的属性和行为。
//类就是图纸。
//汽车就是堆内存中的对象。
//属性对应的是类中的变量,行为对应的类中的函数(方法)。
//其实定义类,就是在描述事物。就是在定义属性和行为。
//属性和行为又共称为类中的成员。(成员变量和成员方法(函数))。
class Car//对Car 这类事物进行描述。
{
String color = "red"; //成员变量,堆内存中
int num = 4;
void show()
{
System.out.println("color="+color+"..num="+num);
}
}
class CarDemo
{
public static void main(String[] args)
{
Car c = new Car();//建立对象,c是一个类类型变量,类类型变量指向对象。
c.color = "black";//对对象的属性进行修改。
c.show();//使用对象的功能。
}
}
成员变量和局部变量(区别)
成员变量:
1·成员变量定义在类中,在整个类中都可以被访问。
2·成员变量随着对象的建立而建立,存在于对象所在的堆内存中。
3·成员变量有默认初始化值。
局部变量:
1·局部变量只定义在局部范围内,如:函数内,语句内等。
2·局部变量存在于栈内存中。
3·作用的范围结束,变量空间会自动释放。
4·局部变量没有默认初始化值。
作用范围:
成员变量作用于整个类中。范围非常的大。
局部变量作用于函数中或语句中。范围更小。
在内存中的存储位置。
成员变量:在堆内存中。因为对象的存在,才在内存中存在。
局部变量:存放在栈内存中。
匿名对象:匿名对象是对象的简化形式。(凡是简化的都有局限性)
匿名对象两种使用情况:
当对对象方法仅进行一次调用的时。
匿名对象可以作为实际参数进行传递。
(匿名对象调用属性没意义,调用方法才有意义。如果对一个对象多个成员调用,必须给对象起个名字。)
//匿名对象
//Car c = new Car();
//c.num = 5;
new Car().num = 5;//等于以上两句话。
new Car().color = "blue";//调用属性,无实际意义。
new Car().run();//调用方法,调用一次时可以使用。
//匿名对象使用方式一:当对对象的方法只调用一次时,可以用匿名对象来完成,这样比较简便。
//如果对一个对象进行多个成员调用,必须给这个对象起个名字。
//匿名对象使用方法二:可以将匿名对象作为实际参数进行传递。
//Car q = new Car();
//show(q);
show(new Car());//匿名对象作为实际参数参与传递。
//需求:汽车修配厂。对汽车进行改装,将来的车改成黑色车。三个轮胎。
public static void show(Car c)
{
c.num = 3;
c.color = "black";
c.run();
}
3、 封装(Encapsulation)
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。(函数就是最小的封装体)
好处:
1.将变化隔离。
2.便于使用。
3.提高重用性。
4.提高安全性。
封装原则:
1·将不需要对外提供的内容都隐藏起来。
2·把属性都隐藏,提供公共方法对其访问。
private(私有)关键字(仅仅是封装的一种表现形式,最小权限)
1·是一个权限修饰符。
2·用于修饰成员(成员变量和成员函数)。
3·被私有化的成员只在本类中有效。
常用之一:将成员变量私有化,对外提供对应的set,get方法对其进行访问。提高对数据访问的安全性。
注意:私有仅仅是封装的一种表现形式。不私有也可以实现封装。(之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性。)
private int age;//私有,不是直接访问得到。age已经封装在person类中。
public void setAge(int a)//对外提供访问方式,其中可以加入逻辑判断语句。
{
if (a>0 && a<130)
{
age = a;
speak();
}
else
System.out.println("null");
}
4、构造函数[day05-08]
特点:
1.函数名与类名相同。
2.不用定义返回值类型。
3.不可以写return 语句。
作用:给对象进行初始化。(对象一建立就调用与之对应的构造函数)
注意:
1、默认构造函数的特点。(构造函数小细节:当类中没有定义构造函数时,系统会默认给该类加入一个空参数的构造函数。方便对象初始化。)
2、多个构造函数是以重载的形式存在的。(而当类中自定义了构造函数后,默认的构造函数就没有了。)
构造函数与一般函数的区别:
1、写法不同。
2、运行不同。
构造函数:对象一建立就运行,一个对象建立只运行一次。
一般方法:对象调用才运行,作用是添加对象具备的功能,可被调用多次。
什么时候定义构造函数?
分析事物时,该事物存在一些特性或者行为,那么就将这些内容定义在构造函数中。
(构造函数可以私有化,但是私有化之后不能用该构造函数创建对象。)
5、构造代码块
构造代码块中定义的是不同对象共性的初始化内容。定义共性的东西。
定义:其中定义的是不同对象共性的初始化内容。
作用:给对象进行初始化。(对象一建立就运行,而且优先于构造函数运行。)
构造代码块和构造函数的区别:
1·构造代码块是给所有对象进行统一初始化。
2·构造函数是给对应的对象初始化。
6、this关键字
特点:this代表其所在函数所属对象的引用。
(哪个对象在调用this所在的(方法)函数,this就代表哪个对象)
换言之:this代表类对象的引用。
什么时候使用this 关键字呢?
1、当在函数内需要用到调用该函数的对象时,就用this。(但凡本类功能内部使用了本类对象,都用this表示)
2、一个类中成员相互调用是对象完成的,同一类中this可省略,但当变量出现同名情况时,一定要加this(此时this用于区分成员变量和局部变量)。
this语句:用于构造函数之间进行相互调用。
this(name);[day05-12]
注意:this语句只能定义在构造函数的第一行,因为初始化动作要先执行。
一般函数是不能直接调用构造函数的,因为this语句不能用在一般函数中。
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
- 黑马程序员-Java语言基础–面向对象 第5天
- 黑马程序员-Java语言基础 –面向对象 第6天
- 黑马程序员-Java语言基础 –面向对象 第7天
- 黑马程序员-Java语言基础–面向对象 第8天
- 黑马程序员-Java语言基础–面向对象 第9天
- 黑马程序员-Java语言基础–面向对象 第10天
- 黑马程序员-java基础第5、6天-面向对象(类的组成部分分析)
- 黑马程序员--Java基础学习(面向对象)第五天
- 黑马程序员--Java基础学习(面向对象)第七天
- 黑马程序员--Java基础学习(面向对象)第八天
- 黑马程序员--Java基础学习(面向对象)第九天
- 黑马程序员——Java基础---面向对象(概述理解)--第5天--第62-66集
- 黑马程序员--Java基础--面向对象基础
- 黑马程序员-----java基础(面向对象基础)
- 黑马程序员-Java语言基础– 多线程 第11天
- 黑马程序员-Java语言基础– 多线程 第12天
- 黑马程序员-Java语言基础– 泛型 第15天
- [黑马程序员]--Java语言面向对象(一)
- 在COM中构建js中Date对象
- 应对Web服务器混合型攻击需要四维防护
- jQuery学习站点
- VIM basic operations
- jQ文件无刷新上传插件下载及介绍
- 黑马程序员-Java语言基础–面向对象 第5天
- iphone helloword
- 二、SVN服务器的搭建和基础配置——Linux服务器篇
- mysql对char和varchar左右空格的处理
- 黑马程序员-----0526班----java基础总结 四
- 黑马程序员-Java语言基础 –面向对象 第6天
- 【XML prolog (UTF-8) is different from that specified in page directive (utf-8)】tomcat版本问题
- HDU 1443 约瑟夫问题
- Tomcat Web应用程序部署