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



相关文章
|
13天前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
21天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
13天前
|
Java
探索Java中的Lambda表达式
【10月更文挑战第37天】本文将带你深入理解Java的Lambda表达式,从基础语法到高级特性,通过实例讲解其在函数式编程中的应用。我们还将探讨Lambda表达式如何简化代码、提高开发效率,并讨论其在实际项目中的应用。
|
15天前
|
Java API
Java中的Lambda表达式与函数式编程####
【10月更文挑战第29天】 本文将深入探讨Java中Lambda表达式的实现及其在函数式编程中的应用。通过对比传统方法,我们将揭示Lambda如何简化代码、提高可读性和维护性。文章还将展示一些实际案例,帮助读者更好地理解和应用Lambda表达式。 ####
|
15天前
|
JSON 自然语言处理 Java
这款轻量级 Java 表达式引擎,真不错!
AviatorScript 是一个高性能、轻量级的脚本语言,基于 JVM(包括 Android 平台)。它支持数字、字符串、正则表达式、布尔值等基本类型,以及所有 Java 运算符。主要特性包括函数式编程、大整数和高精度运算、完整的脚本语法、丰富的内置函数和自定义函数支持。适用于规则判断、公式计算、动态脚本控制等场景。
|
20天前
|
Java API 开发者
Java中的Lambda表达式与函数式编程####
在Java的演变过程中,Lambda表达式和函数式编程的引入无疑是一次重大的飞跃。本文将深入探讨Lambda表达式的定义、用法及优势,并结合实例说明如何在Java中利用Lambda表达式进行函数式编程。通过对比传统编程方式,揭示Lambda表达式如何简化代码、提高开发效率和可维护性。 ####
|
28天前
|
自然语言处理 安全 Java
Aviator Java 表达式引擎
AviatorScript 是一门高性能、轻量级寄宿于 JVM 之上的脚本语言。
47 10
|
24天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
37 1
|
26天前
|
Java API 数据处理
探索Java中的Lambda表达式与Stream API
【10月更文挑战第22天】 在Java编程中,Lambda表达式和Stream API是两个强大的功能,它们极大地简化了代码的编写和提高了开发效率。本文将深入探讨这两个概念的基本用法、优势以及在实际项目中的应用案例,帮助读者更好地理解和运用这些现代Java特性。
|
29天前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
下一篇
无影云桌面