[Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用

简介: 在上一篇文章[Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客中,我们学习了Java基础基本概念中的标识符,关键字,基本数据类型。这篇文章,我们将学习:运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用。

 在上一篇文章[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表达式由运算符和操作数构成。运算符代表运算的动作,操作数是要操作的数据。操作数可以是常量也可以是变量。表达式的类型由运算结果的类型决定。


语句:

包括三大类:顺序,选择,循环。


语句
顺序语句

自上而下一句一句执行;

(按照地址内容的顺序执行指令)


12.png

方法:



 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基础学习的文章能给你带来帮助。



相关文章
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
java.lang.NullPointerExceptionMybatisPlus出现,测试,java.lang.NullPointe,空指针异常,public方法少写了一个字段,没加注解
|
2天前
|
Java 数据处理 数据库
Java中equalsIgnoreCase方法的应用
Java中equalsIgnoreCase方法的应用
|
2天前
|
存储 Java 程序员
Java中的国际化与本地化实现方法
Java中的国际化与本地化实现方法
|
2天前
|
JSON NoSQL Java
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
Redis18的Java客户端-StringRedisTemplate,序列化存在的问题,使用StringRedisTemplate解决序列化的方法
|
Java 编译器 程序员
Java编程思想第五版精粹(四)-运算符
Java编程思想第五版精粹(四)-运算符
92 0
|
安全 Java 编译器
Java编程思想第五版(On Java8)(四)-运算符(下)
Java编程思想第五版(On Java8)(四)-运算符(下)
104 0
|
缓存 移动开发 Java
Java编程思想第五版(On Java8)(四)-运算符(中)
Java编程思想第五版(On Java8)(四)-运算符(中)
113 0
|
Java 编译器 程序员
Java编程思想第五版(On Java8)(四)-运算符(上)
Java编程思想第五版(On Java8)(四)-运算符(上)
75 0
|
2天前
|
监控 安全 Java
Java中的线程调度与性能优化技巧
Java中的线程调度与性能优化技巧
|
2天前
|
缓存 安全 Java
Java中的线程安全问题及解决方案
Java中的线程安全问题及解决方案