黑马程序员--------------面向对象(一)
来源:互联网 发布:延安大数据 编辑:程序博客网 时间:2024/05/13 08:18
1,什么是面向对象
面向对象是一个抽象的思想,它是相对于面向过程而言的。例如,将大象装到冰箱。面向过程,是先打开冰箱门,再将大象装进去,再关上冰箱门。而面向对象,是将开门和关门的动作封装到冰箱对象的内部,先将冰箱的门打开,再将大象装进装箱里,再将冰箱的门关上。
面向过程:强调的是开门和关门的动作。面向对象:因为将开门和关门封装到了冰箱内部,我们只是调用冰箱的开门和关门的功能。所以按照而向对象的思想,我们可以将作任何事件都看作是对象。面向对象的特点:1,将复杂的事情简单化。2,将执行者变成了指挥者(冰箱.关门)。
面向对象有三个特征:多态,继承,封装
2, 怎么对事物进行描述?
对事物的描述可以分为两个方面:一是属性,二是行为。属性可以看作是成员的变量,行为可以看作是成员函数。例如对小汽车这类事物进行描述,它的属性可以是轮胎数和颜色,而行为是它具备运行的功能。类与对象之间的关系:类是一类事物的描述。而对象则是这类事物的实例。如上例中的汽车图纸是类,而每一辆汽车则是单个的对象,可以通过new 来创建。
3,成员变量和局部变量的区别?
作用范围:成员变量作用于整个类中。而局部变量是作用于函数中,或者是语句中。
在内存中的位置:成员变量在堆内存中,随着对象的创建而存在,随着对象的消失而消失。局部变量是随着所属区域的运行而存在, 当所属区域运行完后就释放。
初始值:成员变量有默认的初始化值,而局部变量必须要有初始化值,否则编译失败。
4,构造函数
构造函数:创建对象时调用的函数。作用:可以给对象进行初始化。对象的创建必须要通过构造函数进行初始化。一个类中如果 没有定义过构造函数,那么该类中会有一个默认的空参数的构造函数。如果定义了构造函数,那么就没有默认的构造函数。
特点:
1:该函数的名称和所在类的名称相同。
2:不需要定义返回值类型。
3:该函数没有具体的返回值。
一般函数与构造函数的区别:
构造函数:对象创建时,就会调用与之对应的构造函数,对对象进行初始化,并且只调用一次。
一般函数:对象创建后,需要它的功能时才调用,可以调用多次。
什么时候定义构造函数?
在描述事物时,当该事物一存在就具备一些内容时,就将这些内容定义在构造函数中。构造函数可以有多个,它可以用来对不同的对象进行针对性的初始化。当有多个构造函数时,这些构造函数就是以重载的方式体现的。例如:
class Person
{
Person(String name)
{
this.name=name;
}
Person(String name,int age)
{
this.name=name;
this.age=age;
}
}
以上这个定义Person类中,就有两个构造函数,第一个是表示人出生就有姓名,而第二个则表示人一出生就有姓名和年龄。
当在创建人的对象时,在内存中是怎么样完成的?
Person p=new Person();
步骤:
1:先将硬盘上指定位置的Person.class文件加载进内存。
2:执行main方法时,在栈内存中开辟了main方法的空间(压栈-进栈),然后在main方法的栈区分配了一个变量p。
3:在堆内存中开辟一个实体空间,分配了一个内存首地址值。new
4:在该实体空间中进行属性的空间分配,并进行了默认初始化。
5:对空间中的属性进行显示初始化。
6:进行实体的构造代码块初始化。
7:调用该实体对应的构造函数,进行构造函数初始化。()
8:将首地址赋值给p ,p变量就引用了该实体。(指向了该对象)
5,构造函数和构造代码块的区别:
构造代码块:是给所有的对象进行初始化,也就是说,所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块(可以在上面Person中定义一个哭的构造代码块,因为人出生时都会哭)。
构造函数:是给与之对应的对象进行初始化。它具有针对性。
6,匿名对象
当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化代码的书写。
Car c=new Car();
c.num=4;
可以写成:new Car().num=4;
7,匿名内部类
也就是没有名字的内部类,一般只调用一次的情况下才会写匿名内部类,当需要多次调用内部类时,就要写完整的方法来创建,这样多次调用起来才会比较方便。写匿名内部类的前提是:内部类必须继承一个类或者实现了接口。
new Oject(){}.show();-------->相当于 Object b=new Object(); b.show();
在上在这个匿名内部中必须复写Object中的方法。
new Objcet (){
void show()
{System.out.println("wo lai le ");
}}.show();
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------- 黑马程序员 面向对象(一)
- 黑马程序员_JAVA_面向对象(一)
- 黑马程序员 java面向对象(一)
- 黑马程序员-------面向对象基础(一)
- 黑马程序员---面向对象(一)
- 黑马程序员--------------面向对象(一)
- 黑马程序员---面向对象(一)
- 黑马程序员--面向对象(一)
- 黑马程序员-------面向对象(一)
- 黑马程序员_JAVA_面向对象(一)
- 黑马程序员_面向对象(一)
- 黑马程序员 JAVA-面向对象(一)
- 黑马程序员_面向对象(一)
- 黑马程序员------面向对象(一)
- 黑马程序员 面向对象(一)
- 黑马程序员--面向对象(一)
- 黑马程序员---面向对象一
- 黑马程序员---面向对象一
- 某粗略计算圆周率的代码
- TCP/IP详解--TCP网络传输数据包1460MSS和1448负载
- 数据结构---迷宫问题(不相交集、广度优先搜索)
- 海量数据下的分布式存储与计算
- ORACLE 官方文档
- 黑马程序员--------------面向对象(一)
- 分手后“在一起”的第十五天
- 【编程之美】24点游戏
- 黑马程度员--------------面向对象(二)
- ubuntu13.10配置android编译环境
- CVE-2012-0158分析报告
- Mongodb删除collection
- Unable to load class[xxx xxx] to check against the @HandlesTypes annotation
- SQLSERVER,ORACLE,MYSQL的分页与java连接字符串总结