在上一篇文章[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客中,我们学习了Java基础基本概念中的标识符,关键字,基本数据类型。这篇文章,我们将学习:运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用。
运算符:
Java中支持的运算符:
算数运算符 | +,-,*,/,%,++,-- |
关系运算符 | >, >=, <, <=, <>, !=, == |
逻辑运算符 | !, &, |, ^, &&, || |
位运算符 | ~, &, |, ^, <<, >>, >>> |
赋值运算符 | = |
扩展赋值运算符 | +=, -=, *=, /= |
字符串连接运算符 | + |
++或--:符号在数字后面,先运算再取值;否则,先取值后运算;
int i = 0; int j = i++; // j = 0, i = 1 等同于: int j = i; i = i + 1;
int i = 0; int j = ++i; // j = 1, i = 1 等同于 i = i + 1; int j = i;
!:逻辑非, &:逻辑与, |:逻辑或, ^:逻辑异或, &&:短路与, ||:短路或
a | b | !a | a&b | a|b | a^b | a&&b | a||b |
true | true | false | true | true | false | true | true |
true | false | false | false | true | true | false | true |
false | true | true | false | true | true | false | true |
false | false | true | false | false | false | false | false |
&&:符号左边为false时,停止运算;
||:符号左边为true时,停止运算;
字符串连接运算符:
+:+两边只要有一个操作数是字符串类型,系统自动将另一个操作数转为字符串类型,再进行字符串连接。
当进行打印时,打印的对象无论是否是字符串,都转成字符串打印。
表达式:
java表达式由运算符和操作数构成。运算符代表运算的动作,操作数是要操作的数据。操作数可以是常量也可以是变量。表达式的类型由运算结果的类型决定。
语句:
包括三大类:顺序,选择,循环。
语句 | ||
顺序语句 | 自上而下一句一句执行; (按照地址内容的顺序执行指令) |
方法:
Java中的方法类似于其他语言的函数,是用于完成特定功能的片段。
形式:[修饰符1 修饰符2 ...] 返回值类型 方法名(形参列表){
java 语句
}
1) 形式参数:被调用方法上用于接收外界输入的参数;
2) 实际参数:调用方法时传给方法的参数;
3)返回值:方法执行完成后返回给调用环境的数据;
4)返回值类型:事先约定好的返回值类型;如果没有返回值,用void;必须给出返回值类型。
5)方法的调用方式:对象.方法名(实参列表);
6)实参的数目,数据类型,次序和调用方法所声明的形参列表要一一对应。
7)return方法终止方法执行并指定要返回的数据。
8)Java中,进行函数调用中遵循的传值原则:基本数据类型传的是值本身;引用数据类型传的对象的引用,而不是对应本身。
变量的作用域:
按作用域区分变量,可以将变量分为局部变量,成员变量。
局部变量,声明在方法体中,出了方法不能使用。
成员变量,声明在类中,方法的外部,用于描述类的属性。
递归调用:
递归调用指方法调用过程中,出现该方法本身的调用。比如使用递归解决Fabonacci数列。
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...
这个数列从第3项开始,每一项都等于前两项之和。
方法定义是:F[n]=F[n-1]+F[n-2](n>=2,F[0]=1,F[1]=1)
比如,我们求第12个数是多少
public class Fibonacci { public static void main(String[] args) { System.out.println(f(12)); } public static int f(int n) { if (n == 1 || n == 1) { return n; } System.out.println("n = " + n); return f(n - 1) + f(n - 2); } }
输出:n = 144.
递归调用一定要有终止条件,在这个函数中,终止方法执行的语句是:
if(n == 1 || n == 2){ return n; }
如果不用递归怎么实现呢?
public static void main(String[] args) { System.out.println("非递归实现:" + ff(12)); } public static int ff(int n) { if (n <= 0) { return -1; } if (n == 1 || n == 2) { return 1; } int pre = 1; int prePre = 1; int result = 0; for (int i = 3; i <= n; i++) { result = pre + prePre; prePre = pre; pre = result; } return result; }
从代码量上可以看出,用递归实现更加简洁明了。
我们总结一下这Java基础两篇文章中的重点:
1、标识符:用于给类,方法,变量,自定义数据类型命名,凡是可以自己定义的,都是标识符。
2、关键字:Java事先给定义好的标识符,对编译器有特殊意义。比如:if else, static,final,public等。关键字不能用作类名,方法名,变量名等。标识符可以包含关键字。
3、常量:第一次赋值后就不能改变的变量。
4、变量:是程序中最基本的存储单元,代表内存中的一小块区域。不同类型的变量在内存中占用的存储空间长度不同。在程序中通过变量名访问变量。因此,变量要先定义,再赋值,再使用。
程序执行时会被操作系统加载到内存,执行时将内存分为4块区域:
heap-存放new出来的对象,stack-局部变量,data segment-存放静态变量,字符串常量,code segment-存放代码;
按被声明的位置分,分为:局部变量,成员变量。局部变量作用于方法内;成员变量作用于整个对象,修饰对象的属性。
按类型分4类8种;
4类:逻辑型;字符型;数值型;浮点型;
8种:char,byte,short,int,long,double,float,boolean
boolean不能和其他类型相互转化;
容量小的能自动转成容量大的;容量大的转成容量小的可能有精度损失或溢出。
char,byte,short要转成int,才能运算;多种类型混合计算时,自动转成大类型后再进行运算;
数值型默认是int类型;浮点型默认是double类型。
5、语句:顺序,选择,循环;
选择:Switch注意默认值问题,case击穿问题,推荐使用break。
循环:for,while,do...while。while循环符合条件才执行;do...while 无论是否符合条件都会执行一次。
6、方法:
修饰符,返回值类型,方法名,形参列表。形参和实参的区别。
递归调用等。
希望这两篇Java基础学习的文章能给你带来帮助。