面向对象的编程思想
面向对象
1、编程思想
- 面向对象编程思想:从对象入手,把和需求相关的对象找出来(抽象),直到需求功能实现。
- 适用于整个软件开发过程,面向对象的分析OOA、面向对象的设计OOD、面向对象的编程OOP、测试
2、对象
一切皆对象 万物皆对象
计算机中的对象:是现实客观世界中的事物在计算机中的一种表现形式。
对象的组成(图纸):
- 属性(有什么)通过成员变量来定义
- 方法(能干什么)通过方法来定义
3、类
类:用于描述对象的共性。
类的组成:属性和方法。
4、类和对象的关系
类是对象的模板(类 是 对象共性 的提取)
对象是类的实例(对象 是 类 的具体存在)
类的定义
各司其职:各个类干好自己的事情。
类的五大成分:成员变量、构造器、方法、代码块、内部类
//测试类、入口类,有main函数
public class TestStudent{
}
//用于学习类的定义
public class 类名{ //类名,望文生义
//属性
//方法
}
1、属性(成员变量)
位置:类以内,方法以外
使用:对象名.属性;
语法:数据类型 变量名; //只声明
数据类型 变量名 = 值; //声明的同时赋值
局部变量 | 实例成员变量 | |
---|---|---|
定义位置 | 方法以内 | 类以内,方法外 |
默认值 | 无 | 有(同数组元素默认值) |
作用范围 | 从定义开始到定义它的代码块结束 | 整个类 |
命名冲突 | 重合范围不允许命名冲突 | 可以和局部变量重名,就近原则 |
初始化 | 必须初始化才能使用 | 有默认值 |
2、方法(成员方法)
位置:类以内 其他方法外
使用:对象名.方法;
语法:(类似于函数的定义)
public void 方法名(形参列表){
//方法体语句
}
3、完整方法语句
修饰符 返回值类型 方法名(形参列表) 异常列表{
方法体语句
}
创建对象
1、创建一个对象
类名 对象名 = new 构造方法名(实参列表); //类是一种引用类型
2、使用对象
对象名.属性名
对象名.方法名(实参列表)
3、对象的创建过程【重】
- 分配内存空间
- 给属性赋默认值
- 调用构造方法再次给属性赋值
方法的重载(overload)
- 有些情况下,对象的同一种行为可能因为参数的不同存在多种实现过程。
- 实际就是同一个类当中 方法名相同 形参列表不同 的方法
方法重载的语法要求:
1> 方法名必须相同
2> 形参列表必须不同(个数、类型、顺序任一不同)
3> 返回值类型、修饰符 没有要求
注意:如果两个方法只有形参列表的参数名不同,不是方法重载
【题】哪些是方法重载?
【例子:
public void m1(){}
public void m1(int a){}
】
public void m1(String s){} //ok
public int m1(int a){return 1;} //不是重载,只能参数名不同
void M1(){} //名字不同不是重载
public int m1(int a,String s){return 1;} //ok
public void m1(String s, int a){} //ok
public void m1(byte b){} //ok
void m1(){} //不是重载,形参列表同举例
int m1(int b, int b){return 1;} //ok
使用:
- 在编译时,系统会根据方法的实参和形参列表进行匹配,匹配不上就报错。
- 在执行时,JVM会先进行参数类型的精确匹配,匹配不上会就近类型转换。
构造方法【重点】
构造方法,也称为构造器,是定义在类中的一种特殊方法。
特殊的语法要求:
- 方法名必须和类名相同
- 没有返回值类型 (连void都没有) 修饰符 类名(形参列表){}
- 构造方法允许方法重载Overload 无参构造方法、有参构造方法
- 不允许手动调用,每次创建对象时,由JVM自动调用一次
注意:
- 如果一个类中没有任何构造方法,系统会默认送你一个无参构造方法。
- 如果类中已经定义构造方法,则系统不会再分配无参构造方法。
- 在一个类中定义了带参构造时,养成同时定义公开无参构造方法的习惯。
作用:用于创建对象时,给对象的属性赋值。
this关键字
类似于“这个”第一人称 “我” 不定代词
this代表当前对象(是引用)
有两种用法:
-
this.的用法
位置:用在构造方法或普通的成员方法中
作用:用于使用当前对象的属性或者方法。
语法:this.属性名 //使用当前对象的属性
this.方法名() //调用当前对象的方法
注意:
1> this.可以省略,但是,当成员变量和局部变量重名时,必须用this来区分。2> this不能在main函数中使用
-
this() 或 this (实参) 的用法
位置:用在本类的构造方法中,并且必须是第一行。
【重】:this() 只能应用在构造方法中
作用:用于调用本类的其他构造方法(构造方法的复用)
语法:this() //调用本类的无参构造方法
this(实参) //调用本类的带参构造方法
【奇怪题~重点】
public class TestConstructor {
public static void main(String[] args) {
ClassC c = new ClassC();
}
}
class ClassA{
public ClassA(){
System.out.println("A");
}
}
class ClassB{
public ClassB(){
System.out.println("B");
}
}
class ClassC{
ClassA a = new ClassA();
ClassB b;
public ClassC(){
System.out.println("C");
b = new ClassB();
}
}
-------------------------------------------------------
A
C
B
引用
1、回顾:Java的数据类型
1>基本类型:8种
int m = 5; //4字节,存数值
2>引用类型:String 数组 类 接口
Student s = new Student(); //引用类型的变量,存储的是对象的首地址
int[] a = new int[5]; // a中存储的是数组的首地址
2、不同类型的数据作为函数/方法的参数进行传递
1>基本类型:传递的数值
2>引用类型:引用类型作为函数/方法的参数,传递的是地址,形参、实参指向同一个对象。
注意:null表示还没有任何指向。
3、引用类型的null值
1>可以声明引用类型的变量,如果是局部变量,必须赋值才能使用。
2>可以给引用类型的变量赋null值,代表空地址或空对象。
3>当基于null引用使用.访问属性或方法时,编译ok,执行Error(NullPointerException)空指针异常。
注意:引用中的地址值发生改变,代表指向了新的对象。