一、概述
Java是一种完全面向对象的语言,必须熟悉OOP(面向对象程序设计)才能够编写Java程序。
二、面向对象程序设计
面向对象程序设计(OOP)是当今主流的程序设计范型。面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。
传统的结构化程序设计通过设计一系列的过程(即算法)来求解问题:首先需要确定如何操作数据,然后再决定如何组织数据,以便于数据操作;而OOP却调换了这个次序,将数据放在第一位,然后再考虑操作数据的算法。
几个基本定义:
类:是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。
封装:从形式上看,封装是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。实现封装的关键在于绝对不能让类中的方法直接的访问其他类的实例域,程序仅通过对象的方法与对象数据进行交互。
实例域:对象中的数据。
方法:操纵数据的过程。
继承:通过扩展一个类来建立另外一个类的过程。
对象的三个特性:
a.对象的行为:是用可调用的方法定义的。
b.对象的状态:指每个对象都保存这描述当前特征的信息。
c.对象标识:作为一个类的实例,每个对象的标识永远是不同的。
OOP编写程序,首先从设计类开始,然后再往每个类中添加方法。
类之间最常见的关系:
依赖:即“uses-a”关系,是一种最明显,最常见的关系。如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
聚合:即"has-a"关系,是一种具体且易于理解的关系。集合关系意味着类A的对象包含类B的对象。
继承:即"is-a"关系,是一种用于表示特殊与一般关系的。
三、使用预定义类
要想使用对象,就必须首先构造对象,并指定其初始状态,然后,对对象应用方法。在Java程序设计语言中,使用构造器构造新实例。构造器是一种特殊的方法,用来构造并初始化对象。
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用。
四、用户自定义类
要想创建一个完整的程序,应该将若干类组合在一起,其中只有一个类有main方法。
在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类。
类通常包括类型属于某个类类型的实例域。
构造器与类同名。每个类可以有一个以上的构造器;构造器的参数无限制;构造器没有返回值;构造器与其他方法有一个重要的不同:构造器总是伴随着new操作符的执行被调用,而不能对一个已经存在的对象调用构造器来达到设计实例域的目的。
方法用于操作对象以及存取它们的实例域。
Public void method(String name){ .... }
method方法有两个参数,第一个参数称为隐式参数,是出现在方法名编写java程序基础前的xxx类对象,第二个参数位于方法名后面括号中的数值,这是一个显式参数。可以看出,显示参数是明显的列在方法声明中的,隐式参数没有出现在方法声明中;在每一个方法中,关键字this表示隐式参数。
一个方法可以访问所属类的所有对象的私有数据。
final修饰符大都应用于基本类型域,或不可变类的域(如果类中的每个方法都不会改变其对象,这种类就是不可变的类 )。
如果将域定义为static,每个类中只有一个这样的域。
静态方法是一种不能向对象实施操作的方法,没有隐式的参数,可以通过类名调用。
在下面两种情况下使用静态方法 :
1.一个方法不需要访问对象状态,其所需参数都是通过显式参数提供。
2.一个方法只需要访问类的静态域。
五、方法参数
按值调用:表示方法接收的是调用者提供的值。
按引用调用:表示方法接收的是调用者提供的变量地址。
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。
Java程序设计语言对对象采用的是按值传递的。
Java中方法参数的使用情况:
1.一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
2.一个方法可以改变一个对象参数的状态。
3.一个方法不能让对象参数引用一个新的对象。
六、对象构造
重载:如果多个方法,有相同的名字,不同的参数,便产生了重载。(注:Java支持重载任何方法)。
如果在构造器中没有显式的给域赋初始值,那么就会被自动的赋为默认值:数值为0,布尔值为false,对象引用为Null。
如果在编写一个类时没有编写构造器,那么系统就会提供一个无参数构造器(注:仅当类没有提供任何构造器的时候)。
显式域初始化:
1.可以在类定义中,直接将一个值赋给任何域。
2.在执行构造器之前,先执行赋值操作。
3.初始化块,在一个类的声明中,可以包含多个代码块,只要构造类的对象,这些块就会被执行。
参数名命名时,可以基于参数变量用同样的名字将实例域屏蔽起来来命名。
关键字this引用方法的隐式参数,同时还有另一个含义:如果构造器的第一个语句形如this(...),这个构造器将调用同一个类的另一个构造器。
finalize方法将在垃圾回收器清除对象之前调用。
七、包
使用包的主要原因是确保类名的唯一性。
有两种方式可以访问另一个包中的公有类:
1.每个类名之前添加完整的包名。
2.使用Import语句。
在包中定位类是编译器的工作,类文件中的字节码肯定使用完整的包名来引用其他的类。
import语句不仅可以导入类,还增加了导入静态方法和静态域的功能。
八、类路径
为了使类能够被多个程序共享,需要做到下面几点:
1.把类放到一个目录中。
2.将JAR文件放在一个目录中。
3.设置类路径。类路径是所有包含类文件的路径的集合。
在UNIX环境中,类路径中的不同项目之间采用冒号(:)分隔;而在Windows环境中,则以分号(;)分隔。
类路径包括:
1.基目录/home/user/classdir或c:classes。
2.当前目录(.)。
3.JAR文件/home/user/archives/archive.jar或c:archivesarchive.jar
采用-classpath(或-cp)选项指定类路径。
九、文档注释
注释应该放置在所描述特性的前面。
类注释必须放在import语句之后,类定义之前。
只需要对公有域(通常指的是静态变量)建立文档。
要想产生包注释,就需要在每一个包目录中添加一个单独的文件:
1.提供一个以package.html命名的HTML文件。在标记<body>...</body>之间的所有文本都会被抽取出来。
2.提供一个以package-info.java命名的Java文件。这个文件必须包含一个初始的以/**和*/界定的Javadoc注释,跟随在一个包语句之后。它不应该包含更多的代码或注释。
十、类设计技巧
1.一定要保证数据私有。这是最重要的 ,绝对不要破坏封装性。
2.一定要对数据初始化。
3.不要在类中使用的基本类型。
4.不是所有的域都需要独立的域访问器和域更改器。
5.将职责过多的类进行分解。
6.类名和方法名要能够体现它们的职责。
7.优先使用不可变的类。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/25719.html