保留字:其实就是还没有赋予特殊含义,但是准备日后要使用过的单词。
2,标示符:其实就是在程序中自定义的名词。比如类名,变量名,函数名。包含 0-9、a-z、$、_ ;
注意:
1),数字不可以开头。
2),不可以使用关键字。
3,常量:是在程序中的不会变化的数据。
4,变量:其实就是内存中的一个存储空间,用于存储常量数据。
作用:方便于运算。因为有些数据不确定。所以确定该数据的名词和存储空间。
特点:变量空间可以重复使用。
什么时候定义变量?只要是数据不确定的时候,就定义变量。
变量空间的开辟需要什么要素呢?
1,这个空间要存储什么数据?数据类型。
2,这个空间叫什么名字啊?变量名称。
3,这个空间的第一次的数据是什么? 变量的初始化值。
变量的作用域和生存期:
变量的作用域:
作用域从变量定义的位置开始,到该变量所在的那对大括号结束;
生命周期:
变量从定义的位置开始就在内存中活了;
变量到达它所在的作用域的时候就在内存中消失了;
数据类型:
1):基本数据类型:byte、short、int、long、float、double、char、boolean
2):引用数据类型: 数组、类、接口。
级别从低到高为:byte,char,short(这三个平级)-->int-->float-->long-->double
自动类型转换:从低级别到高级别,系统自动转的;
强制类型转换:什么情况下使用?把一个高级别的数赋给一个别该数的级别低的变量;
运算符号:
1)、算术运算符。
+ - * / % %:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+:连接符。
++,--
2)、赋值运算符。
= += -= *= /= %=
3)、比较运算符。
特点:该运算符的特点是:运算完的结果,要么是true,要么是false。
4)、逻辑运算符。
& | ^ ! && ||
逻辑运算符除了! 外都是用于连接两个boolean类型表达式。
&: 只有两边都为true结果是true。否则就是false。
|:只要两边都为false结果是false,否则就是true
^:异或:和或有点不一样。
两边结果一样,就为false。
两边结果不一样,就为true.
&和 &&区别: &:无论左边结果是什么,右边都参与运算。
&&:短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:|:两边都运算。
||:短路或,如果左边为true,那么右边不参与运算。
5)、位运算符:用于操作二进制位的运算符。
& | ^
<< >> >>>(无符号右移)
练习:对两个变量的数据进行互换。不需要第三方变量。
int a = 3,b = 5-->b = 3,a = 5
a = a + ba =8
b = a - bb =3c
a = a - ba =5
a = a ^ b//
b = a ^ b//b= a ^ b ^ b = a
a = a ^ b//a= a ^ b ^ a = b
练习:高效的算出 2*8 ------------------>位移运算的考验,java基础面试中它的曝光率不低哦
5,语句。
If switch do while while for
这些语句什么时候用?
1)、当判断固定个数的值的时候,可以使用if,也可以使用switch。
但是建议使用switch,效率相对较高。
switch(变量){
case 值:要执行的语句break
…
default:要执行的语句
}
工作原理:用小括号中的变量的值依次和case后面的值进行对比,和哪个case后面的值相同了
就执行哪个case后面的语句,如果没有相同的则执行default后面的语句;
细节:1):break是可以省略的,如果省略了就一直执行到遇到break为止;
2):switch 后面的小括号中的变量应该是byte,char,short,int四种类型中的一种;
3):default可以写在switch结构中的任意位置;如果将default语句放在了第一行,则不管expression与case中的value是否匹配,程序会从default开始执行直到第一个break出现。
2)、当判断数据范围,获取判断运算结果boolean类型时,需要使用if。
3)、当某些语句需要执行很多次时,就用循环结构。
while和for可以进行互换。
区别在于:如果需要定义变量控制循环次数。建议使用for。因为for循环完毕,变量在内存中释放。
break:作用于switch ,和循环语句,用于跳出,或者称为结束。
break语句单独存在时,下面不要定义其他语句,因为执行不到,编译会失败。当循环嵌套时,break只跳出当前所在循环。要跳出嵌套中的外部循环,只要给循环起名字即可,这个名字称之为标号。
代码片段:
z: //for循环标号
for(int x=0x<3x++){
for(int y=0y<2y++){
//不带标号的就是结束整个循环体的作用,在那个循环内部就结束哪个循环
if(x==1)break
//带标号跳过break后面的语句,回到标号位置的循环,继续该循环下次的条件判断,
//已决定是否执行该循环体
if(x==2&&y==1)break z
}
}
continue:只作用于循环结构,继续循环用的。
作用:结束本次循环,继续下次循环。该语句单独存在时,下面不可以定义语句,执行不到。
6,函 数:为了提高代码的复用性,可以将其定义成一个单独的功能,该功能的体现就是java中的函数。函数就是体现之一。
java中的函数的定义格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数1,…){
执行语句;
return 返回值;
}
当函数没有具体的返回值时,返回的返回值类型用void关键字表示。
如果函数的返回值类型是void时,return语句可以省略不写的,系统会帮你自动加上。
return的作用:结束函数。结束功能。
如何定义一个函数?
函数其实就是一个功能,定义函数就是实现功能,通过两个明确来完成:
1)、明确该功能的运算完的结果,其实是在明确这个函数的返回值类型。
2)、在实现该功能的过程中是否有未知内容参与了运算,其实就是在明确这个函数的参数列表(参数类型&参数个数)。
函数的作用:
1)、用于定义功能。
2)、用于封装代码提高代码的复用性。
注意:函数中只能调用函数,不能定义函数。
主函数:
1)、保证该类的独立运行。
2)、因为它是程序的入口。
3)、因为它在被jvm调用。
函数定义名称是为什么呢?
答:1)、为了对该功能进行标示,方便于调用。
2)、为了通过名称就可以明确函数的功能,为了增加代码的阅读性。
重载的定义是:在一个类中,如果出现了两个或者两个以上的同名函数,只要它们的参数的个数,或者参数的类型不同,即可称之为该函数重载了。
如何区分重载:当函数同名时,只看参数列表。和返回值类型没关系。
7,数 组:用于存储同一类型数据的一个容器。好处:可以对该容器中的数据进行编号,从0开始。数组用于封装数据,就是一个具体的实体。
如何在java中表现一个数组呢?两种表现形式。
1)、元素类型[] 变量名 = new 元素类型[元素的个数];
2)、元素类型[] 变量名 = {元素1,元素2...};
元素类型[] 变量名 = new 元素类型[]{元素1,元素2...};
---------------------------------------------------------
//二分查找法。必须有前提:数组中的元素要有序。
public static inthalfSeach_2(int[] arr,int key){
int min,max,mid//定义最小,最大,中间数
min = 0//最小为0
max =arr.length-1// 最大为数组的长度-1
mid =(max+min)>>1//(max+min)/2//中间数为最大加最小除以2
while(arr[mid]!=key){//如果数组中间值不等于key
if(key>arr[mid]){//如果key>中间值
min = mid+ 1
}
elseif(key
max = mid- 1
if(max
return -1
mid =(max+min)>>1
}
return mid
}
知识拓展:
java内存。
1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。
栈:存储的都是局部变量 ( 函数中定义的变量,函数上的参数,语句中的变量 );
只要数据运算完成所在的区域结束,该数据就会被释放。
堆:用于存储数组和对象,也就是实体。啥是实体呢?就是用于封装多个数据的。
1:每一个实体都有内存首地址值。
2:堆内存中的变量
Java基础——Java开发前奏
Java的特点
Java最主要的特点是:一次编译,到处运行(Write Once, Run Anywhere.)。
原理:Java源程序经编译后生成.class字节码文件,.class文件由Java虚拟机(JVM)解释执行。不同的操作系统下,只要有相应的Java字节码解释程序,.class文件就能够运行,这是Java跨平台性的根本。c和java编程与执行的过程如下图所示:
Java的内涵
1、是一种编程语言
2、是一套开发工具
3、是一个运行环境
Java应用平台
1、J2EE(Java 2 Platform Enterprise Edition)——用于企业级应用程序的开发
2、J2SE(Java 2 Platform Standard Edition)——用于普通标准应用程序的开发
3、J2ME(Java 2 Platform Micro Edition)——用于小型消费类电子产品或嵌入式系统的开发
J2SE包括4部分——JVM、JRE、JDK与Java语言。
环境变量的设置
环境变量——在操作系统中定义的变量,可供操作系统上所有的应用程序使用。
1、查看环境变量
a.命令提示行:环境变量的命令——set (环境变量名)
b.窗口方式:我的电脑->属性->高级->环境变量
2、设置path环境变量
path环境变量的作用:设置操作系统寻找和执行应用程序的路径。
JAVA_HOME:C:\Program Files\Java\jdk1.6.0_14
path:%JAVA_HOME%\bin%JAVA_HOME%\jre\bin
3、设置classpath环境变量
classpath环境变量的作用:让Java执行环境找到指定的java程序(.class文件)。
classpath:.%JAVA_HOME%\lib\dt.jar%JAVA_HOME%\lib\tools.jar
注意:a.%JAVA_HOME%前面有“.”,“.”表示当前目录,两个路径之间用“”隔开。
b.设置classpath的路径中不能有空格,也不能有中文字符。
JVM的运行过程
Java反编译工具——JAD、FrontEnd
Java开发工具
1、记事本
注意保存时文件名应为*.java。
2、UltraEdit、EditPlus
使用EditPlus编辑和编译Java程序,需要进行相应配置。选择“工具”->“参数选择”->“工具”->“用户工具”->“添加工具”->“应用程序”。首先设置“javac”的参数,具体如下图,其中“命令”为javac.exe文件的地址。
然后设置“java”的参数,如下图所示,其中“命令”为java.exe文件的路径。
设置好后默认“javac”工具的快捷键为Ctrl+1,“java”工具的快捷键为Ctrl+2。当编辑好Java源程序后,使用Ctrl+1即可对其进行编译,然后按Ctrl+2运行程序。如下图所示:
3、集成开发环境——Eclipse、MyEclipse、JBuilder等。
关于Eclipse和MyEclipse,刚用的时候感觉二者差不多,查了资料才知道Eclipse 是基础,如同操作系统;而MyEclipse是在Eclipse上面运行的程序,不过进行了增强并提供了新功能。
以前用过Microsoft的Visual Studio 2005,个人感觉VS2005是一个功能非常强大的集成开发环境,不过.NET和Java毕竟不是一家人,学Java还是要用Eclipse的。
JDK中的常用包
1、java.lang——包含一些Java语言的核心类,如String、Math、Thread、System、Integer类等。
2、java.awt——包含构成抽象窗口工具集的多个类,用来构建和管理应用程序的图形用户界面(GUI)。
3、java.applet——包含applet运行所需的一些类。
4、java.net——包含执行与网络相关操作的类。
5、java.io——包含能提供多种输入/输出功能的类。
6、java.util——包含一些实用工具类。
Java的命名习惯
1、包名中的字母一律小写。如:xxxyyyzzz。
2、类名、接口名应使用名词,每个单词的首字母大写。如:XxxYyyZzz。
3、方法名,第一个单词小写,后面每个单词的首字母大写。如:xxxYyyZzz。
4、变量名,第一个单词小写,后面每个单词的首字母大写。
5、常量名中的每个字母一律大写。如:XXXYYYZZZ。
Java基础——Java语法基础(1)
Java代码基本格式
Java中所有程序代码都必须存在于一个类中,用class关键字定义类,在class之前可以有一些修饰符。格式如下:
修饰符 class 类名
{
程序代码
}
注:
1、Java是严格区分大小写的。
2、Java程序中一句连续的字符串不能分开在两行中写。
Java程序的注释
Java里的注释有三种类型:
1、单行注释
在注释内容前面加“//”,格式为:
代码 //注释内容
2、多行注释
以斜杠加星号开头,以星号加斜杠结尾。
3、文档注释
以斜杠加两个星号开头,以一个星号加斜杠结束。
用这种方法注释的内容会被解释成程序的正式文档,并能包含进诸如javadoc之类的工具程序生成的文档里,用以说明该程序的层次结构及其方法。
补充:
1、多行注释中可以嵌套“//”注释,但不能嵌套多行注释符号。
2、程序注释一般占程序代码总量的20%-50%,“可读性第一,效率第二”。
Java中的标识符
Java中的包、类、方法、参数、变量的名字,可以由任意顺序的大小写字母、数字、下划线(_)、美元符号($)组成,但不能以数字开头,不能是Java中的保留关键字。
Java的关键字
1、用于类和接口的声明:class, extends, implements, interface
2、包引入和包声明:import, package
3、数据类型:byte, boolean, char, double, int, long, float, short
4、某些数据类型的可选值:flase, ture, null
5、流程控制:break, case, continue, default, do, else, for, if, return, switch, while
6、异常处理:catch, finally, throw, throws, try
7、修饰符:abstract, final, native, private, protected, public, static, synchronilzed, transient, volatitle
8、操作符:instanceof
9、创建对象: new
10、引用:this, supper
11、方法返回类型:void
12、保留字:const, goto
Java中的常量
1、整形常量
十进制
十六进制——以0x或0X开头
八进制——以0开头
长整形——以L(l)结尾
2、浮点数常量
单精度浮点数——后面加f(F)
双精度浮点数——后面加d(D)
注:
a.小数常量的默认类型是double型,所以float类型常量后一定要加f(F)。
b.浮点数常量可以用指数形式表示,如5.022e+23f
3、布尔常量
true或false
4、字符常量
由英文字母、数字、转义序列、特殊字符等的字符所表示,如'a'、'\t'等。
Java中的字符占两个字节,是用Unicode码表示的,也可以使用'\u'加Unicode码值来表示对应字符,如'\u0027'。
常用的转义字符有:
\t——表示接受键盘输入,相当于按了一下回车键
\n——表示换行
\t——表示制表符,相当于Tab键
\b——表示退格键,相当于Back Space键
\'——表示单引号
\”——表示双引号
\\——表示反斜杠“\”
5、字符串常量
字符串常量用双引号括起来。
6、null常量
null常量表示对象的引用为空。
Java的变量类型
基本数据类型之间的转换
1、自动类型转换(隐式类型转换)
条件:
a.两种类型彼此兼容
b.目标类型的取值范围要大于源类型
2、强制类型转换(显示类型转换)
格式:目标类型 常量 = (目标类型)值
注:字符串可以使用加号“+”同其他的数据类型相连而形成一个新的字符串。
变量的作用域
代码块决定了变量的作用域,作用域决定了变量的可见性和存在时间。
局部变量
在一个函数或函数里面的代码块中定义的变量称为局部变量。
局部变量在进行取值操作前必须被初始化或进行过赋值操作。
函数
1、定义函数的格式
返回值类型 函数名(参数类型 形式参数1,参数类型形式参数2,...)
{
程序代码
return 返回值
}
2、函数的重载
函数的重载就是在一个类中可以同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。
Java基础——Java语法基础(2)——运算符
Java中的运算符
1、算术运算符
a.字符串 + 其他类型 = 字符串
b.如果对负数求余,可以把除数负号忽略不计,如5 % -1 = 1。但如果被除数是负数就另当别论了。
2、赋值运算符
a.在Java中,可以把赋值语句连在一起,如:x = y = z = 5
b.x += y相当于x = x + y
3、比较运算符
a.要注意比较运算符“==”和赋值运算符“=”的区别,特别是布尔型变量进行比较时。
b.可以将比较运算的表达式写为“false == 变量”的形式,以防止误写为赋值运算。
4、逻辑运算符
a.逻辑运算符用于对boolean型结果的表达式进行运算,运算的结果都是boolean型 。
b.“&”和“&&”的区别在于,如果使用前者连接,那么无论任何情况,“&”两边的表达式都会参与计算。如果使用后者连接,当“&&”的左边为false,则将不会计算其右边的表达式。“|”和“||”的区别与“&”和“&&”的区别一样。
5、位运算符
位运算——对数据按二进制位进行移位操作。
适用类型:byte, short, char, int, long
位运算包括:
& 位与
| 位或
^ 位异或
<< 左移,左移n位相当于乘以2的n次方
>> 右移,右移n位相当于除以2的n次方
>>> 无符号右移
注:
a.位运算符也可以与“=”赋值运算符组合产生新的赋值运算符,如:&=, <<=等。
b.移位不会改变变量本身的值,如a>>1在一行语句中单独存在毫无意义。
c.对低于int型的操作数将先自动转换为int型再移位;对int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的位数;对于long型整数移位时则是先将移位位数对64取模。
运算符的优先级
编程技巧:
1、不要在一行中编写太复杂的表达式,可以将其分解为几条语句。
2、多用括号。
Java基础——Java语法基础(3)
程序控制流程
1、顺序结构
按顺序执行
2、if条件语句
a.if...
b.if...else...
可简写为:变量 = 布尔表达式? 语句1:语句2
c.if...else if...else...
3、switch选择语句
switch(表达式)
{
case 取值1:
语句块1
break
...
case 取值n:
语句块n
break
default:
语句块n+1
break
}
4、while循环语句
while(条件表达式)
{
执行语句
}
5、do while循环语句
do
{
执行语句
}while(条件表达式)
6、for循环语句
for(初始化表达式循环条件表达式循环后操作表达式)
{
执行语句
}
7、增强for循环
for (循环变量类型 循环变量名称: 要被遍历的对象)
{
执行语句
}
8、break与continue语句
a.一个无标号的break语句会把控制传回当前最内层循环(while,do,for,switch)的下一条语句。
b.无标号的continue语句的作用是跳过当前循环的剩余语句块,接着执行下一次循环。
数组
1、数组的定义
如:int[] x = new int[100]
或int x[] = new int[100]
2、数组的静态初始化
如:int[] aa = new int[] {3,4,5}
3、多维数据
如:
int[][] xx = new int[3][]
xx[0] = new int[3]
xx[1] = new int[2]
4、一些与数组相关的函数
a. System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length)复制数组,将源数组srcPos开始的length个元素从目标数组的destPos位置开始存储。
b. Array.sort()数组升序排序
一、标识符
java对各种变量、方法和类等要素命名时使用的字符序列成为标识符;通俗点,凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则
1.标识符命名规则:
1)标识符由字符、下划线、美元符或数字组成。
2)标识符应以字符、下划线、美元符开头
3)java标识符大小写敏感,长度无限制
4)约定俗成,java标识符选取应该注意“见名知意”且不能与java语言的关键字(eclipes中带颜色的基本都是关键字)重名
二、关键字
java中一些赋以特定含义,用作专门用途的关键的字符串成为关键字(keyword);且大多数编辑器都会将关键字用特殊方式标出 所有java关键字都是小写英文
一些常用关键字:
三、java的基本数据类型
1.java常量
java的常量值用字符串表示,区分为不同的数据类型。如:整型常量:1234实型常量:3.14字符常量:’a’逻辑常量:true、false字符串常量:”HelloWorld”
注意:
1)区分字符常量和字符串常量
字符常量是单引号引起来的单个,字符串常量是双引号引起来的不限长度
由于java采用Unicode编码,每个字符占两个字节,因而可用天十六进制编码形式表示,当然也可以用一个中文表示(单个中文占用两个字节)
2)”常量”这个名次还会用在另外其他语境中表示值不可变的变量
2.java变量
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。java程序中每一个变量都属于特定的数据类型,在使用前必需对其进行声明,声明格式为:type varName [=value]例如:int i =100foloat f=12.3fdouble d1,d2,d3=0.123(声明了三个变量,其中d1,d2是默认值,d3=0.123)String s=”hello”
从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必需先声明,然后必需进行赋值,才能使用。
1)java变量分类
按被声明的位置划分:
局部变量:方法或语句块内部定义的变量,只能在被定义的方法或语句块内使用
成员变量:方法外部、类的内部定义的变量,可以在整个类中使用,包括类里的方法或语句块内也可以使用
注意:类外面是不能有变量的声明的
按所属的数据类型划分:
基本数据类型变量
引用数据类型变量
四、运算符
java语言支持如下运算符:
算术运算符:+ - * / % ++ --
关系运算符:><>= <= == !=
逻辑运算符:! &| ^ &&||
位运算符:&| ^ ~ >><<>>>
赋值运算符:=
拓展赋值运算符:+ = -= *= /=
字符串链接运算符:+
三目条件运算符 ? :
1.算数运算符
注意:
1)
位运算符中的!、&、|、^跟罗技运算符相同,只是位运算符是对变量的二进制进行操作,我个人是用不到的,所以不在这里多做介绍
2)
++(—)
在前时先运算再取值
在后时先取值再运算
2.逻辑运算符
例如:
3.扩展赋值运算符
4.字符串连接符
“ + ”运算符两侧的操作数中只要有一个是字符串类型,系统会自动将另一个操作数转换为字符串然后进行连接,例如:
4 + 5 = 94 + “ab” = “4ab”
5.三目条件运算符
语法格式: x ? y : z 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
五、表达式和语句
1.表达式
表达式是符合一定语法规则的运算符和操作数的序列,例如:a5.0 + a(a – b) * c – 4i <30 &&i %10 !=0
1)表达式的类型和值
表达式中的操作数进行运算得到的结果称为表达式的值
表达式值的数据类型即为表达式的类型
2)表达式的运算顺序
应按照运算符的优先级从高到低的顺序进行
优先级相同的运算符按照实现约定的结合方式进行
我个人觉得运算顺序这块是可以忽略的,首先我的逻辑思维能力不是特别强,另外我的记性也不是特别好,所以如果我需要在表达式中区分优先级的话我会选择加括号。但是我觉得对于一些比较复杂且关键的逻辑运算,如果个人逻辑运算能力加记忆都比较好可以保证不出错的话,善用罗技运算符优先级未尝不是一种不让别人看懂你代码copy的手段。算是一种小小的防护吧,反正我这种人是不会去尝试分析这种代码的,太累
2.分支(条件)语句
ifif … elseif … else if … else ifif … else if … else if …else
switch () {case xx:
……………case xx:
……………default:
……………}
1.java中switch语句只能探测int类型的值(char类型的值也可以,因为他可以转换城int类型)
2.小心case穿透,所以最好与break连用
3.多个case可以连用,如下的示例代码也可以这样写(当i=1,2,18都会输出18):
3.循环语句
for(………){……}while(…){……}先判断再执行大括号里面的内容,然后再判断是否要继续执行do{……} whille(…)先执行大括号里面的内容再判断是否要继续执行
4.break &continue语句
break语句用于终止某个语句块的执行。用在循环体语句中么可以强行退出循环continue语句用在循环体语句中,用于终止某次循环过程,跳过循环中continue语句下面未执行的循环,开始下一次循环过程
八、方法
java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式:[修饰符1 修饰符2 …] 返回值类型 方法名 (形式参数列表) {
java语句}
形式参数:在方法被调用时用于接受外界输入的数据
实参:调用方法时实际纯给方法的数据
返回值:方法在执行完毕后返回给调用他的环境的数据
返回值类型:实现约定的返回值的数据类型,如无返回值,必需给出返回值类型void
java语言中调用方法:对象名.方法名(实参列表)
实参的数目、数据类型和次序必需和所调用方法声明的形参列表匹配
return语句终止方法的运行并指定要返回的数据
java中进行函数调用传递参数时,遵循值传递的原则:
基本类型传递的是该数据值本身,引用累心美国传递的是对对象的引用,而不是对象本身
例子中的方法1,前面定义的数据类型为void, 所以方法中不能有return返回值,方法4中因为有return返回值,所以前面必需定义为返回值的类型,也就是m4前面那个int
九、递归调用
递归调用是指在方法执行过程中出现该方法本身的调用
先看一个例子,这是一个简单的递归调用:
简单分析下:
1.首先main主方法中输出字符串,内容是test方法当参数等于5的时候的返回值2.然后将参数5传入test方法,返回值是:5 * test(4)3.再次将参数4传入test方法中,返回值是:4 * test(3)4.再将参数3传入test方法中,返回值是:3 * test(2)5.再讲参数2传入test方法中:返回值是:2 * test(1)6.再将参数1传入到方法中:返回值是:1然后程序开始往回走,返回值传入test(1)中得到2*1再往回走,将刚刚得到的2*1传入到test(2)中得到3*2*1还要往回走,将刚刚得到的3*2*1传入到test(3)中得到4*3*2*1还要往回走,将刚刚得到的4*3*2*1传入到test(4)中也就是test(5)的返回值,得到5*4*3*2*1最后将test5的返回值传入到我们的主方法输出于语句中5*4*3*2*1=120,那么我们的输出语句输出的应该为120
这就是简单的递归调用的例子了
再来看一个例子:
非递归的写法:
请自行领悟
最后奉上java基础语法完整学习路线图,除此之外还有精心整理的其他java学习路线图,学习书籍电子书,阿里巴巴手册,视频教程等即可点此领取:
https://zhuanlan.zhihu.com/p/6