递归概述:
方法定义中调用方法本身的现象
递归注意事项:
要有出口,否则就是死递归
次数不能太多,否则就内存溢出
案例演示:
实现阶乘。
public class RecursionDemo1 {
// 实现阶乘
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int a = scanner.nextInt();
System.out.println(factorial(a));
}
public static int factorial(int a) {
int sum = 1;
if (a == 1) {
return 1;
} else {
sum = a * factorial(a - 1);
}
return sum;
}
}
案例演示:
需求:兔子问题(斐波那契数列)
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
由此可见兔子对象的数据是:1 , 1 , 2 , 3 , 5 , 8 …
public class RecursionDemo {
public static void main(String[] args) {
int a = 20;
System.out.println(sum(a));
}
public static int sum(int a) {
if (a == 1 | a == 2) {
return 1;
} else {
int num = sum(a - 1) + sum(a - 2);
return num;
}
}
}
面向对象思想概述:
当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了。这时就开始思索,
能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。
这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
面向对象思想特点:
a:是一种更符合我们思想习惯的思想 懒人思想
b:可以将复杂的事情简单化
c:将我们从执行者变成了指挥者角色发生了转换
面向对象思想的特征:
- 封装(encapsulation)
- 继承(inheritance)
- 多态(polymorphism)
封装:
封装的概述:
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
封装的好处:
- 隐藏实现细节,仅对外提供公共访问方式
- 提高代码的复用性
- 提高安全性
封装的原则:
将不需要对外提供的内容隐藏起来。
把属性隐藏,提供公共的方法对其访问。
类与对象的概述:
类:是一组相关的属性和行为的集合。
对象:是该类的具体表现
举例:
类 -----人
对象:–具体到某个人比如你自己。
定义类其实就是定义类的成员(成员变量,成员方法)
成员变量:定义在类中方法外的变量
成员变量与局部变量的区别:
成员变量:定义在类中方法外,随着对象的创建而存在,随着对象的消失而消失,存在于堆内存,具有默认初始值。
局部变量:定义在方法中或者方法的声明上的变量,随着方法的调用而存在,随着方法的调用完毕而消失,存在于栈内存,没有默认初始值,必须定义,赋值才能使用。
注意:当成员变量名称与局部变量名称相同时,在方法中使用,采取就近原则。
如何创建对象:
类名 对象名 = new 类名();
private关键字:
- 是一个权限修饰符
- 可以修饰成员变量和成员方法
- 被修饰的成员只能在本类中访问
this关键字:
当我们的成员变量名称与局部变量名称相同时,如果不使用this关键字,就会出现一个问题局部变量隐藏了成员变量的问题(就近原则)
this关键字的特点:
是当前类的对象引用。简单来说,它就是类的一个对象,谁调用这个方法,那么该方法内部的this就代表谁。
案例演示
学生类:
学生的基本类:
public class Student {
private int num;
private String name;
private int age;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
学生类的测试类
public class MyTest {
public static void main(String[] args) {
Student student1 = new Student();
student1.setNum(01);
student1.setName("张三");
student1.setAge(18);
System.out.println(student1.getNum());
System.out.println(student1.getName());
System.out.println(student1.getAge());
}
}
~