java面向对象的编程(一)

来源:互联网 发布:淘宝卖家如何发布预览 编辑:程序博客网 时间:2024/06/05 18:51

1.面向对象编程介绍

1.         万事万物皆对象。

2.         使用面向对象编程的思想是将现实世界中的该事物用编程语言描叙出来,在这个过程中必须保持和现实世界中该事物一致。

3.         设计面向对象编程:

1)        从问题中抽取对象,思考对象之间的关系;

2)        用类来描叙对象;

3)        为类添加属性;

4)        为类添加方法;

5)        为类添加他们之间的关系;

6)        使用java语言来创建对象来完成业务操作;

7)        具体-----抽象----具体。

2.类以及类相关的基本概念

2.1类的定义

1.         类:是对现实世界中相同事物的描叙、一个相同集合、是一个抽象的。

2.         类的格式:

[<修饰符>]   class <类名称>{

//属性

//方法

//构造方法

//嵌套类

}

3.         修饰符的作用就是一个权限管理

4.         属性用于存储类的数据

5.         方法用于完成类的行为、功能、操作属性

6.         构造方法用于创建对象,没有构造方法是不能创建对象

7.         属性和方法是类的成员,成员变量,成员方法

2.2方法

1.         方法格式:

[<修饰符>] <返回值的类型>|void  <方法名称>([<参数列表>]){

//方法体

return [<返回值>];

}

2.         返回值的类型一定要和返回的值类型相同。

3.         return给调用者返回值,或者是结束方法。void什么都不返回,但是在编译成字节码的时候会默认加上一个返回空的return,该方法的作用就是结束方法。如果方法有返回值类型,这个时候return的作用是返回值,并结束方法。

4.         返回值的类型:有8种基本数据类型和引用数据类型(定义了一个类就是定义了一个新的数据类型,该类型是含有逻辑结构的数据类型)。

5.         参数列表接受调用者传入的数据,又称为形式参数。

6.         实参:调用环境传入的实际的值,必须和形式参数保持一致。

2.3属性

1.         类的内部,方法的外部定义的属性称为全局变量,为该类服务。

2.         方法内部定义的属性成为局部变量,为该方法服务。

3.         可以使用引用,调用全局变量

4.         全局变量可以加修饰符,局部变量不可以加修饰符,因为局部变量只为方法服务。

5.         全局变量:[<修饰符>] <数据类型>  <变量名称> [<=>];

6.         局部变量:<数据类型>  <变量名称> <=>;局部变量在使用前一定要有初始值。

7.         全局变量的生存周期是和对象相同,局部变量的生存周期是调用完毕马上消失。

2.4对象的定义

1.         对象是类的具体表现,类是对象的模板。

2.         一个类可以有多个对象,相互之间是不会受到干涉的,因为地址不同。

3.          引用变量=new 构造方法;//类和构造方法的名称相同

4.          引用变量=()class.forName(…).NewInstance();

2.5构造方法

1.         用于创建对象和初始化。

2.         构造方法的名称和类名称要保持一致。

3.         构造方法不返回任何值。

4.         如果我们在定义类的时候没有显示地定义构造方法,系统会创建一个默认的无参构造方法;一旦显示地定义了构造方法,系统就不再提供默认的无参构造方法,如果要想使用无参构造放,就要重载构造方法,定义一个无参的构造方法

5.         new用于创建对象,分配内存空间,参数地址,构造方法是通过new关键字自动调用。

6.         [<修饰符>]  <构造方法的名称>([<参数列表>]){

//构造方法体

}

7.         一个类中有多个构造方法,只要参数列表不相同(数据类型、个数、位置)就可以。

2.6封装

在程序上,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。

3.内存分析

1.         对引用变量进行初始化赋值,分配栈空间,这时的引用变量的值为null

2.         new分配堆空间,看类中有多少个属性,就将堆分成多少个小格,进行属性的默认初始化,如果属性存在显示初始化,就会将默认的值替换,如果还存在构造方法为属性赋值,就会再将属性已有的值替换(默认赋值、显示赋值、构造方法赋值),完成所有的赋值操作后,就会将new出的内存地址赋值给引用变量。

3.         深入内存分析:osjvm分配内存空间,再由jvm来管理这块内存空间。jvm将管理的内存空间分为栈、堆、静态区、代码区。

1)         存储的是局部变量。

2)         存储的是new出来的空间。

3)        静态区 存储的是存储的是字符串常量和静态属性。

4)        代码区 存储的就是代码。

4.

在大型项目中使用不同的类来封装不同的业务,但是在封装的过程中所有的类可以分为几大类型(视图类型、控制类型、数据业务类型、vo类型、工具类型),我们就是使用包结构来管理不同的类型的类。

1.         包只能在源文件的第一行(注释除外)。

2.         包定义的格式:package 包名称1. 包名称2….

