java中的常用语法
一.选择结构(1)
1.if 选择结构
为什么要使用选择结构1:
在生活中我们经常需要做判断,然后才能够决定是否做某件事,而if选择结构是根据条件判断在做处理的一种语法结构.
语法:
if(条件) { //条件成立后要执行的代码,可以是一条语句,也可以是一组语句 }示例代码:
public class Sl1 { public static void main (String [] args) { Scanner in = new Scanner (System.in); System.out.println("请输入java成绩"); int a =in.nextInt(); if (a>80) { System.out.println("奖励一个MP4"); } } }可以根据条件判断而输出条件成立后的输出语句,满足于具有选择性要求的代码块
流程图:
2.if—else结构
语法:
if(条件){ //代码块1 }else { //代码块2 }示例代码:
public class Sl2 { public static void main (String [] args) { Scanner in = new Scanner (System.in); System.out.println("请输入java成绩"); int a =in.nextInt(); if (a>80) { System.out.println("奖励一个MP4"); }else { System.out.println("写代码"); } } }if–else选择结构:可以处理简单的条件分支,这种形式简单,但在实际中使用非常频繁
流程图:
3.多重if选择结构
语法:
if(条件1){ //代码块1 }else if(条件2){ //代码块2 }else { //代码块3 }示例:
public class Sj3 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("请输入消费金额:"); int money = in.nextInt(); System.out.println("是否参加优惠换购活动?(0~5)"); if(money<50) { System.out.println("抱歉,您的消费金额不满足活动要求"); } else if(money>=50 && money<100){ int choose = in.nextInt(); System.out.println("谢谢合作"); } else if(money>=100 && money<200) { int choose = in.nextInt(); System.out.println("抱歉,您的消费金额不满足活动要求"); } else { int choose = in.nextInt(); System.out.println("欢迎使用"); } } }多重if选择结构:可以处理复杂的条件分支情况.多重if选择结构在解决需要判断的条件是连续的区间时有很大的优势
流程图:
4.嵌套if选择结构
语法:
if(条件1){ if(条件2) { //代码块1 }else { //代码块2 } }else{ //代码块3 }嵌套if选择结构:在if选择结构中又包含了一个或多个if选择结构的情况,这种结构一般较为复杂的流程控制中.
嵌套if的形式有很多种,上面的语法是最常见的一种
5.随机数公式
语法
int random=(int ) (Math.random()*10);6.符号汇总
7.常用逻辑运算符
| 运算符 | 汉语名称 | 表达式 | 说明 | 举例 |
|---|---|---|---|---|
| && | 与,并且 | 条件1&&条件2 | 两个条件同时为真,则结果为真,两个条件有一个为假,则为假 | 具有选举的条件 |
| 或,或者 | 条件1 | |||
| ! | 非 | !条件 | 条件为真时,结果为假,条件为假时,结果为真 | 成为优秀软件工程师的条件为 |
一.选择结构(2)
switch选择结构
.1为什么使用switch选择结构
问题1:
韩阳参加计算机编程比赛:
如获得第一名,将参加麻省理工大学组织的一个月夏令营;
如获得第二名,将奖励惠普笔记本电脑一个;
如获得第三名,将奖励移动硬盘一个;
否则,没有奖励;
如果使用多重if选择结构来解决,可以但会很麻烦,如以下代码:
public class D5 { public static void main (String []args) { Scanner in = new Scanner(System.in); System.out.println("请输入三个数字"); double a = in.nextDouble(); double b = in.nextDouble(); double c = in.nextDouble(); double s ; if (a>b) { s=a; a=b; b=s; } if (a>c) { s=c; c=a; a=s; } if (b>c) { s=b; b=c; c=s; } System.out.println(+a+""+b+""+c); //System.out.println(a); //System.out.println(b); //System.out.println(c); } }可以而如果使用switch选择结构就可以简化代码格式,
.2使用switch选择结构的四个重要点:
(1)switch:表示“开关”,这个开关就是switch关键字后面小括号里表达式的
值,JDK1.7后,switch语句小括号里可以是int、short、byte、char、枚举 类型、String类型表达式。
(2)case:表示“情况、情形”,case后可以是int、short、byte、char、枚举 、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
(3)default:表示“默认”,即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
(4)break:表示“停止”,即跳出当前结构。
.3switch选择结构的执行过程:
先计算并获得switch后面小括号里的表达式或变量的值,然后将计算结果顺序与每个case后的常量比较,当二者相等时,执行这个case块中的代码;当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。如果没有任何一个case后的常量与switch后的小括号中的值相等,则执行switch末尾部分的default块中的代码。
.4如何使用switch选择结构
switch选择结构的条件只能是等值的判断,而且只能是整型或字符型的等值判断。也就是说,switch选择结构只能用于判断一个整型变量或表达式是否等于某个整数值的情况,或者一个字符型变量或表达式是否等于某个字符的情况,并且每一个case后面的常量值都不同。而多重if选择结构既可以用于判断条件是等值的情况,也可以用于判断条件是区间的情况。
在case后面的代码块中,break语句是可以省略的,还可以让多个执行同一语句。
.5三目运算符:
(条件)?(true):(false) (条件) ? (true) : (false) (条件)?(true):(false)
二、循环结构(1)
1、循环结构的特点
循环结构不是无休止进行的,满足一定条件的时候循环才会继续,称为“循环条件”,循环条件不满足的时候,循环退出;其次,循环结构是反复进行相同的或类似的一系列操作,称为“循环操作”。
2、while循环结构
1、while循环结构的语法、流程图如下:
while(循环条件){ //循环操作 }2、while循环的执行顺序:
(1)声明并初始化循环变量。
(2)判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
(3)执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。
3、用while循环结构解决问题的步骤如下:
(1)分析循环条件和循环操作。
(2)套用while语法写出代码。
(3)检查循环能否退出。
4、常见的错误
(1)没有为循环变量赋初值
(2)缺少{ }
流程图:
3、do-while循环结构
1、do-while循环的语法:
do{ //循环操作 }while(循环条件);2、do-while循环的执行顺序:
(1)声明并初始化循环变量。
(2)执行一遍循环操作。
(3)判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
3、do-while循环解决问题的步骤:
(1)分析循环条件和循环操作;
(2)套用do-while语法写出代码;
(3)检查循环能否退出。
流程图:
二,循环结构(2)
.1for循环
for循环的语法:
for(表达式1;表达式2;表达式3){ //循环体 }循环结构的四部分:
(1)初始部分;(2)循环体;(3)迭代部分;(4)循环部分
流程图:
.2每个表达式的含义:
| 表达式 | 形式 | 功能 | 举例 |
|---|---|---|---|
| 表达式1 | 赋值语句 | 循环结构的初始部分,为循环变量赋初值 | int i=0 |
| 表达式2 | 条件语句 | 循环结构的循环条件 | I<100 |
| 表达式3 | 赋值语句,通常使用++或–运算符 | 循环结构的迭代部分,通常用来修改循环变量的值 | i++ |
for关键字后面括号中的三个表达式必须用“ ; ”隔开。for循环中的这三个部分及{ }中的循环体使循环结构必需的四个组成部分完美地结合在了一起,非常简明。
.3for循环结构的执行顺序:
(1)执行初始部分(int i=0;)
(2)进行循环条件判断(i<100;)
(3)根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环,步骤(4)和步骤(5)均不执行
(4)执行迭代部分,改变循环变量值(i++)
(5)依次重复步骤(2)~步骤(4),直到退出for循环结构
for循环结构中有三个表达式,在语法上,这三个表达式都可以省略,但表达式后面的分号不能省略:
省略“表达式1”,即不判断循环条件,循环将无终止运行,也就形成了“死循环”,如下面的for语句:
for(int i = 0; ; i++);
省略“表达式3”,即不改变循环变量的值,也会出现“死循环”,如下面的语句:
for(int i = 0; i < 10;);
.4二重循环
二重循环就是一个循环体内又包含另一个完整的循环结构。
while循环、do-while循环和for循环。这三种循环之间是可以互相嵌套的一个循环要完整地包含在另一个循环中,下面四种形式是合法的:
//while与while的嵌套: while(循环条件1){ //循环操作1 while(循环条件2){ //循环操作2; } } //do-while与do-while循环嵌套 do{ //循环操作1 do{ //循环操作2 }while(循环条件2); }while(循环条件1); //for与for循环嵌套 for(循环条件1){ //循环操作1 for(循环条件2){ //循环操作2 } } //while与for循环嵌套 while(循环条件1){ //循环操作1 for(循环条件2){ //循环操作2 } }四种形式中,循环条件1和循环操作1对应的循环称为外层循环,循环条件2和循环操作2对应的循环称为内层循环,内层循环结束后才执行外层循环的语句。在二重循环中,外层循环变量变化一次,内层循环变量要从初始值到结束值变量一遍。
二重循环中continue和break语句的对比
当continue和break语句用在内层循环时,只会影响内层循环的执行,对外层循环没有影响,它们的不同点在于执行该语句后,程序跳转的位置不同。
三.数组
1.数组概述
数组就是一个变量,用于将相同数据类型的数据存储在内存中,数组的每一个数据元素都属于同一数据类型.
1.1数组的四要素:
(一)标识符:首先,和变量一样,在计算机中,数组也有一个名称,称为标识符,用于区分不同的数组
(二)数组元素:当给出了数组名称,即数组标识符后,要向数组中存放数据,这些数据就称为数组元素
(三)数组下标:在数组中,为了正确地得到数组的元素,需要对它们进行编号,这样计算机才能根据编号去存取,这个编号就称为数组下标
(四)元素类型:存储在数组中的数组元素应该是同一数据类型,如可以把学员的成绩存储在同一数据中,而每一个学员的成绩可以用整形变量来存储,因此称它的元素数据类型为整型
1.2语法
数据类型[]数组名=new数据类型[数组长度]; 数据类型[] 数组名=new 数据类型[数组长度]; 数据类型[]数组名=new数据类型[数组长度];
2.如何使用数组
2.1声明数组
在java中,声明一维数组的语法如下.
语法:
数据类型[]数组名;或数据类型数组名[];(2) 数据类型 []数组名; 或 数据类型 数组名[];(2) 数据类型[]数组名;或数据类型数组名[];(2)
以上两种方式都可以声明一个数组,数组可以是任意合法的变量名.
声明数组就是告诉计算机该数组中的数据类型是什么.例如:
int[] scores; //存储学员的成绩,类型为int double height[]; //存储学员的身高,类型为double String[] names; //存储学员的姓名,类型为String2.2分配空间
为了给数组元素分配内存空间,此时还不能使用数组.因此要为数组分配内存空间,这样数组的每一个元素才能对应
一个存储单元.
简单地说,分配空间就是要告诉计算机在内存中分配一些连续的空间来存储数据.在java中可以使用new关键字来给
数组分配空间.
数据名=new数据类型[数组长度]; 数据名=new 数据类型[数组长度]; 数据名=new数据类型[数组长度];
其中,数组长度就是能存放的元素个数,显然要大于0的整数.例如:
scores =new int[30]; //长度为30的int类型数组 height =new double[30]; //长度为30的double类型数组 names=new String //长度为30的String类型数组也可以将上面两个步骤合并,即在声明数组的同时给它分配空间,语法如下.
语法:
数据类型[]数组名=new数据类型[数组长度];2.3 数据类型[]数组名 =new 数据类型[数组长度];2.3 数据类型[]数组名=new数据类型[数组长度];2.3
例如:
int scores[]=new 数据类型[30]; //存储30个学员的成绩一旦声明了数组的大小就不能再修改,即数组的长度是固定的.如,上面名称为scores的数组长度是30,假如发现有31个学员成绩需要存储,想把数组长度改为31,则不可以,只能重新声明.
2.3赋值
分配空间后就可以向数组里放数据了.数组中的每一个元素都是通过下标来访问的,
语法:
数组名[下标值]; scores[0] =89; scores[1] =60; scores[2] =70; ...........数组的下标是规律变化的,即从0开始的顺序递增,所以考虑用循环变量表示数组下标,从而利用循环给数组赋值.
Scanner input=new Scanner(System.in); for (int=0; i<30 ;i++){ score[i]=input.nextInt(); //从控制台接受键盘输入进行循环赋值 }2.4运用
最后我们就可以使用这个数组了,运用循环大大简化了代码
简便语法:
数据类型[]数组名=值1,值2,值3,…值n; 数据类型[] 数组名={值1,值2,值3,…值n}; 数据类型[]数组名=值1,值2,值3,…值n;
3.数组应用
3.1数组排序
语法:
Arrays.sort(数组名); Arrays.sort(数组名); Arrays.sort(数组名);
Arrays是java提供的一个类,而sort()是该类的一个方法.套用这个sort()方法在java排序中可以自动排序起来而不再需要用if选择结构去比较大小了,但使用Arrays.sort(数组名);方法时需要导报:
importjava.util.Scanner; import java.util.Scanner; importjava.util.Scanner;
import java.util.Arrays; import java.util.Scanner; public class Yx2 { public static void main(String[] args) { int [] scores=new int[5]; Scanner input=new Scanner(System.in); System.out.println("请输入五位学员的成绩"); for (int i = 0; i < scores.length; i++) { scores [i]=input.nextInt(); } Arrays.sort(scores); System.out.println("学员成绩升序排列"); for (int i = 0; i < scores.length; i++) { System.out.print(scores[i]+" "); } } }在这种数据代码中,成绩数组scores排序,只需要把数组名scores放在sort()方法的括号中,该方法执行后,利用循环输出数组中的成绩,可以看出数组中的成绩已经按升序排序.
3.2求数值的最大值及最小值
在解决这个问题之前,我们首先来设想一场“比武打擂”的场景,首先假定第一个上擂台的是擂住,然后下一个竞争选手与他比武。如果他胜利了,他仍然是擂主,继续跟后面的竞争对手比武。如果他失败了,则他的竞争对手便在擂台上。作为目前的擂主,他会继续与后面的选手比武。以此类推,最后胜利的那个便是本次比武的冠军。那么,类似于比武,求最高分就是找出这次考试的擂主。根据上面的描述,可以用代码表示如下:
...... max =scores [0]; if(a[1] > max) max = scores [2]; if(a[2] > max) max = scores [2]; if(a[3] > max) max = scores [3]; ......最终变量max中存储的就是本次考试的最高分.这样写代码就很繁琐了,我们观察可知,这是一个循环的过程,max变量依次与数组中的元素进行比较.如果,max小于比较的元素,则执行置换操作.如果max较大,则不执行操作.因此,采用循环的方式来写代码就会大大简化代码量,提高程序效率, 如以下示例:
public class Sili { public static void main(String[] args) { int scores[]=new int[5]; Scanner input=new Scanner(System.in); System.out.println("请输入学习成绩"); for (int i= 0; i< scores.length; i++) { scores[i]=input.nextInt(); } int max=0; max=scores[0]; for (int i = 1; i < scores.length; i++) { if(scores[i]>max) { max=scores[i]; } } System.out.println("考试成绩最高分为:"+max); } }其中添加的主要语法为:
max=scores[0]; for (int i = 1; i < scores.length; i++) { if(scores[i]>max) { max=scores[i]; } }3.3如何向数组中插入元素
问题:
假设:有一组学员的成绩是{99,85,82,63,60},将它们按降序排列,保存在一个数组中.现需要增加一个学员的成绩,将它插入数组,并保持成成绩降序排列.
分析:
我们可以先将五个学员的成绩保持在长度为6的整型数组中.然后,要找到新增的插入位置.为了保持数组中的成绩有序,需要从数组的第一个元素开始与新增的成绩进行比较,直到找到要插入的位置,可以使用循环进行比较.找到插入位置后,将该位置后的元素后移一个位置,最后将新增的成绩信息插入该位置即可.
解决方案,如下代码:
public class Fangan{ public static void main(String[] args) { int [] list =new int[6] ; list[0]=99; list[1]=85; list[2]=82; list[3]=63; list[4]=60 ; int index =list.length;//插入的位置 System.out.println("请输入新增成绩:"); Scanner input =new Scanner(System.in); int num=input.nextInt(); for (int i = 0; i < list.length; i++) { if(num>list[i]) { index=i; break; } } for (int j =list.length-1;j>index; j--) { list[j]=list[j-1]; } list[index]=num; System.out.println("插入成绩的下标是:"+index); System.out.println("插入后的成绩信息是"); for (int k = 0; k < list.length; k++) { System.out.print(list[k]+"\t"); } } }从运行结果可以看出,插入成绩80后,成绩依然按降序排列.
在数组中,数组经常与选择结构,循环结构搭配来使用
根据最近的行业调研和招聘数据,AI的发展确实对Java工程师提出了新挑战,但也带来了明确的转型机遇。其现状可概括为:市场分化明显,初级岗位收缩,但“Java+AI”的复合型人才需求正在崛起。
🛠️ 给Java工程师的转型行动建议
转变核心角色定位
- 目标应从“业务代码实现者”转向 “智能系统构建者” 或 “AI与业务的中枢架构师” 。这意味着你的核心价值在于设计能容纳AI能力的系统、确保其稳定高效运行,并深刻理解业务以找到AI的最佳落地场景
构建“Java + AI”双技能栈:
巩固Java深度:深入JVM性能调优、分布式系统设计,这是你区别于纯AI算法工程师的基石。
学习AI应用层技术:不必从零开始研究算法。优先学习如何使用AI工具和框架,例如:
Prompt Engineering(提示词工程):高效驱动大模型的关键技能。
AI应用框架:学习 LangChain4J、Spring AI 等,掌握在Java中集成和调度AI模型的方法。
向量数据库:了解Milvus等,这是构建AI语义搜索、推荐系统的基础。
从“用AI辅助编程”开始实践
- 立即在日常工作中使用GitHub Copilot等工具,亲身体验其如何改变工作流。同时,警惕过度依赖,将节约出的时间用于更高层的设计和优化工作。
选择垂直领域深耕
- 将你的Java经验与某个行业(如金融、医疗、工业物联网)结合,成为既懂行业业务又懂AI落地解决方案的专家,这会形成强大的竞争壁垒。
因此捕获AI,掌握技术是关键,让AI成为我们最便利的工具.
一定要把现有的技术和大模型结合起来,而不是抛弃你们现有技术!掌握AI能力的Java工程师比纯Java岗要吃香的多。
即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地!大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇!
如何学习AGI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享**
一、2025最新大模型学习路线
一个明确的学习路线可以帮助新人了解从哪里开始,按照什么顺序学习,以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。
我们把学习路线分成L1到L4四个阶段,一步步带你从入门到进阶,从理论到实战。
L1级别:AI大模型时代的华丽登场
L1阶段:我们会去了解大模型的基础知识,以及大模型在各个行业的应用和分析;学习理解大模型的核心原理,关键技术,以及大模型应用场景;通过理论原理结合多个项目实战,从提示工程基础到提示工程进阶,掌握Prompt提示工程。
L2级别:AI大模型RAG应用开发工程
L2阶段是我们的AI大模型RAG应用开发工程,我们会去学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。
L3级别:大模型Agent应用架构进阶实践
L3阶段:大模型Agent应用架构进阶实现,我们会去学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造我们自己的Agent智能体;同时还可以学习到包括Coze、Dify在内的可视化工具的使用。
L4级别:大模型微调与私有化部署
L4阶段:大模型的微调和私有化部署,我们会更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调;并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。
整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握;而L3 L4更多的是通过项目实战来掌握大模型的应用开发,针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。
二、大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
三、大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
四、大模型项目实战
学以致用,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
五、大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
2025最新版CSDN大礼包:《AGI大模型学习资源包》免费分享