Java 语言中有一些具有特殊用途的词被称为关键字。关键字对 Java 的编译器有着特殊的意义,在程序中应用时一定要慎重哦!!
Java 中常用关键字:

byte,int,short,long,float,double,char,boolean,true,false,null
if,else,switch,case,default,do,while,for,break,continue,return
try,catch,finally,throw,throws
class,interface,extends,implements,new,abstract,final,static,synchronized,
native,strictfp,transient,volatile,instaceof
public,protected,private
package,import
super,this,void
Java 语言是一种强类型语言。通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型。 Java 中有两类数据类型:

简单的说,我们可以把变量看作是个盒子,可以将钥匙、手机、饮料等物品存放在这个盒子中,也可以在需要的时候换成我们想存放的新物品。
所谓常量,我们可以理解为是一种特殊的变量,它的值被设定后,在程序运行过程中不允许改变。常量是在程序运行中不能变化的的量,语法如下
final 类型 常量标识符=初始赋值
变量在计算机内部对应一个存储单元,变量可根据需要存入不同的数据。语法如下:
类型 变量标识符[=初始赋值]
以下变量的命名都是符合规范的:
String myname="tom";
String _love="you";
Stirng $hobby2="LoL"
1、java变量名不能以数字开头
2、不能以下划线和美元符号之外的其他特殊符号开头
3、不能使用java关键字
例如:120
以0开头,例如:0170
以0x或者0X开头,例如:0X78
注意事项
- 两个整型相加,结果默认转化为int,赋值给byte或short时会发生类型转化问题。
- 在选用整数类型,一定要注意数的范围,否则可能由于数的类型选择不当而造成溢出。
- 对于long类型整数常量,书写是应在数字后加上“l”或“L”,否则默认是int类型.
- 若表示范围超出了long型,要用java.math.BingInteger类表示。
浮点型数据包括浮点型常量和浮点型变量
浮点型数据在机器中有两种表示方式:十进制和科学计算法(符号位+尾数+基数(E或e)).例如:浮点数123.45,十进制123.45,科学计算法表示为1.2345E2或1.2345e2。
浮点类型变量分为两种:float型和double型,其数据特点如下表示:
| 数据类型 | 所占位数 | 数的取值范围 |
|---|---|---|
| float | 32 | -2127 ~2127 |
| double | 64 | -21023 ~21023 |
注意事项
- 当使用浮点型常量给浮点型变量赋值时,float型常量后一定要加上f或F。
- float和double只能用来做科学计算或者工程计算,在商业计算等精确计算中,我们要用java.math.BigDecimal.
布尔类型常量只有两个值true(真)和false(假),默认值为false。
布尔类型变量类型为boolean。变量的定义如下:boolean 变量名。
boolean b = true
Java 使用Unicoe字符集,这种字符集每个字符用2个字节即16位表示。字符型数据也有字符型常量和字符型变量。
字符型常量的表示:
注意事项
- 字符型变量只有一种:char类型,它在机器中占16位,其范围为0~65525.
- 使用是要主要:字符型变量实际上是一个数字,因此他可以赋值给一个数字型变量,例如:float f = 'a';int i = 'a'。
不同的类型数据间的优先关系如下
低-------------------------------------->高
byte--> short --> int --> long --->float -->double char
自动转换是指编译系统可自动将低优先级数据类型转换为高优先级数据类型。各种数据类型的转换规则如下表:
| 数据类型 | 可以自动转换得到的数据类型 |
|---|---|
| byte | short |
| byte、short、char | int |
| byte、short、char、int | long |
| byte、short、char、int、long | float |
| byte、short、char、int、long、float | double |
当然自动类型转换是需要满足特定的条件的:
1、 目标类型能与源类型兼容,如 double 型兼容 int 型,但是 char 型不能兼容 int 型
int age =19;
char sex = "女";
char result = age + sex;
//int类型不能自动转换成char类型
2、目标类型大于源类型,如 double 类型长度为 8 字节, int 类型为 4 字节,因此 double 类型的变量里直接可以存放 int 类型的数据,但反过来就不可以了
double avg1 = 75.5;
int avg2=avg1;
//uble类型不能自动转换为int类型
高优先级数据要转换成低优先级数据,需要用到强制类型转换,其转换格式如下:
(类型名) (数据或表达式)
例如
int x
short a=(short)x
/*把int型变量x强制转换为short型*/
数组是相同类型的数据按照顺序组成的一种复合数据类型,通过数组名加数组下标来使用数组中的数据。下标从0开始。
数组元素的数据类型可以是Java的任何数据类型,例如:基本类型(int、float、double、char等),类(Class)或接口(interace)等。
声明数组就是要确定数组名、维数和元素的数据类型。
类型标识符 数组名[]
类型标识符[] 数组名
例如: int abc[]; int[] abc;
类型标识符 数组名[][]
类型标识符[][] 数组名;
例如:double a[][];double[][] a;
数据名=new 数组标识符[大小]
数据名=new 数组标识符[大小][大小]
例如:double a[][];a=new double[10][10]
数组的声明和创建也可以合为一步,如下所示:
类型标识符 数组名[]=new 类型标识符[大小]
类型标识符[][]=new 类型标识符[大小][大小];
例如:double a[][]=new double[10][10]
数组的初始化有两种方式:
静态初始化:直接在生命的时候使用初始化表给数据的全部或部分元素赋初值
例如:int[] a={3,4,5,6};float b[5]={1.0,2.0}
动态初始化:使用赋值表达式给数组的各个元素赋值。
例如:int a[] = new int[2]
a[0]=1;
a[1]=2
每个数组包含一个成员变量length,它是在初始化是设定的数组大小。我们可以在数组名后加.length来访问该变量。
例如: int a[5]=new int[5];a.length的值为5
public class HelloWorld {
public static void main(String ards[]) {
int a[]= {101,99,102,98,103,100};
int max=a[0],min=a[0];
for(int i=1;i<a.length;i++) {
if(a[i]> max)
max=a[i];
if (a[i]<min)
min=a[i];
}
System.out.println("数组a各元素为:");
for(int i=0;i<a.length;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("最大值为:"+max);
System.out.println("最小值为:"+min);
}
}
在Java中,通过System.in和System.out对象分别与键盘和显示器发生联系而完成程序信息的输入和输出。
System.out对象中包括的最常用的方法是:
print()输出一项数据但不换行。
println()输出一项数据后换行。
如果要用一个语句输出多个数据项,则数据项之间要用“+”连接.
例如:
int a = 20;
System.out.print(a+"abc")
JAVA使用Scanner类创建一个对象:
Scanner reader =new Scanner(System.in);
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型。
nextByte(),nextShort(),nextInt(),nextlong(),nextFloat(),nextDouble(),nextLine()
注意:Scanner类在java.util.*包中,使用时需要提前用import 语句引入该包。
上述方法执行时都会阻塞,等待你在命令行输入数据回车确认。JAVA使用hasNextByte(),hasDouble(),hasNextFloat(),hasNextInt(),hasNextLong(),hasNextShort()等待用户的输入。
例如:从键盘连续输入整型数值,并打印输出,知道输入非整型值为止。
Scanner read = new Scanner(System.in);
while(read.hasNextInt()){
System.out.print(read.nextInt())
}
Java中语句主要有以下几类:
if语句有以下3中基本结构:
1、if结构:
格式如下:
if (逻辑表达式) {
语句组
}

2、if-else结构:
if(逻辑表达式) {
语句组1
}else {
语句组2
}

3、嵌套if-else结构
if(逻辑表达式1){
语句组1
}else if (逻辑表达式2) {
语句组2
}....
else (逻辑表达式n){
语句组n
}
switch结构:
switch (表达式) {
case 常量1: 语句组1
[break]
case 常量2: 语句组2
[break]
......
case 常量n: 语句组n
[break]
[default: 语句组n+1]
}
注意:
- 表达式的返回值类型必须是这几种类型之一:byte,short,int和char,其他类型都不允许。
- case子句中的常量表达式n必须是常量,而且所以的case子句中的值应是不同的。
- 语句块不需要用{}括起来。
- default子句是可选的。
- break语句用来在执行完一个case分支后,使程序跳出switch语句,即终止switch语句的执行(当多个不同的case值要执行相同操作,这时可以不同break)
- 可以使用if...else结构实现switch的所有功能,但是switch结构更加精简。
循环结构的执行流程为:反复执行同一段代码,直到满足结束条件。循环语句一般包括初始化,循环体,迭代和判断四部分。
Java提供了一些三种循环结构:
while循环的执行流程为:首先判断是否满足条件,若满足则执行循环体,如此重复,直到不满足条件。
格式如下:
[循环变量初始化]
while(逻辑表达式)
{
循环体;
循环控制变量;
}
执行过程:
1、判断 while 后面的条件是否成立( true / false )
2、 当条件成立时,执行循环内的操作代码 ,然后重复执行< 1 >、< 2 >, 直到循环条件不成立为止。
特点:先判断,后执行
例1:
int i=1;
while( i <= 100) {
System.out.println("这是一个测试");
i++;
}
do...while循环(又称“直到型循环”)的执行流程为:首先执行循环体,然后计算机逻辑表达式,若结果为true,则继续执行循环体,直到逻辑表达式的值为false为止。
格式如下:
[循环变量初始化]
do {
循环体;
循环变量控制
}while(逻辑表达式)
执行过程:
1、先执行一遍循环操作,然后判断循环条件是否成立。
2、 如果条件成立,继续执行< 1 > 、< 2 >,直到循环条件不成立为止。
特点: 先执行,后判断
由此可见,do...while 语句保证循环至少被执行一次!
例2:
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存 1-50 之间偶数的和
int num = 2; // 代表 1-50 之间的偶数
do {
//实现累加求和
sum+=num;
num = num + 2; // 每执行一次将数值加2,以进行下次循环条件判断
} while ( num<=50 ); // 满足数值在 1-50 之间时重复执行循环
System.out.println(" 50以内的偶数之和为:" + sum );
}
}
for循环的执行流程为:首先执行初始化操作,然后判断终止条件是否满足,如果满足,则执行循环体中的语句,最后执行迭代部分。完成一次循环后,重新判断终止条件。
格式如:
for(初始值表达式;逻辑表达式;迭代表达式){
循环体
}
注意:
- 在初始值表达式中可以申明作用域为该for循环的变量。
- 逻辑表达式为空时,相当于真值为true。
- 初始表达、逻辑表达式以及迭代表达式部分都可以为空语句(但分号不能省),三者均为空的时候,相当于一个无线循环。
- 初始表达式和迭代表达式部分都可以用逗号语句执行多个操作。
- 如果循环变量在for中定义,变量的作用范围仅限于循环体内。
- for循环和while循环部分情况可以相互转换。
执行过程:
特点:相比 while 和 do...while 语句结构更加简洁易读。
例子:
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存不能被3整除的数之和
// 循环变量 i 初始值为 1 ,每执行一次对变量加 1,只要小于等于 100 就重复执行循环
for (int i = 1; i<=100; i++ ) {
// 变量 i 与 3 进行求模(取余),如果不等于 0 ,则表示不能被 3 整除
if (i % 3 != 0) {
sum = sum + i; // 累加求和
}
}
System.out.println("1到100之间不能被3整除的数之和为:" + sum);
}
}
Java语言提供了4中跳转语句:break,continue、return和throw。
跳转语句的功能是改变程序的执行流程。
break语句的作用是退出switch语句和循环语句,并从紧接着该语句的下一条语句开始执行。
break语句通常有以下不带标号和带标号的两种形式:
break;
break lab;
其中:break是关键字;lab是用户自定义的标号;
注意:
break语句用在switch语句中,其作用强制退出switch结构,执行switch结构后的语句。
break语句用作单层循环结构的循环体中,其作用是强制退出循环结构。若程序中有内外两重循环,而break语句写在内循环中,则执行break语句只能退出内循环。
break lab语句用在循环语句中,必须在外循环入口语句的前方协商lab标号,可以使程序流程退出标号所指明的外循环。
例子:
public class HelloWorld {
public static void main(String[] args) {
// 保存累加值
int sum = 0;
// 从1循环到10
for (int i = 1; i <= 10; i++) {
// 每次循环时累加求和
sum = sum + i;
// 判断累加值是否大于20,如果满足条件则退出循环
if ( sum > 20 ) {
System.out.print("当前的累加值为:" + sum);
//退出循环
break;
}
}
}
}
continue语句的作用是跳过循环体内的continue语句后面还没有执行的语句,回到循环体的开始处重新执行下一轮循环。
continue邮件同城有下述不带标号和带标号的两种形式:
continue;
continue lab;
其中,continue 是关键字,lab为标号。
注意:
continue语句也称为循环的短路语句。用在循环结构中,使程序执行到continue语句时回到循环的入口处,执行下一次循环,二使循环体内写在continue语句后面的语句不执行。
当程序嵌套的多层循环时,为从内循环跳到外循环,可使用带标号的continue lab语句。此时应在外循环的入口语句前加上标号。
例子:
//打印1-100奇数
for(int i=1;i<=100;i++) {
if(i%2==0)
continue;
System.out.print(i);
}
//
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存累加值
for (int i = 1; i <= 10; i++) {
// 如果i为奇数,结束本次循环,进行下一次循环
if ( i % 2 !=0 ) {
continue;
}
sum = sum + i;
}
System.out.print("1到10之间的所有偶数的和为:" + sum);
}
}
return语句从当前方法中退出,返回到调用该方法的语句处,并从紧跟该语句的下一条语句继续程序的执行。
返回语句有两种格式:
return expression;
return;
return语句通常用在一个方法体的最后,否则会产生编译错误,除非用在if-else语句中。
对各种类型数据进行加工的过程称为运算,表示各种不同运算的符号称为运算符,参与运算的数据称为操作数。
按功能分类