3.         使用包管理后的类的类名就为:包名+类名

4.         使用包管理的类:import 包的路径.类名

5.         在同一个类中使用不同的包管理的相同名称的类的时候,只能使用import导入一个,另外的一个使用方法就要在该类的前面明确添加上包的路径。

6.         有包管理的代码(类)不可以调用无包管理的代码(类),但是无包管理的可以调用有包管理的,只要在调用的时候导入包就可以。

5.继承

 5.1继承介绍

一个项目要实现代码重用、灵活性、可扩展、便于维护(保证现有项目的正常运行、以及对原有项目的新的功能点的增加)。继承就是实现代码重用的方式之一。

将功能业务相同的类的相同业务和数据抽取为一个新的类,该类就是父子,这样的方式就是继承,子类可以从父类继承相同业务的行为,同时还可以有自己的行为。

如果类之间不存在继承关系,千万不要随意使用继承,这个时候就可以使用组合的方式来完成。组合:A类拥有B类中的某些特性,而A类和B类又没有继承关系,那么这个时候我们就可以使用组合的方式来完成功能和实现代码重用,在A类中创建B类的对象,再通过B类创建的变量调用B类中的特性。使用组合比使用继承多,更多的情况下我们使用的是组合,因为如果修改了父类中的继承方法,有可能就会影响到子类的功能实现。

5.2继承的特性

C++中是可以多继承,但是在JAVA中只可以单一继承,因为一个子类继承多个父类时,如果多个父类中有相同名称的方法,但是方法内部实现不相同的话,就有可能使子类在业务上混乱。

java中可以有多层继承,因为多继承,使用类的数据类型的多样性就有多个,这样可以让我们在调用方法的时候更加灵活。

Object类是所以类的顶级父类,是为了系统提供API的时候实现代码重用,所以在使用系统提供这些API方法中接受的参数大部分都为Object类型。

子类从父类中继承除私有的以外的所有特性。

子类不能继承父类中的构造方法,因为每一个类的构造方法,只能用于创建本类的对象,初始化本类属性和业务。但是在子类的构造方法中,会默认地调用父类的无参构造方法。如果父类中不存在无参构造方法,则可以通过两种途径解决:为父类添加无参构造构造方法,另一种就是在子类中,显示地调用父类里面的构造方法。(推荐使用)

5.3方法重载

当一个类中的多个方法业务相同,只是根据不同的参数指向细微的不同业务的是就是要方法重载

1.         方法名相同;

2.         方法的参数类型、个数、顺序至少一项不同;

3.         方法的返回类型、修饰符可以不同

5.4方法重写(覆盖)

当子类从父类继承过来的方法,不能满足子类的要求的时候,就在子类中显示地重新定义该方法,增加新的特性,完成新的功能。

1.         子类方法的名称、参数、返回类型必须与父类相同;

2.         子类方法不能缩小父类方法的访问权限;

3.         子类方法不能抛出比父类方法更多的异常;

4.         父类的静态方法不能被子类覆盖为非静态方法;

5.         父类的非静态方法不能被子类覆盖为静态方法;

6.         子类可以定义与父类的静态方法相同的静态方法;

7.         父类的私有方法不能被子类继承,也就不能被覆盖;

8.         父类的抽象方法,子类可以:实现抽象方法;继续重新声明父类的抽象方法;

9.         父类的非抽象方法,可以被覆盖为抽象方法。

5.5this

this代表本类对象、this接收的就是对象的地址,因为一个类可以有多个对象,类是为该类的所有对象共享,使用this接收到对象地址来区分到底是那个对象正在调用代码运行

在一个类中有3个地方存在this:类的内部方法的外部、构造方法内部、方法内部(非静态方法内部)

this特性:

1)        类的内部方法中调用属性和方法的时候都会隐含的有一个this

2)        this调用变量表明该变量是那个对象的,this调用方法表示该方法正在被那个对象调用。

3)        当全局变量和局部变量同名的时候使用this来区分全局变量和局部变量

4)        类的内部方法的外部、构造方法内部this是创建对象是的地址,而方法中的this只有在被调用时才占用内存

5)        可以使用this()来调用重载的构造方法,this调用重载的构造方法只能在构造方法的第一行

5.6super

super代表的就是父类,但是接收的内存地址为子类创建的对象的地址。在创建子类对象的时候,会通过super调用父类的构造方法创建父类对象,便于子类继承,再创建子类的对象,将子类对象赋值给父类创建的内存地址。

Super调用构造方法必须放置在子类构造方法的第一行,又因为在子类构造方法中使用this调用重载的构造方法,该this也必须是在构造方法的第一行,使用superthis调用构造方法不能一起使用。

使用this在子类中调用重载的构造方法后,super调用父类构造方法的方式就要向this调用的构造方法中移动。

转自:http://blog.csdn.net/cengkis/article/details/6519933

1 0