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



相关文章
|
18天前
|
存储 安全 算法
Java容器及其常用方法汇总
Java Collections框架提供了丰富的接口和实现类,用于管理和操作集合数据。
Java容器及其常用方法汇总
|
20天前
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
72 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
18天前
|
Java API
java.time常用方法汇总
`java.time` API 是从 Java 8 开始引入的时间日期处理库,旨在替代老旧的 `java.util.Date` 和 `Calendar`。它提供了更简洁、强大和灵活的方式处理日期、时间、时区及时间间隔,支持全球化和时间计算需求。API 包含获取当前时间、创建指定时间、解析和格式化字符串、进行加减运算、比较时间、获取年月日时分秒、计算时间间隔、时区转换以及判断闰年等功能。示例代码展示了如何使用这些功能,极大简化了开发中的时间处理任务。
|
2月前
|
Java 程序员 调度
Java 高级面试技巧:yield() 与 sleep() 方法的使用场景和区别
本文详细解析了 Java 中 `Thread` 类的 `yield()` 和 `sleep()` 方法,解释了它们的作用、区别及为什么是静态方法。`yield()` 让当前线程释放 CPU 时间片,给其他同等优先级线程运行机会,但不保证暂停;`sleep()` 则让线程进入休眠状态,指定时间后继续执行。两者都是静态方法,因为它们影响线程调度机制而非单一线程行为。这些知识点在面试中常被提及,掌握它们有助于更好地应对多线程编程问题。
68 9
|
Java
QuartZ Cron表达式在java定时框架中的应用
CronTrigger CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表。 CronTrigger,你可以指定触发的时间表如“每星期五中午”,或“每个工作日9:30时”,甚至“每5分钟一班9:00和10:00逢星期一上午,星期三星期五“。
1120 0
|
5天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
110 60
【Java并发】【线程池】带你从0-1入门线程池
|
1天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
20 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
|
17天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
78 14
|
20天前
|
安全 Java 程序员
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
49 13
|
21天前
|
安全 Java 开发者
【JAVA】封装多线程原理
Java 中的多线程封装旨在简化使用、提高安全性和增强可维护性。通过抽象和隐藏底层细节,提供简洁接口。常见封装方式包括基于 Runnable 和 Callable 接口的任务封装,以及线程池的封装。Runnable 适用于无返回值任务,Callable 支持有返回值任务。线程池(如 ExecutorService)则用于管理和复用线程,减少性能开销。示例代码展示了如何实现这些封装,使多线程编程更加高效和安全。

热门文章

最新文章