面向对象、类 和 对象、对象的内存管理、引用类型的使用、构造方法
一、面向对象 1.编程思想: 例子:将大象放进冰箱需要几步? 面向过程: 打开冰箱(){ } 存储大象(){ } 关闭冰箱(){ } 面向对象: 类: 冰箱 打开(){ 打开冰箱 } 关闭(){ 关闭冰箱 } 大象 存储(){ 存储大象 }
二、类 和 对象 1.概念 类(class):类是对现实生活中一类具有共同属性和行为的抽象. 对象:是能够看到到摸得着并且真实存在的实体,也称之为实例对象. 2.类的定义 1)类中拥有成员变量(属性)和成员方法(行为) public class Class { int a; String b; public void c(){} } 3.对象的调用 1)通过类创建对象 类名 对象名 = new 类名(); 2)调用对象的成员变量和成员方法 对象名.变量名 对象名.方法名() public class ClassTest { public static void main(String[] args) { Class classTest = new Class(); classTest.a=1; classTest.b="String类型"; classTest.c(); } 3)注意: 必须先创建类(class),然后再创建类的对象
三、对象的内存管理 堆:数组真实的数据 / 对象 栈:局部变量 / 临时变量 方法区:类相关的信息
一个对象的内存图
两个引用使用同一个对象的内存图
两个引用指向同一个对象的内存图
对象类型作为方法返回值时的内存图
四、引用类型的使用(数组/ 类 / 接口) 数据类型:基本数据类型 + 引用数据类型(数组/ 类 / 接口) 1.引用类型作为成员变量使用 a.可选择性进行初始化,有默认初始化值,引用类型默认初始值都是null b.引用类型:数组 / 类 / 接口 2.引用类型作为方法参数和返回值使用 a.参数在传递时,传递的是地址值,内容会改变 b.返回值是引用数据类型,则需要在方法内进行初始化操作,否则在外部调用时会出现空指针异常. 3.主方法中直接创建,属于局部变量 Car car = new Car() 主方法中通过对象名调用,属于成员变量 stu.car = new Car(); 4.局部变量和成员变量的区别 a.位置区别 局部变量: 方法中 或者 形参上 成员变量: 类中,方法外 b.初始化区别 局部变量: 使用前,必须进行初始化操作 成员变量: 使用前,可以不进行初始化操作,因为有默认初始值 c.使用范围区别 局部变量: 只能作用在当前方法中 成员变量: 类中 d.JVM内存中的区别 局部变量:栈中 成员变量:堆中 e.生命周期的区别 局部变量: 随着方法的调用而存在,随着方法的使用完成而消失 成员变量:随着对象的创建而存在,随着对象的消失而消失
五、构造方法 1.语法格式: a.方法名和类名一致 b.构造方法没有返回值类型,连void都没有 c.无参构造方法是计算机默认添加的 2.作用: 用于初始化成员变量 3.执行时机:创建对象是调用,每创建一个对象,都会执行一次构造方法. 4.this关键词: 表示当前对象 this在构造方法中使用:this( ) 不能在普通方法中使用,只能写在构造方法中。 在构造方法中使用时,必须是第一条语句。 public class Student { String name; // 无参构造方法(没有参数的构造方法) public Student() { this("张三"); } // 有参构造方法 public Student(String name) { this.name = name; } // 输出name和age public void print() { System.out.println("姓名:" + name); } public static void main(String[] args) { Student stu = new Student(); stu.print(); } } this在成员方法中使用: