封装(Encapsulation)
继承(Inheritance)
多态(Polymorphism)
对象:是一个具有特定属性和行为特征的具体事物
类:是一类具有相同特征的事物的抽象描述,是一组相同【属性】和【行为】的对象的集合。
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
局部变量:定义在方法体内或其他局部区域内的变量(之前所使用的都是main方法中定义的变量,为局部变量)。
成员变量:定义在类的成员位置,在方法体外,与方法(例如main方法)平行的位置。并且有修饰符修饰。根据修饰的不同成员变量又分为:
- 类变量:或叫静态变量,有static修饰的成员变量。
- 实例变量:没有static修饰的成员变量。
说明:常用修饰符有public、缺省、private、protected、final、static
数据类型可以是任意基本数据类型和引用数据类型。
实例变量的访问:
对象名.静态成员变量
类变量的访问:
类名.静态成员变量
对象名.静态成员变量(不推荐)
根据修饰不同方法主要分为两类:
- 实例方法:没有static修饰的方法,必须通过实例对象来调用。
静态方法:有static修饰的方法,也叫类方法,主要特点是可以由类名来调用。
1.方法只声明 不调用 不会执行的
2.方法的执行顺序只与调用顺序有关
3.方法与方法是兄弟关系
4.方法执行结束会回到方法调用处
void::代表当前方法 不返回任何内容 数据类型: 必须返回一个该类型【匹配】的值 int:代表当前方法【必须】返回一个int值
方法的声明:
静态方法: 有static关键字的方法
非静态方法:没有static关键字的方法
调用方式:
静态方法 参考静态变量 类名.方法名();
非静态方法:参考实例变量 对象名.方法名();
注: 在本类中 可以省略类名/对象名调用
资源引用问题:
静态方法: 只能【直接】调用静态资源
非静态方法:可以直接调用所有的资源
方法不调用不执行,调用一次执行一次,每次调用会在栈中有一个入栈动作,即给当前方法开辟一块独立的内存区域,用于存储当前方法的局部变量的值,当方法执行结束后,会释放该内存,称为出栈,如果方法有返回值,就会把结果返回调用处,如果没有返回值,就直接结束,回到调用处继续执行下一条指令。
方法的参数传递机制:实参给形参赋值
方法的形参是基本数据类型时,形参值的改变不会影响实参;
方法的形参是引用数据类型时,形参地址值的改变不会影响实参,但是形参地址值里面的数据的改变会影响实参,例如,修改数组元素的值,或修改对象的属性值。
注意:String、Integer等特殊类型容易错
方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
参数列表不同:指的是参数个数不同,数据类型不同,数据类型顺序不同。
在JDK1.5之后,如果我们定义一个方法时,此时某个形参的类型可以确定,但是形参的个数不确定,那么我们可以使用可变参数。
【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }
注意:
(1)一个方法最多只能有一个可变参数
(2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个
通过命令行给main方法的形参传递的实参称为命令行参数
即数组的元素可以是基本数据类型,也可以是引用数据类型。当元素是引用数据类型是,我们称为对象数组。
注意:对象数组,首先要创建数组对象本身,即确定数组的长度,然后再创建每一个元素对象,如果不创建,数组的元素的默认值就是null,所以很容易出现空指针异常NullPointerException。
高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
低耦合:仅对外暴露少量的方法用于使用
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的讲,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
权限修饰符可以修饰:
外部类:public和缺省
成员变量、成员方法、构造器、成员内部类:public,protected,缺省,private
隐藏类的实现细节
让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性
便于修改,提高代码的可维护性。
当局部变量与类变量(静态成员变量)同名时,在类变量前面加“类名.";
当局部变量与实例变量(非静态成员变量)同名时,在实例变量前面加“this.”
this代表当前对象的引用,即当前被创建的对象
用于创建并初始化对象
注意:构造器只为实例变量初始化,不为静态类变量初始化
注意事项:
构造器名必须与它所在的类名必须相同。
它没有返回值,所以不需要返回值类型,甚至不需要void
如果你不提供构造器,系统会给出默认无参数构造器,并且该构造器的修饰符默认与类的修饰符相同
如果你提供了构造器,系统将不再提供无参数构造器,除非你自己定义。
构造器是可以重载的,既可以定义参数,也可以不定义参数。
构造器的修饰符只能是权限修饰符,不能被其他任何修饰
构造器重载时,可以在一个构造方法中调用另一构造方法,以简化代码。
格式:this(参数列表);
public Employee(){ } public Employee(String id){ this.id=id; } public Employee(String id, String name){ this(id);//this调用一个参数的构造器 this.name = name; } public Employee(String id, String name, double salary, char gender){ this(id,name);//this调用2个参数的构造器 this.salary = salary; this.gender = gender; }
注意:
this调用构造器的语句,只能构造器中第一行位置。
截止到目前,我们讲了很多位置都可以对类的属性赋值。现总结这几个置,并指明赋值的先后顺序。 赋值的位置及先后顺序: ① 默认初始化 ② 显式初始化 ③ 构造器中初始化 ④ 通过“对象 .属性“或对象 .方法”的式赋值
JavaBean
是 Java语言编写类的一种标准规范。符合JavaBean
的类,要求:(1)类必须是具体的(非抽象)和公共的,
(2)并且具有无参数的构造方法,
(3)成员变量私有化,并提供用来操作成员变量的
set
和get
方法。(比较理解POJO : Plain Ordinary Java Object,主要承载数据,不涉及业务逻辑)、
提高代码的复用性。
提高代码的扩展性。
类与类之间产生了关系,是学习多态的前提。