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

黑马程序员:面向对象之----------------------封装

2013-03-24 15:13 351 查看
------- android培训java培训、期待与您交流!
----------

面向过程
c BASIC
对问题的进行步骤的分析
并通过具体的功能(函数)进行体现
然后就按照步骤进行执行即可

面向对象
强调的问题领域中涉及的事物
并分析事物中具备的属性和行为
将属性和行为都封装到一个具体的事物中
而这个事物我们称其为对象

需求
将大象装进冰箱里
面向过程
1、 打开冰箱
2、 装入冰箱
3、关闭冰箱

面向对象
操作的是谁? 是冰箱
现在是面向具体的对象
只要找到了对象,就可以使用对象的功能
在面向对象中 角色已经变成了指挥者

面向过程 和面向对象
只不过是角色的转变了
面向过程:执行者
面向对象:指挥者

面向对象
1、面向对象是一种符合人们思考习惯的思想
2、面向对象可以将复杂的问题简单化
3、面向对象将执行者变成了指挥者

对象就是一个实实在在的实体

谁最清楚这功能,就定在谁的身上。

万物皆对象

在面试的过程中
1、角色的转变
2、复杂变简单
面向对象
三个特征
1、封装 2、继承 3、多态

在分析事物的时候,问题领域(需要求):其实就是找出问题领域中的涉及的对象
--------------
类与对象的关系

类就将多个对象具备的共性内容进行抽取而来的,一个描述事物的方式
对象: 计算机堆内存中对象 new Student();
类:是JAVA对具体生活中事物的描述
对象:该事物实实在在存在个体(在计算机该个体是通过new关键字建立)
-----------
类与对象的关系

例如:
汽车
生活中:
汽车图纸就是对汽车这类事物的描述
汽车就是实实在在存在的个体

类就是图纸
汽车就是堆内存中的对象

class Car
{
}
void run()
{

}

其实描述事物无非就是描述事物的属性和行为

以后玩的时候 只 要找对象就可以了。
对象里面是封存的数据(但是是不同数据类型 )
------------------
定义类其实就是在定义类中的成员
成员括两种
成员变量:事物的属性,定义在类中的变量
成员函数:事物的行为

成员变量和局部变量的区别
----- 在代码的定义位置
成员变量:定义在类中
局部变量:定义在函数中,或者语句内

----- 在内存中的位置
成员变量:是创建对象时,才存在于对象中,而且存在于堆内存中
成员变量随着对象的加载而存在,随着对象的变垃圾被回收而消失

局部变量:随着该变量所属函数或者语句的区域运行而存在,而且存在栈内存中
当该 变量所属的作用域结束,该变量就释放
-----初始化值的区别
成员变量:因为在堆内存中,所以都有默认初始化值
局部变量:在定义时,如果要被使用,必须明确指定初始化值

显示初始化
如果对成员变量已经定义 了初始化称为显示初始化值

-------
匿名对象
例如 new car();//匿名对象
Car c=new Car(); new Car().color="红色"

如果只对对象方法只调用一次时,就可以使用匿名对象

****如果对一个对象进行多个成员调用,必须给这个对象起名字
匿名对象其实就是一种简化形式
注意:
当对对象的方法只调用一次时,可以使用匿名对象来完成
匿名 对象可以作为实际参数进行传递
//需求
汽车修配三,对汽车进行改装
public static void main(String[] args)
{
Car q=new Car();
}

public static void show(Car c)
{

c.num=3;
c.color="black"
c.run();

}
当show(new Car()); 执行完以后,函数空间就释放了,将不再会有变量指向对象,那么个对象变成垃圾了
*** 让对象变成垃圾的方法
q=null;

----------------------------------------
封装
好处
将变化隔离
便于使用
提高重用性
提高安全性

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

