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



相关文章
|
2天前
|
存储 Java 编译器
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
【Java开发指南 | 第八篇】Java变量、构造方法、创建对象
16 3
|
2天前
|
Java 开发者
Java一分钟之-Lambda表达式与函数式接口
【5月更文挑战第12天】Java 8引入的Lambda表达式简化了函数式编程,与函数式接口结合,实现了代码高效编写。本文介绍了Lambda的基本语法,如参数列表、箭头符号和函数体,并展示了如何使用Lambda实现`Runnable`接口。函数式接口仅有一个抽象方法,可与Lambda搭配使用。`@FunctionalInterface`注解用于确保接口具有单一抽象方法。文章还讨论了常见的问题和易错点,如非函数式接口、类型冲突以及Lambda表达式的局部变量可见性,并提供了避免这些问题的策略。通过理解Lambda和函数式接口,开发者能提高代码可读性和效率。
42 4
|
2天前
|
Java
探索Java世界的奇妙工具——运算符与表达式运算符
探索Java世界的奇妙工具——运算符与表达式运算符
8 0
|
2天前
|
Java API
Java 8新特性之Lambda表达式与Stream API实践指南
【5月更文挑战第15天】 随着Java语言的不断发展,Java 8作为一个重要的版本,引入了许多令人兴奋的新特性。其中,Lambda表达式和Stream API是Java 8最受关注的两个特性。本文将深入探讨Lambda表达式的基本概念、语法和使用场景,以及如何结合Stream API实现更加简洁、高效的代码编写。通过实例演示,帮助读者快速掌握这两个新特性,提高Java编程能力。
|
2天前
|
Java
Java正则表达式去掉非汉字字符
【5月更文挑战第11天】Java正则表达式去掉非汉字字符
16 3
|
2天前
|
Java
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
14 4
|
2天前
|
Java API 开发者
Java中Lambda表达式的深入理解与应用
【5月更文挑战第12天】在Java 8之后,Lambda表达式已经成为了Java开发者必备的技能之一。Lambda表达式以其简洁、灵活的特点,大大提高了编程的效率。本文将深入探讨Lambda表达式的基本概念,语法规则,以及在实际开发中的应用,帮助读者更好地理解和使用Lambda表达式。
|
2天前
|
Java 程序员 API
Java 8新特性之Lambda表达式与Stream API的深度解析
【5月更文挑战第12天】本文将深入探讨Java 8中的两个重要新特性:Lambda表达式和Stream API。我们将从基本概念入手,逐步深入到实际应用场景,帮助读者更好地理解和掌握这两个新特性,提高Java编程效率。
41 2
|
2天前
|
算法 安全 Java
Java表达式和规则引擎的比较与考量
Java表达式和规则引擎的比较与考量
10 0
|
2天前
|
小程序 Java 容器
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
03|Java基础语法:讲解标识符、关键字、变量、数据类型、运算符、控制语句(条件分支、循环)
10 0