递归
1、一个方法自己调用自己,叫做递归。
2、递归的逻辑很简单清晰,但是需要调用的内存较大。
实例:用递归求斐波那契数列的第几项。
import java.util.Scanner;
/**
* 用递归求斐波那契数列第N项
* */
public class Text02 {
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
System.out.println("请输入你需要的第N项斐波那契数列");
int a=input.nextInt();
int c=sum(a);
System.out.println("第"+a+"项是:"+c);
}
public static int sum(int a) {
if(a==1||a==2) {
a=1;
return a;
}
else {
return a=sum(a-2)+sum(a-1);//方法自己调用自己
}
}
}
面向对象
什么是面向对象
面向对象和面向过程的关系
1、面向对象和面向过程的对比:
面对对象:宏观上把控整个事务的完成度以及事务走向。 是对象帮我们处理具体的问题,而对象是如何做的,和调用者无关,调用者只需要负责结果即可。 好处:调用的复杂度降低。底层具体的实现思路还是过程式的。
面向过程:微观上更精细化的处理具体问题
tips:面向对象和面向过程不是相对的,而是相辅相成。
类和对象关系
实体类中,含有的东西:
1、成员变量(对象所具有的某种属性)
2、方法(对象所拥有的功能)
类:分门别类。抽象的概念 。祖先为了能够让后来的人更好的去认识这个世界,将各个具象的内容抽离出来一个一 个的类。
对象: 将类中所有抽象的内容进行了具象化 。 现实生活中真实存在的。
类和对象: 类是对于对象的抽象,抽象就是抽取像的部分 对象就是对于类的具象化的体现。
问题: 先有类还是先有对象? 如果是编写过程: 先有类 再有对象 如果是构建过程: 先有对象,将对象的共性抽离出来,外在、内在->类
面向对象的第一个程序
实体类:
/**
* 这是一个用于计算各种几何图形的实体类
* 运用了方法重载
* */
package Demo01;
public class Sum {
int a;
int b;
int c;
public double perimeter(int a){//计算圆形的周长
int r=a;
return 2*3.14*r;
}
public int perimeter(int a,int b){//计算长方形周长
int l=a;
int h=b;
return 2*(a+b);
}
public int perimeter(int a,int b,int c){//计算三角形周长
if(a+b>c&&a+c>b&&b+c>a) {
int e1=a;
int e2=b;
int e3=c;
return a+b+c;
}
else {
System.out.println("警告:这不是一个三角形!");
return 0;
}
}
}
/**
* 面向对象:
* 根据你输入的数据数量,调用对象里不同的重载方法。
* */
package Demo01;
import java.util.Scanner;
public class Text02 {
public static void main(String[] args) {
int a=5;
int b=6;
int c=7;
Sum p=new Sum();
System.out.println("圆的周长是:"+p.perimeter(a));//输入一个数,计算圆周长
System.out.println("长方形的周长是:"+p.perimeter(a,b));//输入二个数,计算长方形周长
System.out.println("三角形的周长是:"+p.perimeter(a,b,c));//输入三个数,先判断是否为三角形,再计算周长
}
}
内存分析:
static
什么时候类被加载?
1:调用当前类中的静态方法
2:创建当前类的实例对象的时候