按操作数目分类
算术运算符如下表所示:
| 算术运算符 | 具体描述 | 例子 | |
|---|---|---|---|
| 单目运算符 | + | 正数 | +x |
| - | 负数 | -x | |
| ++ | 自增 | ++x或x++ | |
| -- | 自减 | --x或x-- | |
| 双目运算符 | + | 加法 | X+Y |
| - | 减法 | X-Y | |
| * | 乘法 | X*Y | |
| / | 除法 | X/Y | |
| % | 取余数 | X%Y |
其中,++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果是不同滴
例1:
int a=5;
int b=++a;//让a先执行自增,然后再将值赋给变量b;
System.out.println("a:"+a);
System.out.println("b:"+b);
/*
*a:6
*b:6
*/
例2:
int a=5;
int b=a++;//将a值赋给变量b,然后再执行自增;
System.out.println("a:"+a);
System.out.println("b:"+b);
/*
*a:6
*b:5
*/
一定要注意哦!自增和自减运算符只能用于操作变量,不能直接用于操作数值或常量!例如 5++ 、 8-- 等写法都是错误滴!
关系运算符如下表所示
| 关系运算符 | 具体描述 | 例子:假设a=1,b=2 | |
|---|---|---|---|
| 关系表达式 | 运算结果 | ||
| == | 等于 | a== b | false |
| != | 不等于 | a!=b | true |
| > | 大于 | a > b | false |
| >= | 大于等于 | a >= b | false |
| < | 小于 | a < b | true |
| <= | 小于等于 | a <= b | true |
逻辑运算符主要用于进行逻辑运算。Java 中常用的逻辑运算符如下表所示:
| 逻辑运算符 | 名称 | 举例 | 结果 |
|---|---|---|---|
| && | 与 | a&&b | 如果a与b都是true,则返回true。 |
| || | 或 | a||b | 如果a与b任一方为true,则返回true. |
| ! | 非 | !a | 如果a为false,则返回true,即取反。 |
| ^ | 异或 | a^b | 如果a与b有仅只有一个true,则返回true。 |
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/
HashMap中为什么引入红黑树,而不是AVL树呢1.概述开始学习这个知识点之前我们需要知道,在JDK1.8以及之前,针对HashMap有什么不同。JDK1.7的时候,HashMap的底层实现是数组+链表JDK1.8的时候,HashMap的底层实现是数组+链表+红黑树我们要思考一个问题,为什么要从链表转为红黑树呢。首先先让我们了解下链表有什么不好???2.链表上述的截图其实就是链表的结构,我们来看下链表的增删改查的时间复杂度增:因为链表不是线性结构,所以每次添加的时候,只需要移动一个节点,所以可以理解为复杂度是N(1)删:算法时间复杂度跟增保持一致查:既然是非线性结构,所以查询某一个节点的时候
网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,