六 面向对象-类和对象
6.1 类与对象的概念
6.1.1 面向对象的概念
面向对象编程:OOP(Object-Oriented Programming)
6.1.2 使用类和对象开发过程的基本步骤
-
开发类,类 = 属性(成员变量) + 方法 例如: public class Students { int id; String name ; int age; String sex;
public void sleep(){ System.out.println("学生在睡觉"); } public void study(){ System.out.println("学生在学习"); }
}
-
通过new关键字创建对象 Students fyl =new Students();
声明 创建
-
使用类中的属性和方法:对象.属性名 对象.方法名() fyl.id =1000012; fyl.name="樊亚麟"; fyl.age=21; fyl.sex="男"; System.out.println("学生的名字叫:"+fyl.name); fyl.sleep();
6.1.3 类与对象
(1)类是一种逻辑结构,对具有公共属性特征和行为(功能)的一个群体进行描述。例如可以定义Student类描述学生的公共属性和行为,定义一个Teacher类,描述老师的公共属性和行为。 (2)定义了类之后,就可以根据类创建(new)出一个实例。比如学生张三,老师王老师。 通俗地说: 类定义了一种新的数据类型。对象就是根据类定义的变量。可以将类看做是复合类型。 类是对象的模板(template),对象是类的实例(instance)。因为对象是类的实例,所以经常会看到交换使用“对象”和“实例”这两个词。
定义类
-
程序 = 数据 + 算法
-
类 = 属性 + 方法
类的一般形式
class 类名 { //类名通常以大写字母开始 类型 变量1; 类型 变量2; …
类型 方法名(参数列表) { // 方法体 } … }
在类中定义的变量和方法都称为类的成员。所以变量又称为成员变量,方法又称为成员方法。
6.2.2 类的属性
类的成员变量又称为类的属性。 public class Student { /**
-
属性 成员变量
-
类的{}内直接声明(定义)的变量 叫 成员变量/实例变量 **/ String name; int age; double score; } 属性属于类的某个具体对象。类的每个实例(即,类的每个对象)都包含这些变量的副本,因此在类中定义的变量又被称为实例变量。
6.2.3类的方法
方法是对象行为特征的抽象,类具有的共性的功能操作,称之为方法。方法是个“黑匣子”,完成某个特定的应用程序功能。 方法的基本语法: 修饰符 返回类型 方法名(形参列表){ //功能代码 } 形参可以为空,可以有多个,形参的类型可以是基本类型也可以是引用类型。 public class Student { String name; int age; double score;
void study(){ // }
void show(){ // } } 注意: 方法中定义变量称为局部变量。 如果没有返回值,则方法的返回类型必须为void 当方法有具体的返回类型时,则必须使用return语句返回一种值。
6.3对象的声明与创建
Students fyl ;//声明
fyl=new Students();//创建对象
Student stu3 = stu2; //将2赋值给3,
注意:
属性属于类的具体对象,不同对象的属性值通常是不同的。
虽然方法也是通过对象调用的,但是各对象共享相同的方法。
6.4 为引用变量变量赋值
//Box b1 = new Box(); //创建对象,让b1指向(引用)所创建的对象
Box b2 = b1;
注意:b1和b2引用同一个对象。
对象引用与对象的关系:
(1)对象引用,有时也称为对象引用变量,或称为引用变量。
(2)对象引用与对象在物理上是两个不同的东西。
(3)对于上图,我们通常说b1引用(有时也称为指向)图中的那个Box对象。
(4)对象只能通过对象引用来操作。有时直接使用对象引用代指对象,例如对于上面的例子,有时会直接将b1引用的对象称为“对象b1”或“”b1对象。
(5)将一个对象引用赋值给另一个对象引用,则两个引用变量指向同一个对象。
(6)对引用变量进行相等性比较,例如b1==b2,是比较两个引用变量是否引用同一个对象,所以b1==b2的结果为true。对对象引用进行相等性比较,有时也直接称为对象的相等性比较。
注意:基本变量与引用变量的区别
基本类型的变量位于栈内存中,引用变量所所引用的变量位于堆内存中。
equal 直接比较的是值
引用类型比较的是地址 比较基本变量的是值
6.5 方法深入分析
方法可以看做是独立的功能模块,供调用模块调用,功能模块要有输入、输出,对于方法而言输入就是方法的参数,输出就是方法的返回值。调用者通过参数将需要输入的数据传递给方法,方法通过返回值将输出返回给调用者。
6.5.1 方法定义
1、方法定义包括:访问修饰符、返回类型、方法名、形参、代码块
2、方法必须有返回类型(构造方法除外),可以省略访问修饰符
3、可以有参数,也可以没有参数
6.5.1 方法调用
1、实参与形参的概念
2、方法调用的执行过程
6.5.2
方法调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
参数传递:
值传递:Swap(int a, int b)方法
引用传递(对象作为参数,本质上是引用变量作为参数)
6.5.3 return
(1)return语句用于明确地从一个方法返回。即,return语句导致程序的执行控制转移回到方法的调用者。
(2)如果return之后还有代码也不会执行。
(3)如果方法的返回类型为void,可以使用return跳出函数,但是不能使用return返回数据。
(4)可以返回对象。
6.5.4 方法调用
因为封装,不能直接访问其他对象的成员变量,通常是调用其他对象的方法。方法调用有两种情况:
调用相同类中的方法:可以直接调用。(本质上是使用this关键字调用)
调用其他类中的方法:对象.方法名
6.6 构造器/构造方法
6.6.1 构造方法的语法
构造方法的作用:开辟内存空间、创建实例、初始化属性值。
构造方法的特点:
(1)方法名与类名相同
(2)不能声明返回类型
(3)不能使用return语句返回值
(4)通常为public
public Student(){
}
注意:
(1)如果没有明确提供构造方法,则系统会提供一个默认的构造方法,默认构造方法(也称为缺省构造方法)没有参数。
(2)如果我们提供了一个构造方法,则系统不再提供无参数的默认构造方法。
(3)如果我们提供了一个有参数的构造方法,同时又需要无参构造方法的话,则必须同时提供一个无参数的构造方法。
构造方法的作用:开辟内存空间,创建实例,初始化属性值
无参构造:你不写,系统默认提供,你写了系统就不会提供;