面向对象编程(基础部分)
类与对象#
- 类是抽象的,概念的,代表一类事物,即数据类型
- 对象是具体的,实际的,代表一个具体事物,即实例
- 类是对象的模板,对象是类的一个个体,对应一个实例
- 类和对象的内存分配机制
- 栈:一般存放基本数据类型(局部变量)
- 堆:存放对象(Cat cat , 数组等)
- 方法区:常量池(常量,比如字符串),类加载信息
属性/成员变量/字段#
public#
proctected#
默认#
private#
成员方法#
提高代码的复用性;可以将实现的细节封装起来,然后供其他用户来调用即可
成员方法的调用机制原理#
- 当程序执行到方法时,就会开辟一个独立的空间(栈空间)
- 当方法执行完毕,或者执行到return语句时,就会返回
- 返回到调用方法的地方
- 返回后,继续执行方法后面的代码
- 当main方法(栈)执行完毕,整个程序退出
成员方法传参机制#
- 基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!
- 引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
方法重载#
java 中允许同一个类中,多个同名方法的存在,但要求形参列表不一
- 方法名:必须相同
- 形参列表:必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
- 返回类型:无要求
可变参数#
java 允许将同一个类中多个同名同功能但参数个数不同的方法,封装成一个方法。就可以通过可变参数实现
- 可变参数的实参可以为0个或任意多个
- 可变参数的实参可以为数组
- 可变参数的本质就是数组
- 可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后
- 一个形参列表中只能出现一个可变参数
基本语法#
访问修饰符 返回类型 方法名(数据类型… 形参名) {}
作用域#
- 在java编程中,主要的变量就是属性(成员变量)和局部变量
- 局部变量一般是指在成员方法中定义的变量
- java中作用域的分类
- 全局变量:也就是属性,作用域为整个类体
- 局部变量:除了属性之外的其他变量,作用域为定义它的代码块中
- 全局变量(属性)有有默认值,可以不赋值直接使用,局部变量必须赋值后,才能使用,因为没有默认值
注意事项#
- 属性和局部变量可以重名,访问时遵循就近原则
- 在同一个作用域中,比如在同一个成员方法中,两个局部变量,不能重名
- 生命周期不同
- 属性生命周期较长,伴随着对象的创建而创建,伴随着对象的销毁而销毁
- 局部变量生命周期较短,伴随着它的代码块的执行而创建,伴随着代码块的结束而销毁,即在一次方法调用过程中
- 作用域范围不同
- 全局变量/属性:可以被本类使用,或其他类使用(通过对象调用)
- 局部变量:只能在本类中对应的方法中使用
- 修饰符不同
- 全局变量/属性可以加修饰符
- 局部变量不可以加修饰符
构造方法/构造器#
基本语法#
[修饰符] 方法名(形参列表){方法体;}
- 构造器的修饰符有 public protected 默认 private
- 构造器没有返回值
- 方法名和类名字必须相同
- 参数列表和成员方法是一样的规则
- 在创建对象时,系统会自动的调用该类的构造器完成对象的初始化
- 构造器是完成对象的初始化,并不是创建对象
- 一个类可以定义多个不同的构造器,即构造器重载
- 如果没有定义构造器,系统会自动给类生成一个默认无参构造器,叫默认构造器
- 一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的参构造器,除非显式定义
对象创建流程#
- 加载类信息,只会加载一次
- 在堆中分配空间(地址)
- 完成对象初始化
- 默认初始化
- 显式初始化
- 构造器的初始化
- 在对象在堆中的地址,返回给对象名,即是对象的引用
this 关键#
java虚拟机会给每个对象分配this,代表当前对象
- this 关键字可以用来访问本类的属性、方法、构造器
- this 用于区分当前类的属性和局部变量
- 访问成员方法的语法:this.方法名(参数列表)
- 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一 条语句)
- this 不能在类定义的外部使用,只能在类定义的方法中使用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 残雪独孤のBlog!