面向对象
文章目录
1.面向对象
概述:把不同功能,分别进行封装,并将类似的功能封装到一起;在需要的时候调用相对应的类
- OOA:面向对象分析:分析解决问题的过程需要多少个对象
- OOD:面向对象设计:分析对象之间存在的关系
- OOP:面向对象编程
1.1面向对象的特征
- 封装性(encapsulation)
- 继承l(inheritance)
- 多态(polymorphism)
- 抽象(abstract)
2.类和对象
2.1类
- 类是抽象的,抽取多个对象相像的部分构成的
- 类是属性和行为的集合,是一个模板
//类定义的格式:
[访问权限修饰符] class 类名 {
类体;
类的成员:
属性:成员变量
行为:成员方法
}
//成员的位置特点:只能定义类的成员,不能做具体逻辑代码编写
2.2对象
对象又称为:引用 变量 实例[instatnce]
- 对象是具体的
- 先有对象再有类;也可以是在类模板的基础上创建的
- 对象可以理解成地址(引用数据类型都是地址)
//对象创建的格式
类名 对象名 = new 类名( );
3.局部变量 & 成员变量的区别
不同点 | 局部变量 | 成员变量 |
---|---|---|
定义的位置不同 | 定义在方法体内或方法声明上 | 定义在类体内,方法体外 |
在内存的位置不同 | 存放栈区 | 存放堆区 |
初始化值不同 | 没有默认值(需要先赋值在使用) | 有 |
生命周期不同 | 随方法同步存在和销毁 | 随对象而生成,对象销毁后等,等垃圾回收器回收(不一定立刻销毁) |
就近原则 | 局部变量和成员变量重名的时候,局部变量优先于成员变量 |
4.值传递和引用传递
具体可参考:06.JAVASE 数组 & Arrays工具类:3.值传递 & 引用传递
- 原则就是引用类型空间开辟在堆区,多个指向同一个地址的对象,修改成员变量,会导致所有对象输出值改变
- 值传递则不会因为方法的调用而影响,因为在栈区内,每一个方法所在的空间不同(同名的变量)
5.匿名对象
没有对象名
//格式
new 类名();
5.1匿名对象特点
- 只需要执行一次时使用
- 一旦执行完就会自动释放,节约内存资源
- 作为实际参数传递的时候比较方便
new Student(); // 没有名字的对象
new Student().name = "老王";
System.out.println(new Student().name); // null
//匿名只能用一次,所以每new一次,都是新的对象,地址值不相同
//匿名对象例子:
// Scanner input = new Scanner(System.in);
System.out.println("请输入整数: ");
int num = new Scanner(System.in).nextInt();
System.out.println(num);
6.垃圾对象
没有引用(指针) 指向堆区空间的对象
6.1成为垃圾对象的情况
-
匿名对象使用完后
// 1.匿名对象使用完毕 new Student();
-
对象被赋值为null
// 2.对象被赋值为null Student s = new Student(); // s = null;
-
对象被重新创建
-
引用所在的方法执行结束