类的定义
class 类名
{
域的定义;
方法的定义;
}
域对应对象的属性,方法对应对象的行为,
一般地,方法依据属性的变化而定义,方法是对属性数据的处理
域的定义
域是对象的属性,也是对象的数据。
类中定义的每个域都有默认的初值,对于数值型域,其初值都为0;字符型域初值都为空(ASCII码);
布尔型的初值是false,对象类型的域的初值为null。可以在给定义时给域初始化,还可以在创建对象时利用静态初始化器或实例初始化器,构造方法对域初始化。
定义类时应该根据问题需要先抽象出对象的域。
方法的定义:
方法是对象的行为,在程序中是对对象的属性进行处理的工具。方法的定义形式如下:
方法类型 方法名 (形式参数)
{
方法体
}
方法类型就为返回值类型,若一个方法不返回就定义为void。返回语句为return +表达式;
若为void方法,不写返回语句,或者直接写return。
定义类中方法的时候,应该先进行方法抽象。方法抽象主要根据域的变化需求来定义方法,其次可以考虑类的其他需要定义必要的方法。
方法的使用中:一般的调用其他方法的方法称为主调方法,被其他方法调用的方法称为被调方法。定义方法时写的参数叫做形参,调用方法是写的参数叫做实参,实参可以是表达式,会先将表达式的值计算出来,然后在传给形参,而不是将整个表达式传给形参。
方法的递归调用
一个方法之间或间接的调用了自身,这种调用称为递归调用。通过递归调用,可以将问题简化为规模缩小了的同类问题的子问题。
使用方法递归调用时,应该满足的三个条件:
- 每一次调用都会使问题得到简化
- 前后调用应该有一定的关系,通常是前一次调用要为后一次调用准备好数据
- 递归结束的条件,以避免无限递归调用
例子:
计算n!
public class Example5 {
public static void main(String[] args) {
int n=8;
long f;
f=fac(n);//调用fac()计算8!
System.out.printf("%d!=%d\n",n,f);
System.out.println(fac(5));
}
//fac方法。递归方法
static long fac(int n) {
if(n>1)
return n*fac(n-1);
//计算n!
else
return 1;
//1!
}
}
用递归方法找出Fibonacci(斐波那契)数列的第20个元素。
public class Example6{
public static void main (String[] args) {
System.out.println("第20个Fibonacci数:"+fib(20));
//用+将一个字符串和一个数值连接成一个字符串后作为println()的参数
}
//定义fib
static int fib (int n){
if(n>2)//前两个之和
return fib(n-1)+fib(n-2);//递归调用
else
return 1;
}
}
递归方法效率低,占用的资源多