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

黑马程序员-面向对象深入了解

2014-08-09 21:22 183 查看
 ------- android培训java培训、期待与您交流! ----------

面向对象的特点: 1.将复杂的事情简单化

   2.面向对象将以前的过程中的执行者变成了指挥者

         3.面向对象这种思想是符合现在人们思考习惯的一种思想

面向过程和面向对象的区别:过程其实就是函数,对象则是将函数及一些内容进行了封装

类的概念

我走路,就是我自己作为一个人中间的一个对象!这个人就是一个Person类,而我是该类产生的一个实例

所以,类是抽象的一种概念,是描述的一类事物,汽车可以作为一个类,那么对象就是宝马,奔驰各种各样不同型号的车。

类可以有很多对象,在java中如何描述一个类呢?

class 关键字

 

类和编译器和主方法的关系

主方法是程序的入口,当一个类的修饰符是public时,则编译器会将此类作为主类去加载。所以编译器要生成的class类的名称必须和public修饰的类名称相同,否则报错

所以一般需要独立加载的类中会有主方法,也会有public

类的成员:

成员变量:对应的就是事物的属性

成员函数:对应的就是事物的行为

所以如果想要定义一个类,就是在定义成员变量和成员函数,但是在定义前,必须先要对事物进行属性和行为的分析,才可以用代码来体现

实例讲解类的定义

//定义一个demo类

//类的书写:class 是区分大小写的,所以不能写错

     类的名称的书写形式为所有首字母大写。便于增强代码的阅读性。

class Demo

{

//成员属性: age,name  

//private
: 修饰符,修饰成员。私有,当成员有此修饰符时,不能直接访问此成员

//既然不能直接访问此成员,那么要查询或者修改的时候,就一定会有访问此成员的内部方法。

//即去找内部比private权限要大的方法,这时发现了public修饰的set和get方法。

//public
: 修饰符,表示最大的权限

//为什么要使用private这种麻烦形式呢? 为了增强代码的安全性,将属性封装起来,并且可以在获取或者修改函数内加入逻辑判断等操作。

private int age;

private String name;

//这个没有返回值的方法就是构造函数,构造函数的用处在于在类创建对象时,对其进行初始化值。

//构造函数的特点

在创建对象时运行,用于初始化值。

没有返回值,名称一定和类名一致。

当没有手动定义Demo类的构造函数时,系统会默认生成一个Demo类的空参数构造函数Demo()

当手动定义了Demo类的构造时,默认创建的构造函数就不存在了。

构造函数可以重载,用于接收不同的初始化。

Demo(int age,String name)

{

this.age = age;

this.name = name;

}

//对外提供的设置和获取私有成员的方法

public void setAge(int age)

{

this.age = age;

}

public void setName(String name)

{

//this: 代表对象,就是所在函数所属对象的引用。

//什么时候使用this?  当定义功能时,如果该功能内部使用到了调用该功能的对象,就用this来表示

//构造函数的调用: this(实参)

//所以this后面如果跟的是括号,就是调用的该对象的构造,如果后面跟的是".",调用的就是该对象的成员

this.name = name;

}

public int getAge()

{

return this.age;

}

public String getName()

{

return this.name;

}

}

上述代码中我并没有定义主函数!

主函数的一个特点:独立运行。这个类是不需要独立运行的,所以可以不写主函数。

类中的成员的作用域:在整个类中。

成员变量和局部变量的区别

成员变量定义在类中,作用域为整个类,存在于堆中

局部变量定义在方法,参数,语句上,作用域为大括号内,存在于栈中

构造函数和一般函数的区别?

构造函数,定义时不需要返回值,构造函数在创建对象时就被调用,用于初始化,而且只执行一次

一般函数,需要定义返回值,只有需要调用时执行,可以执行多次

说道构造函数就要提起构造代码块了;

构造代码块:同于构造函数,也是对对象进行初始化,不过,构造代码块是给所有的对象进行初始化,只要对象一建立,构造代码块优先于构造函数执行

浅显一点就是当构造函数有多个时,构造函数会根据参数类型不同去选择性初始化。而构造代码块不一样,不管使用什么样的构造函数,构造代码块都会先进行初始化。

堆和栈是java内存的两个区域

java内存有五个区域

寄存器 本地方法区 方法区 栈 堆

这时只讲解三个经常用到的:

方法区:所有的方法,和静态都存储在此,在类的加载时就存在。

栈: 存储的是局部变量。只要数据运算完成所在的区域结束,该数据就会被释放

堆:用于存放数组和对象,也就是实体。实体即用于封装多个数据的

堆会给每一个实体分配一个内存首地址值

堆内存中的变量都有默认初始化值,因为数据类型不同,值也不一样

垃圾回收机制。如果内部对象没有再被使用,过一段时间将会被垃圾回收机制判断为垃圾进行回收。

如何创建上述Demo类的实例对象呢

Demo d = new Demo(10,"zhangyl");

new关键字用于创建对象使用。

那么创建这个对象在内存中做的事情有哪些

1.首先从硬盘上指定位置找到Person.class文件加载进内存// javac  java 

2.执行main方法时,栈中开辟main方法的空间,在main中分配一个变量d  //  d 

3.在堆内存中开辟一个实体空间,并且分配了一个地址值 // new    地址值-》 比如 0x0432

4.在该实体空间中进行默认初始化 // age = 0 ; name = null

5.空间属性进行显示初始化。即定义时是否有初始化值,因为在构造前定义的两个成员属性并没有赋值,所以没有显示初始化

6.进行构造代码块初始化  //没有

7.调用构造函数,进行初始化   // age = 10 name = "zhangyl"

8.将首地址值赋给p ,使p成为对象引用。  将0x0432赋给p

匿名对象: 如果一个对象只会进行一次调用时,就可以使用不建立引用的调用方式,即直接使用new而不在栈中建立引用

但是如果要多次调用某个对象中的成员,就需要给对象建立引用,方便调用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: