天天看点

java基础--类与对象(会不断更新)

java基础--类与对象(会不断更新)

1.面向对象程序设计概述

java基础--类与对象(会不断更新)

  面向对象的程序设计

(1)基础概念 类:构造对象的模板,由类构造对象的过程称为创建类的过程 实例域:对象中的数据 方法:操作数据的过程 封装:将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式,关键在于不能让类中的其他方法直接的访问其他类的实例域 封装的一般形式: 1.一个私有的数据域 2.一个公有的域访问器方法 3.一个公有的域更改器方法

(2)类之间的关系 依赖(“uses-a”):如果一个类的方法操作另一个类的对象,这就称为一个类依赖另一个类 聚合(“has-a”): 意味着类A的对象包含类B的对象 继承(“is-a”) :表明一个类继承另一个类

2.类与对象 (1)对象的主要特性 对象的行为:表明可以对对象施加哪些方法,用可调用的方法定义。 对象的状态:对于每个特定的对象都有一组特定的实例域值,这些值得集合就是这个对象的当前状态(对象状态的改变必须通过调用方法实现) 对象的标识:每个对象都有一个唯一的身份(如hashcode值)

(2)类的剖析 1.隐式参数与显示参数 显式参数是明显的列在方法声明中的,及方法后的括号中 隐式参数则没有显示出来,在每一个方法中,关键字this表示隐式参数

(3).权限访问 仅对本类可见---private 对所有类可见----public 对本包和所有子类可见---protected 对本包可见---默认

final实例域:必须确保在每个构造器执行之后,这个域的值被设置,并在后面的操作中不能再对它进行修改  final修饰符用于基本类型域或不可变类的域,当用于可变类型的类时则表示该对象引用不会指向其他的对象。

3.方法 (1)静态域,静态方法 静态域:将域定义为静态static,每个类只有一个这样的域,即有100个类的对象,有100个实例域,但只有一个静态域,它属于类,而不属于任何对象,就算没有对象,静态域也是存在的,可以通过类直接调用或者由类生成的对象调用。 注:static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。static变量在第一次使用的时候初始化,但只会有一份成员对象。

静态常量:可以由类名直接访问的常量 被static关键字修饰的变量是静态的,静态变量随着类的加载而加载,所以也被称为类变量( 局部变量是指类方法中的变量,必须初始化。局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值。)

静态方法:静态方法是不能向对象实施操作的方法(不含有this参数),静态方法可以访问自身类中的静态域 类方法是指类中被static修饰的方法,无this指针,故不可用this来调用类方法

两种情况下使用静态方法: 1.一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(如Math.pow) 2.一个方法只需要访问类的静态域 (2)main方法:在启动程序时还没有任何一个对象,静态main方法将执行并创建程序所需的对象 (3)方法参数 按值调用:方法得到的是所有参数值的一个拷贝,方法不能修改传递给他的任何参数变量的内容 按引用调用:传递的是引用,真实改变对象的状态 java采用的是按值传递。 总结: 1.一个方法不能改变一个基本数据类型的参数 2.一个方法可以改变一个对象参数的状态 3.一个方法不能让对象参数引用一个新的对象 类是一个封装,类的成员只能在类内部使用,外部需要 “对象名.变量名” 来引用。

4.构造 (1) 重载 如果多个方法有相同的名字,不同的参数(包括不同的参数个数)便产生了重载, 注:返回类型不是方法签名的一部分,也就是说不能有两个方法名和参数类型相同和返回类型不同的方法 方法可以和类名同名的,和构造方法唯一的区别就是,构造方法没有返回值

判断是否是重载: 一。方法名一定要相同。 .二。方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。 1.如果参数个数不同,就不管它的参数类型了! 2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。 三。方法的返回类型、修饰符可以相同,也可不同。

默认域初始化:如果在构造器中没有显式的给域赋予初值,那么就会被自动赋予默认值,如数值为0,布尔值为boolean,对象引用为null。 注:必须明确地初始化方法中的局部变量

(2)无参数的构造器 如: public Employee() { name=""; salary=0; hireDay=LocalDate.now(); } 如果在编写一个类时没有写构造器,那么系统就会提供一个无参构造器,这个构造器将所有实例域设置为默认值(即数值类型设置为0,布尔型数据设置为false,所有对象变量将设置为null) 注:如果类中提供了至少一个构造器,但是没有提供无参数的构造器,则在构造对象时如果没有提供参数就会被视为不合法。

当然如果希望所有域被赋予默认值,可以这样: public ClassName() { } (3)显式域初始化 确保不管怎样调用构造器都可以被设置为一个有意义的初值

(4)调用另一个构造器 如果构造器的第一个语句形如this(....),这个构造器将调用 同一个类的构造器

(5)初始化块 一共有3种初始化数据的方法1.在构造器中设置值 2.在生命中赋值 3.初始化块 在一个类声明中,可以包含多个代码块,初始化块即用来初始化块内的数据

(6)调用构造器的具体步骤 1)所有数据被初始化为默认值(0,false,null) 2)按照在类声明中出现的次序,依次执行所有域初始化语句和初始化块 3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体 4)执行这个构造器主体

(7)静态的初始化快:在初始化块前加上static关键字,就成了静态的初始化块,用于对静态域初始化 本节的实例代码:

java基础--类与对象(会不断更新)

5.包 使用包的主要原因是确保类名的唯一性,假如两个程序员不约而同地建立Employee类,只要放的包不同,就不会冲突 包具有一个层次结构, (1)类的导入 一个类可以使用所属包中的所有类,以及其他包中的公有类 使用import语句导入包:import java.util.* 将类放入包中:package com.horstmann.corejava

6.注释 javadoc可以由源文件生成一个HTML文件 以/**开始* / 结束 javadoc实用程序,从下面几个特性中抽取信息: 1.包 2.公有类与接口 3.公有的和受保护的构造器及方法 4.公有的和受保护的域 类注释:类注释必须放在import语句后 2.方法注释 [email protected]变量描述:这个标记将当前方法的“param”(参数)部分添加一个条目 [email protected]描述:这个标记将对当前方法添加“return ”返回部分 [email protected]类描述:用于表示这个方法有可能抛出的异常 3.域注释:对公有域建立文档 4.通用注释: @author姓名:产生一个“author”条目 作者 @version文本:产生一个version条目  当前版本的描述 @since文本:引入特性的版本描述