关键字private (对象私有化后,只能在本类中进行使用)
是一权限修饰符
用于修饰成员(成员变量和成员函数)
private int age;
private static void speak(0
{
}
被私有化的成员只在本类中有效

记住
将类中的属性都私有化
通过对外提供方法对其继续访问,因为有了方法可以对数据进行控制
对于属性的访问无外乎,设置 和获取
所以通常使用的方问方式规范:setXX getXX就是属性名
private String name;

public void setName(String name)  //用来给该属性进行赋值
{
this.name=name;
}
public String getName() //用来获取该属性的值 。
{

return name;
}

get 的返回值类型一定是获取变量的返回类型(name的返回类型)
set 的返回类型一定是void
私有仅是封装的一种形式
记住:
成员变量在堆内存中,所以有初始化值,可以直接参与运算
局部变量在栈内存中,所以没有初始化值,不可以直接参与运算

构造函数
函数名与类名相同
不用定义返回值类型
没有具体的返回值
class Person
{

Person(){}

}
publiv static void main(String[] args)
{
Person p=new Person();  //给对象进行初始化值(只要一new 就会调用)

}

只要创建对象,对象都必须初始化,也就是对象都 必须在创建时调用构造函数
如果对象初始化是调用不到对应的构造函数,编译失败

通过class关键字定义类时
该类中的如果没有指定过构造函数
那么该 类会有一个默认的空参数构造函数

如果在类中自定义了构造函数,那么默认构造函数就没有了

作用
给对象进行初始化
注意
默认构造函数: 当没有定义构造函数时,jvm会自动去调用默认的构造函数
Person(){}

构造函数的重载
person(){}
person(String name,int age){

this.name=name;
this.age=age;
}

初始化的参数与个数必须要一样

构造函数与一般函数的区别

写法上的不同
构造函数:Person(){}
一般函数:public void person(){}

运行上的不同:
只要一创建对象,构造函数就自动运行
必须要对象调用才可以使用

次数:
构造函数只在对象创建时调用一次,因为初始化动作只执行一次
一般函数是对象创建后调用,可以调用多次

只要一 new对象 构造函数就运行了
构造函数是对对象初始化值

记住: 如果对象一产生就需要完成一些属性值的定义,或者行为的运行
这些内容都定义在构造函数中,如果属性值不确定,可以在构造函数的参数列表上体现
这些内容都定义在构造函数中(当分析的事物,属性或行为)

什么时候定义构造函数??
当分析事物时,该事物具备一些特性或行为,就将这些特性或行为定义在构造函数中
**** 构造函数的参数根据:有没有未知参数参与运算,有就定义函数的参数个数及参数类型

构造 代码块
{ //
System.out.println();

}
作用: 给对象进行初始化
特点:只要一创建对象,该对象自动执行,优先于构造函数执行

构造代码块与构造函数的区别
构造代码块是给所有对象初始化
构造函数: 给指定对象进行初始化
构造函数也可以被private私有化,因为构造函数也是成员函数,当类中的构造函数被私有化后,对象是无法建立的

this关键字:
当成员变量和局部变量同名时,需要区分可以使用一个关键字:this
this代表一个本类对象。
*********
this :其实代表的是this所在函数所属的对象引用
简单讲:哪个对象在调用this所在的函数 ,this 就代表哪 个对象
this就代表当前对象

谁调用,this.name 那么个this就代表那个对象的引用
***

以后当看到this时,首先要想到它是某个对象的引用。
class Person
{
Person(String name,inta age)
{
this.name=name;  //this代表的是p1的对象引用
this.age=age;

}

public void show()
{

}

}
public static void main(String[] args)
{
Person p1=new Person("lisi","20");

p1.show();

}

在类中成员访问,记住,必须要用对象调用的方式
如果在本类中没有产生对象,使用成员都是用this完成

this在构造函数间的调用

this:在构造函数中的应用
可以通过this在构造函数中对其他构造函数进行调用
怎么表示构造函数间的调用就是用:this();

*****this语句调用构造函必须是要放在第一行
***** 一般函数是不能直接调用构造函数的
class Person
{

Person(){}
Person(String name,inta age)
{
this();  //此处调用的Person()的构造函数
this.name=name;  //this代表的是p1的对象引用
this.age=age;

}

public void show()
{

}
public static void main(String[] args)
{

Person p1=new Person("lisi","20");//括号内的代表构函数的初始化值
p1.show();

}

## this语句是不能用在一般函数中的,只能在构造函数间

什么时候用this
当定义功能时,功能内部用到了调用该功能的对象。这时该对象用this表示
public boolean compareAge(Person p)
{
if(this.age==p.age) //this.age 对象的引用对象,p.age代表传进来的参数的age值;
return true;
return false;

}


------- android培训java培训、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