目录
面向对象基础
面向对象(Object Oriented Programming)是以对象为中心,将对象的内部组织与外部环境区别开来,将表征对象的内部属性数据与外部隔离开来,其行为与属性构成了一个整体,而系统功能则表现为一系列对象之间的相互作用的序列,能更加形象的模拟或表达现实世界。
1.类与对象
类与对象是面向对象的核心概念:
- 类: 对现实生活中一类事物的描述,抽象的
- 对象: 是实际存在的该类事物的每个个体,因而也称实例(instance),是一个实实在在的个体,具体的
- 类是对象的设计模板
类的设计:
类的设计其实就是类的成员的设计,即事物的描述数据及其操作数据的行为方法等等的设计。
-
数据描述:用属性表示,对应类中的成员变量
-
行为描述:用方法表示,对应类中的成员方法
-
其他都是为了数据和行为服务的:对应类中的其他成员
1.1类的定义格式
【修饰符】 class 类名{
属性列表
代码块
构造器列表
方法列表
内部类
}
1.2对象的创建
new 类名(); //匿名对象
类名 对象名 = new 类名(); //有名对象
匿名对象:
不定义对象,而直接调用这个对象的方法等,这样的对象叫做匿名对象。
使用情况:
-
如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
-
可以匿名对象作为实参传递给一个方法调用。
2.类的成员:属性
2.1属性的声明
**声明位置:**类中方法外
【修饰符】 class 类名{
【修饰符】 数据类型 属性名; //属性有默认值
【修饰符】 数据类型 属性名 = 值; //属性有初始值
}
说明:属性的类型可以是Java的任意类型,包括基本数据类型、引用数据类型(类、接口、数组等)
2.2属性的赋值
- 在声明属性时显式赋值
【修饰符】 class 类名{
【修饰符】 数据类型 属性名 = 值; //属性有初始值
}
- 创建对象后赋值
【修饰符】 class 类名{
【修饰符】 数据类型 属性名; //属性有默认值
}
//创建对象
类名 对象名 = new 类名();
//为对象的属性赋值
对象名.属性名 = 值;
2.3属性的访问机制
- 本类中
本类中的方法可以直接访问本类中的成员变量。
**特殊:**static成员访问非static成员,编译不通过
- 跨类
如果要访问其他类的成员,那么必须要通过“对象.成员”
用户使用new操作符创建一个对象后,可以使用“对象.成员”来获取对象的属性和行为。
2.4属性的特点
- 属性有默认值
- 每一个对象的属性是独立,互不干扰
2.5对象属性的内存图
class Student{
String name;
char gender = '男';//显式赋值
}
class TestStudent{
public static void main(String[] args){
Student s1 = new Student();
System.out.println("姓名:" + s1.name);//null
System.out.println("性别:" + s1.gender);//男
s1.name = "小薇";
s1.gender = '女';
System.out.println("姓名:" + s1.name);//小薇
System.out.println("性别:" + s1.gender);//女
Student s2 = new Student();
System.out.println("姓名:" + s2.name);//null
System.out.println("性别:" + s2.gender);//男
}
}
3.方法的参数传递机制
Java中方法的参数传递机制:值传递
- 形参是基本数据类型时,实参给形参传递数据值,是copy的形式,形参对值的修改不影响实参。
- 形参是引用数据类型时,实参给形参传递地址值,形参对对象的属性的修改,会影响实参对象的属性值,因为此时形参和实参就是指向同一个对象。
4.this关键字
1、this关键字:
意思:当前对象
(1)如果出现在构造器中:表示正在创建的对象
(2)如果出现在成员方法中:表示正在调用这个方法的对象
2、this的用法:
(1)this.属性
当局部变量与成员变量同名时,那么可以在成员变量的而前面加“this.”用于区别
如果没用this区分,则遵循就近原则。
(2)this.方法
调用当前对象的成员方法,完全可以省略“this.”
5. 实例变量与局部变量的区别
- 声明的位置不同:实例变量在类中方法外,局部变量在方法内或代码块内
- 数据的存储位置不同:实例变量在堆中,局部变量在栈中
- 初始值的获得不同:实例变量有默认值,局部变量必须手动初始化
- 修饰符:实例变量可以多种修饰符,局部变量最多只能使用final
- 作用域:实例变量(本类中直接访问,其他类通过对象访问),局部变量从声明处开始,到所属的}就结束
- 生命周期:实例变量随着对象的创建而出生,对象被垃圾回收机制收回才被收回。局部变量是当代码执行超过作用域范围,该局部变量就失效。