4.1、声明方法的原因
1) DRY原则,把能被复用的逻辑抽取出来
DRY原则:Don’t repeat yourself 不写重复代码
DRY利用的方法是抽象,把共同事物抽取出来,进行封装
2) 实现相对独立的逻辑
3) 实现比较复杂的逻辑
4) 可以对具体实现进行隐藏/封装
4.2、(普通)方法的声明—制定行动计划
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段
声明格式:
[修饰符 1 修饰符2...]返回值类型 方法名([形式参数列表]){
程序代码;
[return 返回值;]
}
形式参数(形参):在方法声明时接收的参数类型,数量,顺序。
实际参数(实参):调用方法时实际传给方法的数据
返回值类型:方法要返回的结果的数据类型。
若一个方法没有返回值,必须给出返回值类型void
返回值:方法在执行完毕后返还给调用者的数据
return语句终止方法的运行并指定要返回的数据
4.3、(普通)方法的调用—-实施计划行动
Java语言中使用下述形式调用方法:
对象名.方法名(实参列表); ///非静态方法的调用方式
静态方法名(实参列表); //静态方法的调用方式
帮助给对象的各个属性进行赋值
实参数目、数据类型和次序必须和所调用方法声明的形态列表匹配(int,double,float)
4.4、方法的重载overload—–(实现相似功能)
在同一个类中可以定义多个同名方法—-方法的重载
重载方法的参数列表必须不同
重载方法的返回值类型,权限,其他修饰符可以相同,也可以不同
4.5、方法重写(overriding method)
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
在子类和父类中,重写方法后,在调用时,以创建的对象类型为准,会调用谁的方法。
4.5.1、重写的特性
1) 发生在子父类中,方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2) 子类抛出的异常不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3) 子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
4) 父类中的方法若使用private、static、final任意修饰符修饰,那么,不能被子类重写。
重载与重写的区别:https://blog.csdn.net/qq_28797347/article/details/79766196
4.6、递归
递归的基本思想和要素:
递归的基本思想是”以此类推”
递归方法解决问题的两个步骤:
求得范围缩小的同性质问题的结果
利用这个已得到的结果和几个简单的操作求得问题最后解答,当同性质的问题被简化得到足够简单时,将可直接获得问题的答案,而不必在调用自身
例如:
求给定整数的阶乘,例如5!=54321
1)使用循环语句
2)使用递归
public int method(int n){
if(n==1)
return 1;
else
return n*method(n-1);
}
4.7、获取随机数方法
Random r = new Random(); //用于产生随机数的类
int i = r.nextInt(6)+1; //产生[1,6]的随机数
Math.Random()*10+1; //产生[1,10]的随机数
4.8、构造方法(也叫构造器/构造函数)
构造方法的名字和类名相同,不声明返回值类型(例如:void int)也不要在方法中返回任何数据。
4.8.1、构造方法分类
显式构造方法:
默认(隐式)构造方法:默认无参的构造方法
4.8.2、构造方法的作用
帮助创建对象(将类中的属性和方法加载到new开辟出的堆空间中)
帮助给对象的各个属性进行赋值
(1)构造方法名称与类名相同,没有返回值声明(包括 void)
(2)构造方法用于初始化数据(属性)
(3)每一个类中都会有一个默认的无参的构造方法
(4)如果类中有显示的构造方法,那么默认构造方法将无效
(5)如果有显示的构造方法,还想保留默认构造 方法,需要显示的写出来。
(6)构造方法可以有多个,但参数不一样,称为构造方法的重载
(7)在构造方法中调用另一个构造方法,使用this(…),该句代码必须在第一句。
(8)构造方法之间的调用,必须要有出口。
(9)给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留。
(10)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)
(11)private Dog(){},构造方法私有化,当我们的需求是为了 保正该类只有一个对象时。
什么时候一个类只需要一个对象?比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。权衡只用一个对象与产生多个对象的内存使用,来确定该类是否要定义为只需要一个对象