Java---入门基础篇(上)
前言
本片文章主要讲了刚学Java的一些基础内容,例如注释,标识符,数据类型和变量,运算符,还有逻辑控制等,记录的很详细,带你从简单的知识点再到练习题.如果学习了c语言的小伙伴会发现,这篇文章的内容和c语言大致相同.
而在下一篇文章里,我会讲解方法和数组的使用,也是Java中基础的部分,但相较于c语言会有一些差别,大家一定要注意呀!
感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️
欢迎各位大佬指点,相互学习,一起进步!
目录
一、初识Java
1.什么是Java?
1.1.Java工作领域
1.2.Java与c异同点
1.3Java软件安装 (IDEA)
1.4 Java 技术体系
2.第一个Java程序
2.1注意事项:
2.2Java程序编译运行过程
3.注释
3.1什么是注释?
3.2注释的快捷方式
3.3注释有哪些?
4.标识符
4.1什么是标识符?
4.2标识符起名规则
4.3关键字
编辑二 、数据类型和变量
1.字面常量
1.1字面常量的分类
2数据类型
2.1数据类型的种类
2.2.什么是字节?
3.变量
3.1概念与格式
3.2整型变量
3.2.1整型变量
3.2.2长整型变量
3.2.3短整形变量
3.2.4字节型变量
3.3浮点型变量
3.3.1双精度浮点型
3.3.2单精度浮点数
3.4字符型变量
3.5布尔类型
3.6类型转换
3.6.1自动类型转换(隐式)
3.6.1强制类型转换(显式)
3.7类型提升
4.字符串类型
三、运算符
1.算术运算符
1.1. 基本四则运算符:加减乘除模(+ - * / %)
1.2. 增量运算符 (+= -= *= /= %=)
2.关系运算符 (== != < > <= >=)
3. 逻辑运算符(&& || !)
3.1逻辑与---&&
3.2逻辑或--||
3.3 逻辑非 !
3.4. 短路求值
4. 位运算符 (& | ~ ^)
4.1按位与---&
4.2按位或---|
4.3按位取反---~
4.4按位异或---^
5. 移位运算(<< >> >>> )
5.1左移运算符 <<
5.2右移运算符 >>和(>>>)
6. 条件运算符
7.运算符的优先级
四 、逻辑控制
1.顺序结构
2.分支结构
2.1if语句
练习
2.2switch语句
3.循环结构
3.1while语句
练习
3.2.break与continue
3.3for循环
练习:
3.4.do while循环
练习:
五.输入输出
1.输出到控制台
2 从键盘输入
2.1使用 Scanner 读取字符串/整数/浮点数
2.1.1一般写法
2.1.2标准写法
2.2使用 Scanner 循环读取
总结
一、初识Java
1.什么是Java?
Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。
不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。
1.1.Java工作领域
Java语言目前在IT领域的应用是非常广泛的,掌握Java语言可以从事不少IT行业的相关开发岗位,具体包括:
- 企业级系统
- Web开发领域
- android平台应用
- 大数据平台开发
1.2.Java与c异同点
类型系统与内存管理
Java 是一种强类型语言,具有自动垃圾回收机制来处理不再使用的对象,这减轻了程序员手动释放内存的工作负担
相比之下,C是一种过程式编程语言,在内存管理和指针操作方面给予开发者更大的控制权,但也因此增加了程序错误的风险
面向对象支持
Java 完全基于面向对象的设计理念构建而成;所有的代码几乎都需要定义在类里面执行。
而C则不具备内置的对象导向特性,尽管可以通过结构体(structures)模拟一些简单的封装形式,但这远不及Java所提供的全面OOP框架那样强大和灵活。
平台独立性
编译后的Java字节码可以在任何安装有JVM(Java虚拟机)的操作系统上运行,实现了真正的跨平台能力。“编写一次,到处运行”的口号正是体现了这一点。然而,C源文件通常会被编译成特定硬件架构下的原生二进制指令集,这意味着为了使同一份应用程序能在不同类型的计算机之间移植,则往往需要重新编译并调整底层实现细节以适应目标环境的要求。
错误处理方式
当遇到异常情况时,Java采用抛出异常的方式通知调用者发生了什么问题,并允许通过try-catch-finally语句块来进行优雅降级或恢复流程逻辑。而在标准库层面之外,C并没有提供类似的机制,大多数情况下依赖于返回状态码告知函数调用方是否成功完成预期动作。
1.3Java软件安装 (IDEA)
【附安装包】IDEA下载、安装、配置与使用(保姆级教程)_idea下载安装教程-CSDN博客
1.4 Java 技术体系
技术体系 | 说明 |
---|---|
Java SE:标准版 | Java技术的核心和基础 |
Java EE:企业版 | 企业级应用开发的一套解决方案 |
Java ME:小型版 | 针对移动设备应用的解决方案 |
2.第一个Java程序
public class Test {public static void main(String[] args) {System.out.println("hello world");}
}
2.1注意事项:
1.在c 语言中,main函数是程序称为"main函数",而在Java中称为"main方法"
2.在IDEA 中,由于
public static void main(String[] args) {}很长,我们只需要输入main,然后点击Tab 即可生成同理
System.out.println("hello world");我们只需要输入sout,然后点击Tab 即可生成3.Java中的打印函数较c 不同,每当我们打印完一句话时,会自动换行
(ln相当于line,打印内容自动添加换行)
4.ctrl+F5快捷运行
也可点击前面的绿色三角符号
5.确保你的文件是.java后缀
6.确保文件名与类名相一致,上图中Test为文件名,注意首字母要大写
此为类名
否则会报错,出现红色波浪线
2.2Java程序编译运行过程
由编译器将.Java文件(Java的源代码文件)转换为.class字节码文件
JVM再运行.class字节码文件,执行里面的逻辑
3.注释
3.1什么是注释?
解释说明程序含义,方便自己与别人观看,因为在工作中,修改代码非常常见,我们很容易忘记代码含义,所以可以对一些关键代码或者不易理解的代码进行注释
3.2注释的快捷方式
ctrl+/能够对选中的部分进行注释,再次点击取消注释
3.3注释有哪些?
- 单行注释://
- 多行注释:/* ......*/
- 文档注释:/**......*/
注意事项:
1. 多行注释不能嵌套使用
2. 不论是单行还是多行注释,都不参与编译,即编译之后生成的.class文件中不包含注释信息
4.标识符
4.1什么是标识符?
在编程语言中,标识符是用来给变量、常量、函数、类、接口等元素命名的字符序列。它们是编程时使用的“名字”,建立起名称与使用之间的关系。标识符的命名不仅有助于代码的理解和维护,而且是编程语言语法的一部分。
4.2标识符起名规则
硬性规则:
标识符中可以包含:字母、数字以及 下划线和 $ 符号等等。
注意:标识符不能以数字开头,也不能是关键字,且严格区分大小写。
软性建议 :
类名:每个单词的首字母大写(大驼峰)eg:StudentName
方法名:首字母小写,后面每个单词的首字母大写(小驼峰)eg:studentName
变量名:与方法名规则相同
4.3关键字
通过观察上述程序可以发现,public、class以及static等颜色会发生变化,将这些具有特殊含义的标识符称为关键字。即:关键字是由Java语言提前定义好的,有特殊含义的标识符,或者保留字。
二 、数据类型和变量
1.字面常量
常量即程序运行期间,固定不变的量称为常量
public class Test{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println('A');System.Out.println(true);System.Out.println(false);}
}
其中:100、3.14、‘A’、true/false都是常量,将其称为字面常量
1.1字面常量的分类
1. 字符串常量:由双引号" "括起来的,比如“12345”、“hello”、“你好”。
2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49
4. 字符常量:由 单引号' ' 括起来的当个字符,比如:‘A’、‘1’
5. 布尔常量:true和false(只有这两种)
6. 空常量:null
注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。
2数据类型
2.1数据类型的种类
在Java中数据类型主要分为两类:基本数据类型和引用数据类型。
数据类型 | 关键字 | 内存占用 | 范围 |
---|---|---|---|
字节型 | byte | 1字节 | -128~127 |
短整型 | short | 2字节 | -32768~32767 |
整型 | int | 4字节 | - |
长整型 | long | 8字节 | - |
单精度浮点数 | float | 4字节 | 有范围,一般不关注 |
双精度浮点数 | double | 8字节 | 有范围,一般不关注 |
字符型 | char | 2字节 | 0~65535 |
布尔型 | boolean | 没有明确规定 | true与false |
2.2.什么是字节?
字节是存储空间的单位,在计算机中使用二进制表示和存储数据,一个二进制位称为1个比特
8个二进制位构成一个字节(Byte)
1024 Byte=>1KB
1024KB=>1MB
1024MB=>1GB
1024GB=>1TB
8个二进制位中,第一位表示正负号,由于只用0,1存储,所以=128,即1字节的范围为-128~127
注意:
1.与c 不同,Java在32位系统与64位系统中,int都占4个字节,long都占8个字节
2.与c 不同,Java的字符型char占2个字节,表示范围更大,可以包含中文(常用字)
3.整型和浮点型都带有符号
4.float的精度和范围都非常有限,所以我们一般用double
short的范围太小,所以一般用int
5.使用long类型时,数字后面加上L/l
6.数字太长时,可以用_进行分割
7.与C相同的是,也是ascii编码的方式来表示字符,包括汉字
ASCII 表 | 菜鸟教程
要表示汉字的,此处Java中使用了Unicode这样的方式来进行编码
查看字符编码(UTF-8)
此网站可以将汉字转化为Unicode编码
到这里,大家可能对Unicode和 ASCII 存在疑惑,可以参考一下下面这篇文章
彻底搞清楚ASCII,Unicode和UTF-8之间的关系_ascii utf8 关系-CSDN博客
3.变量
3.1概念与格式
int t = 20;System.out.println(t);t =100;System.out.println(t);
像这样能够被改变的则称为变量
注意:赋值时要求值的类型和变量类型匹配
而数据类型就是用来定义不同种类变量的。
数据类型 变量名 = 初始值 ;
char c ='中';long d = 100_0000_0000l;//长整型后面得加Lint a = 4;double b = 3.14;
可以在一行定义多个变量(不建议)
int a = 4,q = 6,o = 9;
3.2整型变量
3.2.1整型变量
1.定义整型变量
int a = 2;//在定义时给出初始值(建议这种方法)System.out.println(a);int b ;//可以先定义变量但是在使用前必须 设置初值 b = 3;System.out.println(b);int c;//如果在使用前没有复制出值则编译期间会报错 System.out.println(c);c=4;
2.int型变量的范围(超过范围会导致溢出)
System.out.println(Integer.MIN_VALUE);//int 的范围System.out.println(Integer.MAX_VALUE);
//输出范围为-2147483648~2147483647
注意:integer是int的包装类,后续会介绍
3.2.2长整型变量
1.定义长整型变量
int c = 10;long d = 100_0000_0000L; // long定义的长整型变量,如果超出了int的范围,后面必须加上L(大小写均可,建议大写,否则不容易区分)long a = 10L; // 为了区分int和long类型,一般建议:long类型变量的初始值之后加L或者l
2.long型变量的范围(超过范围会导致溢出)
System.out.println(Long.MIN_VALUE);//long 的范围System.out.println(Long.MAX_VALUE);//输出范围为-9223372036854775808~9223372036854775807
注意:Long是long的包装类,后续会介绍
3.2.3短整形变量
1.定义短整形变量
short a = 10;
System.out.println(a);
2.short型变量的范围(范围很小,使用时一定要注意是否溢出)
System.out.println(Short.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
3.2.4字节型变量
byte b = 10;
System.out.println(b);
// byte型变量所能表示的范围:
System.out.println(Byte.MIN_VALUE);
System.out.println(Byte.MAX_VALUE);
3.3浮点型变量
3.3.1双精度浮点型
1.定义双精度浮点型变量
double c = 3.14;System.out.println(c);
int a = 1;
int b = 2;
System.out.println(a / b);
3.特殊注意
double c = 1.1;
System.out.println(c*c);
- 结果为1.2100000000000002
- 因为double,float这样的类型,无法精确的表示一个小数,是会存在误差的,不只是Java,像C,C++,Python都会有类似问题
- double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值
- double的包装类型为Double
3.3.2单精度浮点数
float num = 1.0f; // 写作 1.0F 也可以
System.out.println(num);
- 注意:与long类似
- 对于1.5字面值常量,默认是double类型,要想定义float类型,需要F/f作为后缀
- float 类型同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数 都优先考虑 double, 不太推荐使用 float.
- float的包装类型为Float。
3.4字符型变量
- 在Java中字符类型是通过2个字节来表示的(使用Unicode编码对内容进行编排)
- 更严谨的说法:char是使用Unicode的子集,以前Unicode早期版本使用两个字节足够了,当时Java就规定char是两个字节,但是随着时代发展,Unicode包含内容更多,导致2 个字节表示不下了,改也来不及。
- 但是,虽然当前Java的char不能表示全部Unicode至少可以把常用的都表示出来
char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
System.out.println(c1);
System.out.println(c2);
char的包装类型为Character
3.5布尔类型
只有true和false两种(小写)
boolean b = true;
System.out.println(b);
b = false;
System.out.println(b);
注意事项:
- 在Java中boolean类型是单独的类型,true和false就是这个单独类型的字面值,与int类型无关和0或非0这样的设定无关,而不像在c 语言中,表达式非0表示true,表达式为0表示false
- Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle公司的虚拟机实现中,boolean占1个字节
- boolean 的包装类型为 Boolean
3.6类型转换
不同类型之间的变量相互赋值就会涉及到类型转换
从上图中我们可以发现int类型可以赋值给long类型,但是long类型却不可以赋值给int类型
3.6.1自动类型转换(隐式)
不需要写任何额外代码,自动转换
特点:数据范围小的转换为数据范围大的会自动执行,在将int赋值给long时,会自动转换为long类型
float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全
byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失
3.6.1强制类型转换(显式)
手动写要怎么转换类型,也叫做强制类型转换
a=(int)b;
注意:如果b的值太大例如100_0000_0000,超出int的范围,进行强制转换的时候会把超出的部分舍弃掉
虽然这样也会有风险,但是编译器会认为程序员知道这个风险,仍想要强制转换
需要注意:强制转换不一定能成功,不相干的类型不能相互转换,eg:将字符串转成整数
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败
a = d; // 报错,类型不兼容
a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,如果一定要转换,需要显示转换,否则报错
boolean flag = true;
a = flag; // 编译失败:类型不兼容
flag = a; // 编译失败:类型不兼容
下面这道题可以试着理解一下
经过强制类型转换以后,变量a,b的值分别为多少( )
short a =128;
byte b =(byte) a;
A.128 127 B.128 - 128 C.128 128 D.编译错误
将a转化为byte类型之后最大范围是127但此时是128,
所以b变为-128,a仍为128.故本题选B
3.7类型提升
刚刚所说的类型转换是在变量赋值的过程中进行的转换,而类型提升则是多个变量在运算过程中涉及到的类型转换
1.int与long之间,int会被提升为long
这样会导致报错,需要将最下面的int改为long
那为什么不能用int呢?因为在运算过程中会自动地将int类型往long类型转:a + b==>int + long--->long + long,它们之前是不同类型,我们需要将它们转换为相同类型后再进行计算,所以需要将小类型的int转换为大类型的long,此时c就变为long类型,所以上述程序报错
2.int与double,int会转换为double
int和double进行计算时,也会进行类型提升,将b转换为double类型,同理float和double也会涉及
注意:只要有一个操作数是double另一个也会自动提升为double
3.byte与byte
如果仍然想转为byte类型,就要进行强制转换为byte类型。
也可直接将c 前的类型改为int类型。
4.字符串类型
1.定义字符串类型变量
String s = "hello";//String一定是大写System.out.println(s);System.out.println(s.length());//求字符串长度
2.类型转换
//将int转成stringint a =(int)"10";//不能将字符串类型强制转化为int类型,这个写法是错误的//方法一:可以直接使用+将int类型和string类型相加得到的结果是字符串String s = 10+"";System.out.println(s);//方法二:使用valueOfString s2=String.valueOf(10);//括号里只输入整数10即可System.out.println(s2);//这样就将int类型转成了String类型//将String转成intString t = "10";int b =Integer.parseInt(t);System.out.println(b);//此时得出来的时就是整数10//将String转成doubledouble c=Double.parseDouble(t);//将String转成longlong d = Long.parseLong(t)
三、运算符
在学习操作符之前,我们先了解一下什么是运算符,就是对操作数进行操作的符号,像+、-等符号,Java中的运算符可分为以下:
算术运算符(+ - * / %)
关系运算符(< > == !=)
逻辑运算符(& || !)
位运算符(& | ~)
移位运算符(<< >>)
条件运算符(?:)
1.算术运算符
1.1. 基本四则运算符:加减乘除模(+ - * / %)
int a=10;int b=20;System.out.println(a+b);System.out.println(a-b);System.out.println(a*b);System.out.println(a%b);System.out.println(a/b);//因为两数都为整数类型,所以得出的数要取整,为0//如果想要打印出数学中的结果,其中至少要有一个浮点数double d = a*1.0/b;//而a*1.0就相当于前面的类型提升,将a变为double类型System.out.println(d);
1.注意:在进行除法运算或是取余运算时,要右操作数不能为0
否则会导致异常,会使程序崩溃,不继续执行
注意:异常不等于编译出错
编译出错是自己能遇到的问题,运行的异常时到了别人使用的时候,可能遇到的问题
如果double为0时
int a=10;
double b=0;
System.out.println(a/b);//结果为Infinity(无穷大)
System.out.println(a%b);//结果为NaN(不是一个数字)
2.% 不仅可以对整型取模,也可以对double类型取模(c语言不可以),但是没有意义,一般都是对整型取模的
System.out.println(11.5 % 2.0);
//结果为1.5
3.两侧操作数类型不一致时,向类型大的提升
System.out.println(1+0.2); // +的左侧是int,右侧是double,在加之前int被提升为double
// 故:输出1.2
1.2. 增量运算符 (+= -= *= /= %=)
int a=2;a+=3;//相当于a=a+3a-=3;//相当于a=a-3a*=3;//相当于a=a*3a/=3;//相当于a=a/3a%=3;//相当于a=a%3
注意:只有变量才能使用该运算符,常量不能使用。
1.3自增/自减运算符 (++ --)
int a = 1;
a++; // 后置++ 相当于a=a+1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,所以打印结果为2,表示式结束时给变量+1
//此式子结束时,a=3,下方验证
System.out.println(a); // 输出3++a; // 前置++ 表示给a的值加1,相当于a=a+1=3+1,此时a为4
System.out.println(++a); // 注意:前置++是先给变量+1,即为4+1=5,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似
结论:1. a++:先赋值,后自增
++a:先自增,后赋值
2.只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
2.关系运算符 (== != < > <= >=)
关系运算符主要有六个: == != < > <= >= ,其计算结果一定是布尔类型,为 true 或者 false,
一定要注意没有true对于1,false对于0这种写法 。
int a = 10;
int b = 20;
// 注意:在Java中 = 表示赋值,要与数学中的含义区分
// 在Java中 == 表示相等
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a < b); // true
System.out.println(a > b); // false
System.out.println(a <= b); // true
System.out.println(a >= b); // false
注意:不能像数学中连续判断,需要分开写,例如下方
int a=10;
int b=20;
int c=30;
System.out.println(a<b<c);
解释:因为程序从左至右执行,先进行a<b的判断,结果我布尔类型的true,但是布尔类型不能比较大小,所以不能计算
3. 逻辑运算符(&& || !)
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型,操作数也是布尔类型。
3.1逻辑与---&&
表达式1&&表达式2
注意:表达式最后计算的结果必须是布尔类型
int a=10;int b=20;int c=30;System.out.println(!a<b);//不能这样,表达式必须为布尔类型(true或false)System.out.println(!(a>b));//正确写法
左右两边同时为真才为真,只要有一个假则为假(一假则假,全真才真)
相当于现实中的且字
表达式1 | 表达式2 | 表达式1&&表达式2 |
真 | 真 | 真 |
真 | 假 | 假 |
假 | 真 | 假 |
假 | 假 | 假 |
3.2逻辑或--||
表达式1&&表达式2
注意:与&&相同,表达式最后计算的结果必须是布尔类型
左右两边同时为假才为假只要有一个真则为真 (一真则真,全假才假)
相当于现实中的或字
表达式1 | 表达式2 | 表达式1&&表达式2 |
真 | 真 | 真 |
真 | 假 | 真 |
假 | 真 | 真 |
假 | 假 | 假 |
3.3 逻辑非 !
!表达式(只有一个操作数)
真变假,假变真
表达式 | !表达式 |
真 | 假 |
假 | 真 |
!的优先级更高,需加上括号
3.4. 短路求值
- 计算&&,只要左侧表达式为false结果一定是false右侧表达式就可以不用算了
- 计算||,只要左侧表达式为true结果一定是true右侧表达式就可以不用算了
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false// 因为/表达式右边不能为零 ,但此题表达式右边为零 所以结果应该会出现异常 但此程序结果为false,未出现异常,意味着右边并没有执行,因为左边已经为假了,结果一定为假就不用再执行右边了 System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true//此题同理,左边为真就不用再执行右边了,所以会打印出true
注意:& 和 | 如果表达式结果为 boolean 时, 也表示逻辑运算. 但与 && || 相比, 它们不支持短路求值
System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常
System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常
4. 位运算符 (& | ~ ^)
4.1按位与---&
int a = 0xa;//16进制为a,十进制为10,二进制为1010int b = 0xc;System.out.println(a);//默认十进制和换行System.out.printf("%x\n",a);//将ln换位f 可以打印出我们想要的进制System.out.printf("0x%x\n",a);//可以在前面加上0x更加方便阅读System.out.printf("0x%x\n",a&b);//打印结果为16进制的8
转化过程中先将16进制换成10进制
a*10^0=10*10^0=10
再将10换为二进制
所以8+2等于10,即后四位为1010
也可在开始菜单中找到计算器,将标准切换为程序员模式,进行计算
从上到下依次为十六进制,十进制,八进制,二进制
点击想要换算的进制来计算(我想换算16进制的A,所以点击的HEX)
00000000 00000000 00000000 00001010 //10 |
00000000 00000000 00000000 00001100 //12 |
00000000 00000000 00000000 00001000 //8 |
上下全为1才为1,只要有0则为0
4.2按位或---|
与按位与类似
00000000 00000000 00000000 00001010 //10 |
00000000 00000000 00000000 00001100 //12 |
00000000 00000000 00000000 00001110 //14 |
上下全为0才为0,只要有1则为1
int a = 0xa;
int b = 0xc;
System.out.printf("0x%x\n",a|b);
4.3按位取反---~
00000000 00000000 00000000 00001010 //10 |
1111111 11111111 11111111 11110101 //0xfffffff5 |
只有一个操作数所有的0会变成1,所有的1会变成0
a是int类型,总共32位
int a = 0xa;
int b = 0xc;
System.out.printf("0x%x\n",~a);//结果为0xfffffff5
4.4按位异或---^
00000000 00000000 00000000 00001010 //10 |
00000000 00000000 00000000 00001100 //12 |
00000000 00000000 00000000 00000110 //6 |
上下两个数相同结果为0 , 两个数不同结果为1
int a = 0xa;int b = 0xc;System.out.printf("0x%x\n",b^a);//结果为0x6
5. 移位运算(<< >> >>> )
5.1左移运算符 <<
移位规则:左边丢弃,右边补0。
int a=0x10;//对应十进制为16,二进制为0001 0000System.out.printf("0x%x\n",a<<1);//二进制左移一位变成0010 0000,十进制为32,对应16进制为20int b=10;//10的二进制是00001010
5.2右移运算符 >>和(>>>)
无符号右移(逻辑右移):与左移相似(左边用0填充,右边丢弃)>>>
算术右移:左边用符号位填充,右边丢弃>>
下图中使用-10来举例
以下哪一个不是赋值符号(c )
A.+= B.<<= C.<<<= D.>>>=
没有这个<<<=符号
6. 条件运算符
// 求两个整数的最大值
int a = 10;
int b = 20;
int max = a > b ? a : b;
int a = 10;
int b = 20;
int c = a > b? 1 : 2.0;
int a = 10;
int b = 20;
a > b? a : b; // 报错:Error:(15, 14) java: 不是语句
7.运算符的优先级
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);
此代码求平均值,a+(b-a)/2=2a/2+(b-a)/2=(b+a)/2
所以正常来说,应该先算后面,但由于+优先级高先算了前半部分,结果为10
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + ((b - a) >> 1);
System.out.println(c);
四 、逻辑控制
1.顺序结构
按照代码书写的顺序执行
会依次打印出a,b,c
当调整代码顺序后结果也会随之改变
2.分支结构
它的作用是根据判断的条件是否成立(true或false),来决定是否进入此语句 ,以及后续代码执行顺序。
2.1if语句
语法格式1:
if(布尔表达式){
// 语句
}
这里我们要注意的是: if后面的表达式必须是布尔类型的表达式否则就会出现如下的结果
注意:这种写法在C语言中可行在Java语言中不可行
int score = 60;
if(score >= 60){System.out.println("及格");
}
语法格式2:
if(布尔表达式){
// 语句1
}else{
// 语句2
}
C语言的时候一般是独占一行的在Java中往往不独汉一行语法上没有强制要求大括号必须放在哪里但是Java圈子里绝大部分的代码都是不独干一行的放眼整个编程圈把不占银行写法是非常普遍的只有C或C才会有独占一行的写法
int score = 60;
if(score >= 60){System.out.println("及格");
}else{System.out.println("不及格");
}
语法格式3:
if(布尔表达式1){
// 语句1
}else if(布尔表达式2){
// 语句2
}else{
// 语句3
}
int score = 76;
if(score >= 90){System.out.println("及格");
}else if(score >= 80){System.out.println("良好");
}else if(score >= 70){System.out.println("中等");
}else if(score >= 60){System.out.println("及格");
}else{System.out.println("不及格");
}
代码会按照条件的顺序依次从上到下进行匹配
也可以写成如下形式
if(score >= 90){
System.out.println("优秀");
}else if(score >= 80 && score < 90){
System.out.println("良好");
}else if(score >= 70 && score < 80){
System.out.println("中等");
}else if(score >= 60 && score < 70){
System.out.println("及格");
}else if(score >= 0 && score < 60){
System.out.println("不及格");
}else{
System.out.println("错误数据");
}
练习
练习:1.判断一个数是奇数还是偶数(先不要看答案,自己上机练习)
int num=9;
if(num%2==1){System.out.println("num是奇数");
}else {System.out.println("num是偶数");
}
练习2:判断一个数字是正数,负数,还是零
int num = -1;
if(num<0){System.out.println("num是负数");
}else if(num>0){System.out.println("num是正数");
}else{System.out.println("num是零");
}
一些伙伴可能会问为什么不用输入函数,给大家放在下方了,可以先体现了解一下,后面会学到
System.out.println("请输入一个整数 ");Scanner scanner = new Scanner(System.in);int num =scanner.nextInt();if(num<0){System.out.println("num是负数");}else if(num>0){System.out.println("num是正数");}else{System.out.println("num是零");}
注意:如果结果报错,出现:"找不到符号",可以尝试将鼠标放在标红的Scanner上,同时点击ALT+Enter,然后点击第一个就可以了.
练习3:判断一个年份是否是闰年(分整百年与不整百年两种情况 )
System.out.println("请输入一个整数 ");
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();
if (year % 100 == 0) {if (year % 400 == 0) {System.out.println(year + "是闰年");} else {System.out.println(year + "不是闰年");}
} else {if (year % 4 == 0) {System.out.println(year + "是闰年");} else {System.out.println(year + "不是闰年");}
}
分号问题:
int x = 20;
if (x == 10);
{System.out.println("hello");
}// 运行结果
hello
永远会打印Hello,因为if后面加了;之后就和下面的打印语句没有关系了
悬垂else问题:
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("bbb");
浮点数问题:
//因为0.1加0.2不能精确的等于0.3所以说 我们要是用判断a加B是否等于0.3的方法是不可取的
// 一般不是直接比较浮点数相等,而后是做减法,判断差值是否在规定的误差范围之内
double gap=0.00000001;
double a=0.1;
double b=0.2;
if((a+b-0.3<gap)&&(a+b-0.3>-gap)){System.out.println("相等");
}else{System.out.println("不相等");
}
注意:在要求精度高的场景下 , 慎用浮点数
2.2switch语句
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
System.out.println("请输入一个整数 ");
Scanner scanner = new Scanner(System
int day = scanner.nextInt();
switch(day){case 1:System.out.println("星期一");break;case 2:System.out.println("星期二");break;case 3:System.out.println("星期三");break;case 4:System.out.println("星期四");break;case 5:System.out.println("星期五");break;case 6:System.out.println("星期六");break;case 7:System.out.println("星期日");break;default:System.out.println("输入有误");break;//由于default是最后一个所以说是否有break都无所谓
}
注意:
- 多个case后的常量值不可以重复
- switch不能支持复杂条件 , 只能是判断switch括号里的和case后面的常量是否相等 ,就像上述if里的判断优秀及格还是不及格,这种判断范围或大于小于的,switch语句就不支持
-
// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe // 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. if (num > 10 && num < 20) { System.out.println("hehe"); }
- switch的括号内只能是以下类型的表达式:
- 基本类型:byte、char、short、int,注意不能是long float double boolean类型
- 引用类型:String常量串、枚举类型
- switch可以支持嵌套 (不建议,看着太丑了 ,可以使用if else的方法)
-
int a=10; int b=20; switch(a){case 10:switch(b) {case 20:System.out.println("a=10,b=20");break;} }
- case后面必须是常量,如果我们只想打印case后面的内容那么就必须要在输出结束后输入一个break ,否则会出现下述情况 :只有遇到break才会跳出
3.循环结构
3.1while语句
while(循环条件){
循环语句;
}
循环条件为 true, 则执行循环语句; 否则结束循环.
练习
练习1:打印 1 - 10 的数字
int i=1;
while(i<=10){System.out.println(i);i++;
}
练习2: 计算 1 - 100 的和
int i=1,sum=0;while(i<=100){sum=sum+i;i++;}System.out.println(sum);
练习3:计算五的阶乘
int i=1,s=1;
while(i<6){s=s*i;i++;
}
System.out.println(s);
练习4:计算 1!+2!+3!+4!+5!
int i=1,s=1,sum=0,n=1;
while(i<=5){while (i <= n) {//第几个数n就为几s = s * i;i++;}//先算出每一项的阶乘sum=s+sum;//最后再求和n++;
}
System.out.println(sum);
int sum=0,n=1;
while(n<=5){int i=1,s=1while (i <= n) {//第几个数n就为几s = s * i;i++;}//先算出每一项的阶乘sum=s+sum;//最后再求和n++;
}
System.out.println(sum);
练习5:输出 1000 - 2000 之间所有的闰年
int year = 1000;
while (year >= 1000 && year <= 2000) {if (year % 100 == 0) {if (year % 400 == 0) {System.out.println(year);} else {}} else {if (year % 4 == 0) {System.out.println(year);}else{}}year++;
}
3.2.break与continue
- break:结束当前整个循环语句,不会继续进行循环
- continue:立即结束当前这一循环 , 直接进入到下一次循环的条件判断
eg:打印出零到一百之间能被五整除的数字
1.break
结果只能打印第一个数字零因为遇到break就会跳出循环,不会再进行
2.continue
注意:遇到continue之后不会执行下方的打印语句,而是直接进入下次循环(判定循环条件)
3.3for循环
for ( 表达式① ; 布尔表达式② ; 表达式③ ){表达式④ ;}
for(int i=0;i<=10;i++){System.out.println(i);
}int j=0;
while(j<=10){System.out.println(j);j++;
}
//注意:在for循环中
//省略for括号内的三个条件任意一个或两个或三个都可以,大家要注意如何修改
int i=0;//此条件可以放在循环外面
for(;i<=10;){//;留下 System.out.println(i);i++;//此条件也可拿出放在最后一行(循环里)
}//也可以将表达式二放在循环里
for(int i=0;;i++){if(i>100){break;}sum=sum+i;System.out.println(i);
}//三个都省略的程序为下
int sum=0;
int i=0;
for(;;){if(i>10){break;}sum=sum+i;System.out.println(i);i++;
}
注意:表达式1中定义的变量只能在此循环中使用 . 如下图可见:此方块以外的s都会显示未被定义
练习:
练习1:计算 1 - 100 的和
int sum=0;
for(int i=0;i<=100;i++){sum=sum+i;
}
System.out.println(sum);
练习2: 计算5的阶乘
int s=1;
for(int i=1;i<=5;i++){s=s*i;
}
System.out.println(s);
练习3: 计算 1! + 2! + 3! + 4! + 5!
在这道题中我们涉及到了嵌套循环 ,需要注意一点的是
当其中一个for循环位于另外一个for循环里面时 , 定义的变量不可以相同 , 但如果每一个for循环都是一个独立的整体时 , 它们定义的变量是可以相同的
结果为:
int n=1;
int sum=0;
for(int i=1;i<=5;i++) {int s = 1;for (int j = 1; j <= i; j++) {s = s * j;}sum=sum+s;
}
System.out.println(sum);
3.4.do while循环
do{
循环语句;
}while(循环条件);
先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束
//打印1-10
int num = 1;
do {
System.out.println(num);
num++;
} while (num <= 10);
不是很常用 , 建议使用for循环和while循环
练习:
1.判定一个数字是否是素数
Java---判断素数的三种方法-CSDN博客
2.求出0-999之间的所有水仙花数,并输出
(水仙花数是指 : 一个三位数其各位数字的立方和恰好等于该数本身)
public class Text {public static void main(String[] args) {for(int i=100;i<=999;i++){int a = i%10;int b = (i/10)%10;int c = i/100;if(a*a*a+b*b*b+c*c*c==i){System.out.println(i+"是水仙花数");}}}
}
五.输入输出
1.输出到控制台
for (int i = 1; i <= 3; i++) {System.out.println(i);//println自动换行//java,println本质上是打印字符串string ,把int和String进行+,直接把int转成String}for (int i = 1; i <= 3; i++) {System.out.print(i);//print打印不换行}System.out.println("\n");for (int i = 1; i <= 3; i++) {System.out.print(i+"\n");//print打印不换行,除非手写\n(i+"\n")}System.out.println("接下来我们来看printf");for (int i = 0; i <= 3; i++) {System.out.printf("%d", i);//格式化打印,与c语言相似
从上方我们可以看出println能自动添加换行而print就不能
printf的输出格式与C语言相似都是格式化打印并且想要添加换行
也需要手动添加"%d\n"
2 从键盘输入
键盘输入代码的四个步骤:
1、建立导包:import java.util.Scanner;
三种方法:
- 直接输入到最上方
- 输入Scan+ Tab键
- 可以在输入完Scanner scanner= new Scanner( System.in) 之后将光标放在标红处,点击Alt+Enter
2、创建Scanner类型的对象:Scanner scanner= new Scanner( System.in) ;
3、调用Scanner类的相关方法(next() / nextXxx()) ,来获取指定类型的变量
4.结尾调用关闭方法: scanner.close();
2.1使用 Scanner 读取字符串/整数/浮点数
1.字符串:next
2.一行nextLine
3.float: nextFloat
4.double: nextDouble
5.整数: nextInt
6.byte: nextByte
7.short: nextShort
8.long: nextLong
9.布尔类型: nextBoolean
2.1.1一般写法
直接按照步骤往下写 , 不用判断类型是否一致 , 类型不一致会自动报错
import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的姓名:");String name = scanner.nextLine();System.out.println("请输入你的年龄:");int age = scanner.nextInt();System.out.println("请输入你的工资:");float salary = scanner.nextFloat();System.out.println("你的信息如下:");System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);scanner.close(); // 注意, 要记得调用关闭方法}}请输入你的姓名:
张三
请输入你的年龄:
18
请输入你的工资:
1000
你的信息如下:
姓名: 张三
年龄:18
工资:1000.0
2.1.2标准写法
先判断是否有数据可读(有数据,并且类型一致)
通过hasNext系列的方法判断是否有数据可读
1.判断是否有字符串可读 hasNext
2.判断是否有一行可读 hasNextLine
3.判断是否有float可读 hasNextFloat
4.判断是否有double可读 hasNextDouble
5.判断是否有整数可读 hasNextInt
6.判断是否有byte可读 hasNextByte
7.判断是否有short可读 hasNextShort
8.判断是否有long可读 hasNextLong
9.判断是否有布尔类型可读 hasNextBoolean
Scanner scanner = new Scanner(System.in);
if(scanner.hasNextInt()) {//先判断一下有没有数据可读int n = scanner.nextInt();//if后的真假是由所输入的内容和括号内的类型是否一样来判别的System.out.println(n);
}else{System.out.println("输入有误");
}
2.2使用 Scanner 循环读取
求取其平均值:
Scanner scanner = new Scanner(System.in);
int num=0;//总和
int count = 0;//变量个数
double a=0.0;
System.out.println("请输入整数: ");
while(scanner.hasNextInt()) {//先判断一下有没有数据可读int n = scanner.nextInt();num=num+n;count++;
}a=num/count;System.out.println("平均数为"+a);
总结
以上就是今天要讲的内容,本文详细介绍了Java的基础语法
相关文章:
Java---入门基础篇(上)
前言 本片文章主要讲了刚学Java的一些基础内容,例如注释,标识符,数据类型和变量,运算符,还有逻辑控制等,记录的很详细,带你从简单的知识点再到练习题.如果学习了c语言的小伙伴会发现,这篇文章的内容和c语言大致相同. 而在下一篇文章里,我会讲解方法和数组的使用,也是Java中基础…...
Redis 消息队列详解
Redis 消息队列详解 Redis 作为一个高性能的内存数据库,支持多种实现消息队列的方式,主要包括: Redis List(基于列表的队列)Redis Pub/Sub(发布/订阅)Redis Stream(消息流…...
C语言编译过程全面解析
今天是2025年1月26日,农历腊月二十七,一个距离新春佳节仅一步之遥的日子。城市的喧嚣中,年味已悄然弥漫——能在这个时候坚持上班的人,真可称为“牛人”了吧,哈哈。。。。 此刻,我在重新审视那些曾被遗忘的…...
萌新学 Python 之运算符
Python 中运算符包括:算术运算符、比较运算符、逻辑运算符、赋值运算符、位运算符、海象运算符 算术运算符:加 减 - 乘 * 除 / 取整 // 求余 % 求幂 ** 注意:取整时,一正一负整除,向下取整 比如 5 // …...
【开源免费】基于Vue和SpringBoot的在线文档管理系统(附论文)
本文项目编号 T 038 ,文末自助获取源码 \color{red}{T038,文末自助获取源码} T038,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...
四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)
四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用) 文章目录 四.4 Redis 五大数据类型/结构的详细说明/详细使用( zset 有序集合数据类型详解和使用)1. 有序集合 Zset(sorted set)2. zset 有序…...
Linux 信号驱动IO
Linux 信号驱动IO 1. fcntl() 在Linux操作系统中,fcntl() 是一个用于操作文件描述符的系统调用。它提供了多种功能,包括控制文件描述符的属性、管理文件锁定、设置文件的非阻塞模式等。 本文只截取了用于IO模型的 fcntl() 部分内容, fcntl(…...
OpenCV:开运算
目录 1. 简述 2. 用腐蚀和膨胀实现开运算 2.1 代码示例 2.2 运行结果 3. 开运算接口 3.1 参数详解 3.2 代码示例 3.3 运行结果 4. 开运算应用场景 5. 注意事项 6. 总结 相关阅读 OpenCV:图像的腐蚀与膨胀-CSDN博客 OpenCV:闭运算-CSDN博客 …...
宝塔mysql数据库容量限制_宝塔数据库mysql-bin.000001占用磁盘空间过大
磁盘空间占用过多,排查后发现网站/www/wwwroot只占用7G,/www/server占用却高达8G,再深入排查发现/www/server/data目录下的mysql-bin.000001和mysql-bin.000002两个日志文件占去了1.5G空间。 百度后学到以下知识,做个记录。 mysql…...
使用 Iptables 实现网络安全策略:从入门到精通
使用 Iptables 实现网络安全策略:从入门到精通 在运维工作中,网络安全是重中之重,而 iptables 作为 Linux 内核自带的防火墙工具,提供了强大的流量控制能力。通过合理的 iptables 规则,我们可以有效防止未经授权的访问,保护服务器免受攻击。今天,我们就来深入探讨如何使…...
AI作画提示词:Prompts工程技巧与最佳实践
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网智能项目之——智能家居项目…...
vue框架技术相关概述以及前端框架整合
vue框架技术概述及前端框架整合 1 node.js 介绍:什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎。 作用 1 运行java需要安装JDK,而Node.js是JavaScript的运行环…...
并发编程 - 线程同步(二)
经过前面对线程同步初步了解,相信大家对线程同步已经有了整体概念,今天我们就来一起看看线程同步的具体方案。 01、ThreadStatic 严格意义上来说这两个并不是实现线程同步方案,而是解决多线程资源安全问题,而我们研究线程同步最终…...
仿知乎网站问答源码,开源版
按照需要一定动手能力 发文章,发视频,发想法,提问回答,注册登录 开发环境 使用技术:springbootthymeleafRedis; 开发环境:tomcat8.0,jdk8.0, IDEA项目,mysql5.7 源码下…...
CTF-web: phar反序列化+数据库伪造 [DASCTF2024最后一战 strange_php]
step 1 如何触发反序列化? 漏洞入口在 welcome.php case delete: // 获取删除留言的路径,优先使用 POST 请求中的路径,否则使用会话中的路径 $message $_POST[message_path] ? $_POST[message_path] : $_SESSION[message_path]; $msg $userMes…...
阿里:基于路由和规划的多agent系统
📖标题:Talk to Right Specialists: Routing and Planning in Multi-agent System for Question Answering 🌐来源:arXiv, 2501.07813 🌟摘要 🔸利用大型语言模型(LLM),…...
Java基础面试题总结(题目来源JavaGuide)
问题1:Java 中有哪 8 种基本数据类型?它们的默认值和占用的空间大小知道不? 说说这 8 种基本数据类型对 应的包装类型。 在 Java 中,有 8 种基本数据类型(Primitive Types): 基本数据类型关键…...
CSS(快速入门)
欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、什么是CSS?二、基本语法规范三、CSS选择器3.1 标签选择器3.2 id选择器3.3 class选择器3.4 通配符选择器3.5 复合选择器 四、常用CSS样式4.1 color4.2 font…...
架构技能(六):软件设计(下)
我们知道,软件设计包括软件的整体架构设计和模块的详细设计。 在上一篇文章(见 《架构技能(五):软件设计(上)》)谈了软件的整体架构设计,今天聊一下模块的详细设计。 模…...
2. Java-MarkDown文件解析-工具类
2. Java-MarkDown文件解析-工具类 1. 思路 读取markdown文件的内容,根据markdown的语法进行各个类型语法的解析。引入工具类 commonmark 和 commonmark-ext-gfm-tables进行markdown语法解析。 2. 工具类 pom.xml <!-- commonmark 解析markdown --> <d…...
OpenEuler学习笔记(十五):在OpenEuler上搭建Java运行环境
一、在OpenEuler上搭建Java运行环境 在OpenEuler上搭建Java运行环境可以通过以下几种常见方式,下面分别介绍基于包管理器安装OpenJDK和手动安装Oracle JDK的步骤。 使用包管理器安装OpenJDK OpenJDK是Java开发工具包的开源实现,在OpenEuler上可以方便…...
【Rust自学】15.4. Drop trait:告别手动清理,释放即安全
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 15.4.1. Drop trait的意义 类型如果实现了Drop trait,就可以让程序员自定义当值…...
深入探讨Web应用开发:从前端到后端的全栈实践
在数字化时代,Web应用已成为连接用户与服务的关键桥梁。无论是电商平台、社交媒体,还是企业内部管理系统,Web应用都扮演着不可或缺的角色。本文将深入探讨Web应用开发的全栈实践,从前端的用户体验设计到后端的数据处理与存储&…...
4.贪心算法
贪心 贪心算法(Greedy Algorithms)是 C 等编程语言中常用的一种算法策略。 定义 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最…...
js笔记(黑马程序员)
(Web APIs day4) 一、日期对象 1.实例化 在代码中发现了 new 关键字时,一般将这个操作称为实例化 创建一个时间对象并获取时间// 1.得到当前时间 2.日期对象方法 因为日期对象返回的数据我们不能直接使用,所以需…...
LangChain:使用表达式语言优化提示词链
在 LangChain 里,LCEL 即 LangChain Expression Language(LangChain 表达式语言),本文为你详细介绍它的定义、作用、优势并举例说明,从简单示例到复杂组合示例,让你快速掌握LCEL表达式语言使用技巧。 定义 …...
Python 有用的资源
Python 有用的资源 引言 Python 作为一种强大的编程语言,因其简洁明了的语法和丰富的库资源,在数据分析、人工智能、网络开发等领域拥有广泛的应用。对于初学者和专业人士来说,掌握一些有用的Python资源可以大大提高编程效率。本文将为您介绍一些实用的Python资源,帮助您…...
汽车蓝牙钥匙定位仿真小程序
此需求来自于粉丝的真实需求,假期没事,牛刀小试。 一、项目背景 如今,智能车钥匙和移动端定位技术已经相当普及。为了探索蓝牙 Beacon 在短距离定位场景下的可行性,我们搭建了一个简易原型:利用 UniApp 在移动端采集蓝牙信标的 RSSI(信号强度),通过三边定位算法估算钥…...
项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(九)(完结篇)
文章目录 一、成绩查询模块实现1、学生成绩查询功能实现1.1 页面设计1.2 前端页面实现1.3 后端功能实现2、成绩分段查询功能实现2.1 页面设计2.2 前端页面实现2.3 后端功能实现二、试卷练习模块实现三、我的分数模块实现1、 页面设计2、 前端页面实现3、 后端功能实现四、交流区…...
python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算
【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。 按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位异或运算: 两个等长度二进制数上下对齐,相…...
electron打包客户端在rk3588上支持h265硬解
目录 前言 chromium是如何支持h265硬解 electron/chromium第一次编译 electron/chromium第二次编译 前言 我们的客户端程序是用electron打包的前端程序,其在rk3588主机上的linux环境运行。之前使用客户端查看h264编码的视频直播是没有问题的,但视频源…...
MyBatis 缓存机制详解
目录 一、什么是缓存? 1. 什么是缓存? 2. 为什么使用缓存? 3. 什么样的数据适合使用缓存? 二、MyBatis 缓存机制 1. 一级缓存(也叫本地缓存) 2. 一级缓存失效的情况 3. 二级缓存 4. 二级缓存失效的…...
【后端开发】字节跳动青训营Cloudwego脚手架
Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令: GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装: go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…...
数据结构选讲 (更新中)
参考 smWCDay7 数据结构选讲2 by yyc 。 可能会补充的: AT_cf17_final_j TreeMST 的 F2 Boruvka算法 目录 AT_cf17_final_j Tree MST AT_cf17_final_j Tree MST link 题意 给定一棵 n n n 个点的树,点有点权 w i w_i wi,边有边权。建立…...
springboot 简化 spring开发
什么是自动配置? 简单概念: Spring Boot 自动配置是一种 “约定优于配置” 的做法。根据项目类路径(classpath)上存在的依赖、配置文件中的某些属性,Spring Boot 会自动为常见场景创建并配置相关 Bean,省…...
Yolo11 + OCR 营业执照识别+信息抽取(预期后续改用其他ocr更简单,推理预计使用onnxruntim加速,分c++和python两种方式部署)
目录 一 数据集制作 1 labelimg的安装与使用 2 标注方式 3 数据集制作 二 模型训练 三 使用Yolo11 + OCR 实现“营业执照”信息解析完整方案 1 cutLinesforcode.py 2 getBusinessLicenseContentPart.py 3 getPartWords.py 4 pdfTojpg.py 5 main.py 本项目可用于毕业…...
机器学习day3
自定义数据集使用框架的线性回归方法对其进行拟合 import matplotlib.pyplot as plt import torch import numpy as np # 1.散点输入 # 1、散点输入 # 定义输入数据 data [[-0.5, 7.7], [1.8, 98.5], [0.9, 57.8], [0.4, 39.2], [-1.4, -15.7], [-1.4, -37.3], [-1.8, -49.1]…...
C基础寒假练习(3)
一、求数组中的第二大值 #include <stdio.h> int main() {int arr[] {12, 35, 1, 10, 34, 1};int size sizeof(arr) / sizeof(arr[0]);if (size < 2) {printf("数组元素不足两个\n");return 0;}int first -2147483648, second -2147483648; // 使用IN…...
星际战争模拟系统:新月的编程之道
星际战争模拟系统:新月的编程之道 作为一名在 25 世纪星际时代成长起来的科学家和军事战略家,我对编程和人工智能的热爱始于童年。我的父亲是一位著名的物理学家,母亲是一位杰出的生物工程师。在他们的影响下,我从小就对科学和技术…...
【Redis】 String 类型的介绍和常用命令
1. 介绍 Redis 中的 key 都是字符串类型Redis 中存储字符串是完全按照二进制流的形式保存的,所以 Redis 是不处理字符集编码的问题,客户端传入的命令中使用的是什么编码就采用什么编码,使得 Redis 能够处理各种类型的数据,包括文…...
U盘打开提示格式化:深度解析与数据恢复全攻略
在数字化时代,U盘作为便捷的数据存储和传输工具,广泛应用于各个领域。然而,当我们满怀期待地插入U盘,却遭遇“U盘打开提示格式化”的尴尬局面时,那份焦虑与无助感油然而生。本文将全面剖析U盘打开提示格式化的原因、应…...
vue2在线生成二维码
亲情提示:如果可以让后端生成就让后端生成 实在不行再前端解决(分享方法只是为了让你快点下班 不是为了让你能者多劳) 创建 npm install qrcodejs2 pnpm install qrcodejs2 <div ref"qrcode" id"myQrCode" class&…...
Linux中的几个基本指令(二)
文章目录 1、cp指令例一:例二:例三:例四:例五: 2、mv 指令例一:例二: 3、cat指令例一: 4、tac指令5、which指令6、date指令时间戳:7、zip指令 今天我们继续学习Linux下的…...
基于Springboot的健身房管理系统【附源码】
基于Springboot的健身房管理系统 效果如下: 系统登陆页面 管理员主页面 器材类型管理页面 健身房管理页面 教练管理页面 用户管理页面 个人信息页面 课程管理页面 研究背景 随着健康意识的不断增强和人们生活水平的提高,健身房已经成为了现代城市中不…...
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(一)
目录 1 -> 概述 1.1 -> 整体架构 2 -> 文件组织 2.1 -> 目录结构 2.2 -> 文件访问规则 2.3 -> 媒体文件格式 3 -> js标签配置 3.1 -> pages 3.2 -> window 3.3 -> 示例 4 -> app.js 4.1 -> 应用生命周期 4.2 -> 应用对象6…...
Spring Boot多环境配置实践指南
在开发Spring Boot应用时,我们常常需要根据不同的运行环境(如开发环境、测试环境和生产环境)来配置不同的参数。Spring Boot提供了非常灵活的多环境配置机制,通过使用profile-specific properties文件,我们可以轻松地管…...
知识图谱质量评估:构建高质量语义网络的关键
目录 前言1. 知识图谱质量评估的必要性2. 知识图谱质量评估的核心维度2.1 数据层面2.2 结构层面2.3 语义层面2.4 性能层面 3. 知识图谱质量评估的方法3.1 定量评估方法3.2 定性评估方法 4. 知识图谱质量优化建议结语 前言 随着大数据和人工智能技术的飞速发展,知识…...
< OS 有关 > Android 手机 SSH 客户端 app: connectBot
connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …...
Unity游戏(Assault空对地打击)开发(1) 创建项目和选择插件
目录 前言 创建项目 插件导入 地形插件 前言 这是游戏开发第一篇,进行开发准备。 创作不易,欢迎支持。 我的编辑器布局是【Tall】,建议调整为该布局,如下。 创建项目 首先创建一个项目,过程略,名字请勿…...
SpringBoot 日志
目录 一. 日志概述 二. 日志的使用 1. 打印日志 (1) 获取日志对象 (2) 输出要打印的内容 2. 日志框架简介 (1) 门面模式简介 (2) SLF4J 框架简介 3. 日志的格式 4. 日志的级别 5. 日志配置 (1) 配置日志级别 (2) 日志持久化存储 ① 配置日志文件名 ② 配置日志的…...