文章目录
本文章由公号【开发小鸽】发布!欢迎关注!!!
老规矩–妹妹镇楼:

一、面向对象
(一)POP与OOP
所谓的POP指的是:Procedure Oriented Programming(面向过程)
所谓的OOP指的是:Object Oriented Programming(面向对象)
面向过程,强调的是过程的功能行为,以函数为最小单位,只考虑怎样完成这个过程;
面向对象,强调的是构建具备功能的对象,以类/对象为最小单位,考虑的是谁来完成这个过程,更加符合人类在日常生活中的思维习惯,包括抽象、分类、继承、聚合、多态等;
(二)面向对象的三大特征
封装、继承、多态
二、类与对象
(一)概述
类是对一类事物的描述,是抽象的概念;
对象时实际存在的每类事物的个体,因此也称为实例;
面向对象的程序设计的重点就是类的设计;
(二)类的成员构成
一个类中的成员构成包括:类的成员变量、类的构造器、成员方法、代码块、内部类;
通常在定义类时,需要考虑类的修饰符、类名,如public修饰符表示公开的类,private修饰符表示私有的类。
(三)对象
在定义了类后,即可通过类的实例化创建类的对象,使用new来创建类的实例对象,并通过“对象名.对象成员”的方式访问对象成员,其中包括属性和方法。
当对象生成后,如数组一样在栈空间中入栈对象的地址,而在堆空间中分配对象的内存空间,与数组的内存空间分配类似。
(四)匿名对象
所谓匿名对象即不定义对象的句柄,直接调用该对象的方法等,如下所示:
new Person().eat();
这种匿名对象多用于单次方法的调用,或是作为一个实参传递给方法调用。
(五)成员属性
1.声明格式
一个类中总会定义一些类的成员属性变量,用以描述该类的相关信息,在定义类的成员属性变量时,要遵循一定的规则,采用如下所示的方式定义属性变量:
修饰符 数据类型 属性名 = 初始化值;
2.修饰符
其中,初始化值可以省略不写。常见的修饰符包括权限修饰符,如private、缺省、protected、public;以及其他修饰符,如static、final等。权限修饰符能够限制该成员属性变量在各个类中的可见性,有效地保护类中的数据信息。
public class Person{
private int age; // 声明private变量 age
public String name = “Lila”; //声明public变量 name
}
3.属性变量的分类
对于类中的属性变量,有多种的分类方式,也会产生多种变量名称,这些我们都需要牢记于心。首先从整体上看,变量一定不会脱离类而独立存在,在类中变量分为成员变量与局部变量。所谓的成员变量指的是在类体内直接声明的变量,而局部变量则包括在方法、构造器内定义的形参,方法内定义的变量以及代码块内定义的变量。
对于类中的成员变量又分为实例变量与类变量,所谓的实例变量指的是不用static修饰的变量, 即不是static静态变量,只能通过对象进行访问;而类变量,即使用static进行修饰,可以直接通过类名进行访问。以下是成员变量与局部变量之间的差别:
(六)成员方法
类中的方法时类或对象行为的抽象,用以完成某个功能,因此将该种功能封装为一个可以重复调用的方法。
1.声明格式
成员方法的声明格式如下所示,与普通方法类似:
修饰符 返回值类型 方法名 ( 参数类型 形参1, 参数类型 形参2, …. ){
方法体程序代码
return 返回值;
}
其中修饰符也包括权限修饰符、static、final等,要注意的是return在无返回值时也可以使用表示结束方法,在return之后就不能写任何的表达式了。其余格式较为简单,因此无需进行描述。
2.方法重载
在一个类中,可以声明多个同名方法,但也需要保证这些方法的参数格式或者参数类型不相同,注意方法的重载与方法的返回值类型无关,只关注参数列表的不同。如下所示:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
我们最常用的输出语句System.out.println()就是典型的重载方法,如下所示:
public void println(byte x)
public void println(short x)
public void println(int x)
注意,当两个方法的参数列表中的多个参数类型相同,但是相同类型的形参位置不同时,也会构成方法的重载,如下所示:
void show(int x,char y,double z){}
int show(int a,double c,char b){}
3.可变个数的形参
从JDK5.0开始提供了Varargs机制,允许直接定义能和多个实参相匹配的形参,来更加简单地传递个数可变的实参。如下所示,同时传入多个同一类型的变量:
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String…books);
可以看到的是,数组也可以发挥同样的作用,其实可变形参就是传入了一个数组形参,因此数组形参与可变形参之间是不能重载的!!!
同时要注意的是,当方法的参数中存在可变形参时,需要将可变形参放在形参声明的最后位置,不然的话由于可变形参的数量是不确定的,编译器难以区分!在一个方法的形参位置,最多只能声明一个可变形参。
4.方法参数的值传递
Java中方法的参数传递方式为值传递,即将实际参数值的副本传给形参,对于形参是基本数据类型的,将实参基本数据类型变量的“数据值”传递给形参;对于形参是引用数据类型的,将实参引用数据类型变量的“地址值”传递给形参。
(七)构造器
构造器的作用是创建对象,为对象进行初始化,它具有与类相同的名称,且不声明返回值类型,不能被static、final、synchronized、abstract、native等修饰符修饰,不能带有return语句返回值。
1.语法格式
修饰符 类名 (参数列表) {
初始化语句;
}
构造器与当前类的名称相同,修饰符可以采用常见的权限修饰符,如下所示:
public class Animal{
private int age;
public Animal(){
ages = 4;
}
}
2.构造器注意事项
在每个Java类中,至少都有一个构造器。构造器一般分为两类,一类是默认提供的隐式无参构造器,即使我们不显式定义类的构造器也会存在一个隐式的无参构造器,该默认构造器的修饰符与所属类的修饰符是一致的;另一类是显式定义的构造器,可以是有参或是无参的,一旦显式定义了构造器,则默认的无参构造器是不会提供的,需要显式地定义一个无参构造器。
每个类中可以重载多个有参构造器,可以供多种方式初始化类的对象,方便创建各种不同的对象,同时需要注意的是,子类是不能继承父类的构造器的,但可以调用父类的构造器方法。
构造器的修饰符与所属类的修饰符是一致的**;另一类是显式定义的构造器,可以是有参或是无参的,一旦显式定义了构造器,则默认的无参构造器是不会提供的,需要显式地定义一个无参构造器。
每个类中可以重载多个有参构造器,可以供多种方式初始化类的对象,方便创建各种不同的对象,同时需要注意的是,子类是不能继承父类的构造器的,但可以调用父类的构造器方法。