Java 方法详解
方法的所属性
- 如果一个方法使用了 static 修饰,那么这个方法属于这个类本身,否则就属于实例对象。
- 在同一个类中,方法的调用者总是 this 或者 类
- 当被调方法是普通方法的时候,默认使用 this 作为调用者
- 当被调方法是静态方法的时候,默认使用 类 作为被调者
- 方法不能独立定义,只能在类体内进行定义
- 从逻辑上看,方法要么属于类本身,要么属于类的某一个实例对象
- 永远无法独立的执行方法,执行方法必须使用类或者对象作为调用者
静态方法属于类本身,不属于任何实例对象,但是二者都可以调用
方法的参数传递机制
- Java 只有一种参数传递机制,就是值传递,相当于拷贝,拷贝之后的改变对于原实参没有影响
形参个数可变的方法
- 如果在定义方法的时候,在 ==最后一个形参== 后面增加三个点(.), 则就表示该形参可以接受多个该类型的参数
- 形参个数可变对于每个方法最多只有一个,并且仅仅用于最后一个形参,其余形参个数不可变,传入自动转为数组的形式传入
方法重载
- Java 中一个方法的判定要看三个方面:
- 调用者,方法的所属者,可以是对象,也可以是类
- 方法名, 方法的标识
- 形参列表, 当调用方法的时候,系统会根据实际传入的参数进行再一次的匹配
- 也就是说,如果要重载一个方法, 必须要保证两同一不同:同一个类中,方法名相同,参数列表不同
- 返回值,修饰符等其他因素不同的,不算做方法的重载
- 对于包含有形参可变的方法,当该位置只传入一个参数的时候,优先调用不是形参可变的方法
成员变量和局部变量
- 成员变量是在类里面进行定义的变量,局部变量是在方法里面定义的变量
- 成员变量分为类变量和实例变量两种,static 修饰的是类变量, 和类的生存时间相同, 没有 static 修饰的属于实例变量,和变量的生存时间相同
- 一个类的生存周期包括 : 类加载-类验证-类准备-类解析-类初始化-类使用-类卸载
- 类加载-类验证-类准备-类初始化的发生顺序是确认的,但是解析阶段不一定,解析有可能
发生在初始化阶段之后,然后再去进行类使用 )
- 一个类中不能定义两个同名的成员变量(一个是类变量,一个是实例变量也不行)
- 同一个方法中不能定义同名的方法局部变量,但是不同的代码块变量可以重名
- 在允许的情况下,默认使用就近原则来进行变量的运算
局部变量的初始化和内存中的运行机制
- 局部变量经过定义后,只有在被赋值时才会被分配内存空间,定义时不进行初始化
- 局部变量总是保存在所在方法的 栈 内存中,栈中的变量无需系统垃圾回收,随方法或代码块结束而结束
- 尽可能的缩小局部变量的作用范围