一、今日学习内容:
今天学习4.3.7方法参数及其传递问题、4.3.8方法递归,还有4.4类的属性。
(1)方法参数及其传递问题:分为两种,值传递和引用传递。
个人认为,其实不能单纯利用返回值为void的函数运行后查看原值来判断是值传递还是引用传递。我选择在传完参数后的函数内测地址,地址一样就是引用传递,不一样就是值传递。
hashCode()一般包含了地址,但Integer的hashCode()则只是原值,得使用System.identityHashCode(data)来测。
注:
基本类型是值传递
引用类型是引用传递,返回值为void的话未必能在外面看到改变。
引用类型对象重新被new了以后,看不到改变;但改变属性能看到改变。
数组也是引用类型,数组元素值的改变能在void方法外面测出来。
(2)方法递归:
1.什么是递归?
:方法自身调用自身。
a(){
a();
}
2.递归是很耗费栈内存的,递归算法能不用尽量别用。
3.递归必须要有结束条件,没有结束条件一定会引起栈的溢出错误
4.递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内溢出
(3)类的属性:
一、类的修饰符
(1)public(公有属性)
公有的、公共的(一般用于定义一个公共的类的属性或变量,可以在该类以外调用和供其他类调用和使用)
定义格式 :public 数据类型 属性名称;
例如:
public公有属性,可以在该类以外调用,其他类也可以调用(这种变量称之为实例变量)
(2)private (私有属性)
私有的(一般用于定义一个私有的类的属性或变量,只能在本类使用,不可外调,外调是会报错)
定义格式 :private 数据类型 属性名称;
例如:
二、类的变量
1、分类:分为“成员变量”和“局部变量”
1.1、成员变量(有默认值,String类型不赋值时默认值为null、int为0)
(1)实例变量(不以 “static” 修饰)
例如 :
特别注意:实例变量只能在类实例化之后的对象中使用和调用!!!
(2) 类变量(以“static”修饰)
例如:
可以直接通过“ 类名 . 属性 ”方式直接调用
1.2、局部变量
(1)形参(方法小括号中定义的变量)
例如:
特别注意:在调用这个方法的时候,在其给予赋值时,必须和参数里面的数据类型一致,不然会执行报错!!!
(2)方法局部变量(在方法体内定义)
就是在一个方法体里面的变量,只能在这个方法体(一个方法的中间部分)里面发挥作用,超出范围则无效(带有数据类型,如 int i = 0;)
例如:
特别注意:在定义时必须赋值,否则无效!!!
(3)代码块局部变量(在代码块内定义)
就是在一对大的花括号里面定义的变量,和方法局部变量有些类似,在其定义时也必须初始化值,不能超出所在范围,否则无效!!!
三、成员变量(属性)和局部变量的区别
注意事项总结:
1、方法局部变量:就是在一个方法体里面的变量(带有数据类型,如int i = 0;)
2、代码块局部变量:就是在一对大的花括号里面定义的变量
3、成员变量的修饰符:public(公共的) 和 private(私有的)
4、特别注意:实例变量只能在类实例化之后的对象中使用和调用!!!
5、特别注意:成员变量有默认值,可以不用初始化值!!!
6、特别注意:局部变量只能在它所属的范围类使用,必须赋值!!!
二、遇到的问题:
方法递归不明白。
三:明日计划:
继续学习第四章内容,继续阅读《大道至简》。