您的位置:首页 > 编程语言 > Java开发

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 创建对象,使用对象(以车为例)

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)是静态的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: