2020.7.16

一、今日学习内容:

   今天学习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、特别注意:局部变量只能在它所属的范围类使用,必须赋值!!!

 二、遇到的问题:

方法递归不明白。

三:明日计划:

继续学习第四章内容,继续阅读《大道至简》。

原文地址:https://www.cnblogs.com/marr/p/13448310.html