您的位置:首页 > 职场人生

黑马程序员————面向对象(概述,封装,构造函数,this,static)

2014-12-13 15:13 351 查看
概述:

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

理解面向对象:

面向对象是相对于面向过程而言。比如:用手机发送短信,相对于面向过程而言强调的是功能 :打开手机-->编写短信-->发送短信。而Java面向对象的思想就是强调具有功能的对象:手机打开,手机编写短信,手机发送短信。感觉这些过程是你自己亲自在做,而用面向对象的思却是你指挥着手机去做。面向对象和面向过程都是一种思想,面向对象是基于面向过程的。

面向对象是相对面向过程而言。
面向对象和面向过程都是一种思想。
面向过程:强调的是功能行为。
面向对象:将功能封装进对象,强调了具备功能的对象。面向对象时基于面向过程的。
过程其实就是函数,对象是将函数等一些内容进行了封装。

面向对象的特点:

是一种符合人们思考习惯的思想。
可以将复杂的事情简单化。
将程序员从执行者转换成了指挥者。

在Java中开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。

设计的过程:其实就是在管理和维护对象之间的关系。

封装(Encapsulation):

概念:是指隐藏对象的属性和实现细节,仅对外提供访问方式。

原则:将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共方法对其访问。

好处:将变化隔离,便于使用。提高重用性,提高安全性。

封装的表现形式之一 --> private:私有,权限修饰符,用于修饰类中的成员(成员函数,成员变量)。私有只在本类中有效。

私有只是封装的一种表现形式。之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句。对访问的数据进行操作,提高代码的健壮性。
一个成员变量 通常会对应两个访问方式一个是设置值,一个是获取值。

构造函数:

定义格式:

class 类名称

{

访问权限 类名称(类型1 参数1,类型2 参数2,…)

{

程序语句;

}

}

特点:

1 函数名与类名相同。
2 不用定义返回值类型。
3 不可以写return语句。

作用:

给对象初始化。

注意:

默认构造函数的特点。

当一个类中没有定义构造函数时,那么系统会给该类加入一个空参数的构造函数。
当在类中自定义了构造函数之后,默认的构造函数就没有了

多个构造函数式以重载的形式存在的。

构造函数是给不同的对象进行分别初始化。

构造函数 对象一建立就会调用与之对应的构造函数。
一个类中默认会有一个空参数的构造函数,这个默认的构造函数的权限和所属类一致。

如果类被public修饰,那么默认的构造函数也带public修饰符。
如果类没有被public修饰,那么默认的构造函数,也没有public修饰。
默认构造构造函数的权限是随着的类的变化而变化的。

构造函数与一般函数不同之处:

构造函数和一般函数在写法上有不同。
在运行上也有不同:构造函数是在对象一建立就运行。给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能。
一个对象建立,构造函数只运行一次。而一般方法可以被对象调用多次。

什么时候定义构造函数

当分析事物时,该事物存在具备一些特性或者行为,那么将这些内容定义在构造函数中。

构造函数可以被私有化,但是被私有化的构造函数式不能创建对象的。

this关键字:

this:代表本类的对象,代表它所在函数所属对象的引用。简单说:哪个对象在调用this所在的函数,this就代表哪个对象。
当定义类中功能时,该函数内部要用到调用函数的对象时,这时用this表示这个对象。但凡本类功能内部使用到了本类对象,都用this表示。
应用:

用于区分同名变量
用于构造函数之间进行互相调用。

注:this语句只能定义在构造函数的第一行。初始化动作要先执行,如果初始化中还有初始化的话,就先执行更细节的初始化。

示例:

class Person
{
//定义私有属性
private String name;
private int age;
Person (int age)//构造函数
{
this.age = age;
}
Person(String name)
{
//name = name; //局部变量的名称和成员变量的名称相同,此时两个name都是局部的name。
this.name = name;//this 表面上是区分成员变量和局部变量。
}
Person(String name,int age)
{
this(name);//this语句,调用构造函数Person(String name)
//this.name = name;
this.age = age;
}
public void speak()
{
System.out.println("name =" + this.name + ",,age =" + this.age);
this.show();
}
public void show()
{
System.out.println(this.name);
}
/*
需求:给人定义一个用于比较年龄是否相同的功能。
*/
public boolean compare(Person p)
{
return this.age == p.age;
}
}

class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("lisi ");
Person p1 = new Person("zhangsan");
//在一个类中成员之间完成互相调用都是对象来完成的。
p.speak();
p1.speak();
Person p2 = new Person(15);
Person p3 = new Person(20);
boolean b = p2.compare(p3);//this和p2指向了同一个地址值,也就是同一个对象
System.out.println(b);
}
}

结果如下



static(静态)

用法:

是一个修饰符,用于修饰成员(成员变量,成员函数)。
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,
还可以直接被类名调用。类名.静态成员。

static特点:

随着类的加载而加载 。

当类加载到内存中时,static所修饰的成员就已经在内存中(方法区,共享区,数据区)开辟好了空间。
也就是说静态会随着类的消失而消失,生命周期最长。

优先于对象存在。静态是先存在的,对象后存在。
被所有对象所共享。
可以直接被类名所调用。 类名.静态成员。

实例变量和类变量的区别:

存放位置:

实例变量:随着对象的建立而存在于堆内存中。
类变量:随着类的加载而存在于方法去中。

生命周期:

实例变量:生命周期随着对象的消失而消失。
类变量:生命周期最长,随着类的消失而消失。

静态的使用注意事项:

静态方法只能访问静态成员(成员变量,成员函数).。非静态方法可以访问静态,也可以访问非静态。
静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this,super关键字。
主函数是静态的。

静态有利有弊

利处:对对象共性数据进行单独空间存储,节省内存空间。没有必要每个对象中都存储一份,可以直接用类名调用。
弊端:生命周期过长,访问出现局限性,静态成员只能访问静态。

什么时候使用静态?

什么时候定义静态变量(类变量)

当对象中出现共享数据时,该数据被静态所修饰。对象中的特有数据要定义成非静态存在于堆内存中。

什么时候定义静态函数

当功能内部没有访问到非静态数据(对象的特有数据),那么这时该函数(功能)可以定义成静态。

静态代码块

就是一个有静态关键字标示的一个代码块区域。定义在类中。

格式:

static

{

静态代码块中执行语句。

}

特点:

随着类的加载而执行,只执行一次,如果和主函数在同一类中,优先于主函数执行。

作用:

用于给类进行初始化的。

实例:

class StaticCode{
static
{
System.out.prontln("a");
}
}

class StaticCodeDemo
{
static
{
System.out.prontln("b");
}
public static void main(String[] args)
{
new StaticCode();
new StaticCode();//因为类已经加载,静态代码块已经执行过,所以没有打印结果。
System.out.prontln("over");
}
static
{
System.out.prontln("c");
}
}

//打印结果 b c a over
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