[Backgammon] Java基础学习入门(方法,变量的分类,返回值,递归)
1. 变量的分类
变量的三要素:数据结构,变量名,生命周期(作用范围)。
按照变量声明的位置不同,变量分为局部变量
,成员变量
。
变量的分类 | 声明位置 | 作用范围 | 注意事项 |
---|---|---|---|
局部变量 | 声明在方法中或者时代码块中 | 当前声明的{}中有效 | 一定要先声明然后赋值,最后才能使用。 |
成员变量 | 声明在类中,方法外的变量 | 当前类中都有效 | 调用时需要:要么将当前成员变量加static修饰;要么就是通过创建当前类的所属对象,通过对象访问 |
- 局部变量
定义在方法中或者是代码块中的变量,称之为局部变量。
public class Test{
public static void main(Sring[] args){
int num=10;//局部变量
}
}
代码块而言,通过一组大括号括起来 {} 代码块也分为:局部代码块、初始化块、静态代码块。
局部代码块:声明在方法中的代码块。局部代码块中声明的变量只能在当前局部代码块中有效。
- 成员变量
生命在类中,方法外的变量称之为成员变量。
public class Test{
int unm;//成员变量
public static void main(Sring[] args){
int num=10;//局部变量
}
}
-
成员变量可以不初始化就能够直接使用
-
所有的整数(byte、short、int、long) ----> 默认值是0
-
所有的小数(float、double) -----> 默认值是0.0
-
字符类型(char) -----> 默认值是空格 ( \u0000 )
-
boolean 类型 ------> 默认值是false
-
所有的引用类型的默认值 ------> 默认值是null
-
2.返回值
被调用的方法可以将计算结果返回给调用处
public class Dame01{
public static void main(String[] args){
int d=10;
int sum= and(d);//sum=20
}
public static int and(int a){
a=a+a;
return a;
}
}
- void:该方法没有返回值。
- 一个方法可以不存在void,当一定要返回的数据类型去代替void的位置。
- 一个方法存在返回值,该方法的最后一行代码一定是return语句。
- 调用mian方法,在调用完成某个具有返回值的方法之后,可以通过变量接收该值。
3.方法重载
在同一个类中,同名的两个或者多个方法,参数列表不同,我们称该多个方法为方法重载。
两同三不同:同类,同名,参数列表不同(个数,类型,顺序)注意返回类型和重载无关。
public class Demo4{
public static void main (String[] args) {
int num1 =10;
int num2 =20;
}
public static void add(int num1,int num2){
System.println(num1+num2);
}
public static void add(int num1){
System.println(num1+20);
}
public static void add(byte num1,int num2){
System.println(num1+num2);
}
}
执行方法调用时,一定调用的原则是最近最优原则
。
自动提升的方式和数据类型的自动提升方式一致:
byte->short->long->float->double
char->int
4.递归
递归是一种编程技巧,程序中自己调自己。
在递归程序中存在一个出口》》》递归头。
递归程序最大优势在于编写时简单。
public class Demo03 {
public static void main (String[] args){
//递归阶乘
int n=5;
int sum=add(n);
System.out.println(sum);
public static int add(int n){
if(n==1){
return 1;
}
return add(n-1)*n;
}
-
递归程序虽然简单,但是耗时高! 而且及其吃内存。
4.1 尾递归
用一个数代替返回最终结果,在程序每次递归直接计算结果省去等待的结果
public class Demo03 { public static void main (String[] args){ //尾递归阶乘 int n=5; int sum=add(n,1); System.out.println(sum); } public static int add(int n,int t){ if(n==1){ return t; } return add(n-1,n*t); } }
- 能够使用递归写的,肯定可拿循环写,能够用递归写的不一定能使用尾递归写