面向对象
python c# java 等是面向对象的语言
面向过程:关注点在实现功能的步骤上(刻板印刷术)
面向对象:关注点在实现功能需要哪些对象的参会(活字印刷术)
面向对象三大特点:
- 封装
- 多态
- 继承
类与对象
类(是人类大脑抽象出来的)
- 现实世界,事物与事物之间具有共同特征。将这些共同的状态和行为提取出来,形成了一个模板,称为类
- 类实际上是人类大脑思考总结的一个模板,类是一个抽象的概念
- 状态在程序中对应属性。属性通常用变量来表示
- 行为在程序中对应方法。用方法来描述行为动作
- 类 = 属性 + 方法
类:
对象
- 实际存在的个体
- 对象又称为实例
- 通过类这个模板可以实例化n个对象。(通过类可以创造多个对象)
- 例如:通过Dog类可以创造出 斗牛犬 和 柯基
- Dog类中有一个属性 “品种”
- “斗牛犬” 和 “柯基” 由于都是通过Dog类创造出来,所以这两个对象都有 “品种属性”,但是值是不同的。用词这种属性被称为 实例变量
对象:
所有new产生的对象,都存在堆内存中
演示代码内存情况分析
演示代码
Student.class
package chapter3.oop01;
/*
1. 定义类的语法格式:
【修饰符列表】 class 类名{
类体 = 属性 + 方法;
//属性(实例变量),描述的是状态
//方法, 描述的是行为动作
}
2. 为什么要定义类
要通过类实例化对象。有了对象,让对象和对象之间协作起来形成系统
3. 一个类可以实例化多个java对象
4. 实例对象是一个对象一份,比如创建三个学生对象,每个学生对象中应该都有name变量
5. 实例变量属于成员变量,成员变量如果没有手动赋值,系统会赋默认值
*/
public class Student {
//属性: 姓名,年龄,性别,
//姓名
String name;
//年龄
int age;
//性别
boolean gender;
}
StudentTest.class
package chapter3.oop01;
public class studentTest01 {
public static void main(String[] args) {
//局部变量
int i = 10;
String name;
//通过学生类Student实例化学生对象(通过类创造对象)
//Student是一种数据类型名,属于引用数据类型
//s1是变量名
//s1也是一个局部变量(存储在JVM Stack中))
//s1变量中保存的是:堆内存中Student对象的内存地址
//s1有一个特殊的称呼:引用
//什么是引用?引用的本质上是一个变量,这个变量中保存了对象的地址
Student s1 = new Student();
//访问对象的属性
//访问实例变量的语法:引用.变量名
//两种访问方式,第一种读取,第二种修改
//读取:引用.变量名; s1.name;
//修改: 引用.变量名 = 值; s1.name = “jack”;
System.out.println(s1.name); //null
System.out.println(s1.age); //0
System.out.println(s1.gender ? "男" : "女");
System.out.println("===================");
//修改对象的属性
s1.name = "张三";
s1.age = 20;
s1.gender = true;
System.out.println(s1.name); //null
System.out.println(s1.age); //0
System.out.println(s1.gender ? "男" : "女");
System.out.println("=====================");
Student s2 = new Student();
//alt + 鼠标左键 向下拖可以同时更改多个
System.out.println(s2.name); //null
System.out.println(s2.age); //0
System.out.println(s2.gender ? "男" : "女");
}
}
对象和引用的区别?
- 对象:在堆内存中,new出来的
- 引用:是一个保存了对象内存地址的变量
- 在java中,程序员是不能直接操作堆内存的。
- 需要借助引用来访问堆内存。 语法 :
引用.
- JVM中有GC(垃圾回收机制) java是自动垃圾回收
- 自动垃圾回收主要针对的是堆区