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

来源:互联网 发布:40岁程序员干不了 编辑:程序博客网 时间:2024/06/01 15:02

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


  面向对象的程序设计

(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关键字,就成了静态的初始化块,用于对静态域初始化
本节的实例代码:


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

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


0 0
原创粉丝点击