Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和 跨平台部署的支持环境,并广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。
(一).数据结构与变量
首先Java的数据结构与变量中的知识主要包括字面常量,数据类型和变量三部分,接下来我们来一一了解。
1.1.字面常量
字面常量其实就和我们c语言中的字面常量相同,指的是,System.out.println("hello world");这段输出语句中的hello world,即是常量即程序运行期间,固定不变的量称为常量。
例如:
这里面的20,3.14,hello world,A,true,false都是字面常量,根据上面这些例子我们就可以给字面常量分类,有:
1. 字符串常量:由""括起来的,比如“12345”、“hello”、“你好”。
2. 整形常量:程序中直接写的数字(注意没有小数点),比如:100、1000
3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49
4. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
5. 布尔常量:只有两种true和false
6. 空常量:null
以上就是关于字面常量的内容,下面我们来了解数据类型的知识。
1.2.数据类型
Java中数据类型分为基本数据类型和引用数据类型两种。
基本数据类型:整型,字符型,浮点型,布尔型。
种类:八种
注意:
1.不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节
2.整形和浮点型都是带有符号的
3.整型默认为int型,浮点型默认为double
4.字符串属于引用类型,该中类型后序介绍。
以上就是关于数据结构的知识下面我们来了解关于变量的知识。
1.3.变量
在Java中我们除了有一些不变的字面常量,当然还有可变的量,这些在Java中称之为变量,数据类型就是用来定义不同种类变量的。
语法结构:
数据类型 变量名=初始值;
例如:
这些等等都是数据结构变量。介绍完变量的概念之后我们来了解关于具体的几种变量。
1.3.1.整型变量
1.3.1.1整型变量
整型变量是int类型定义的变量,具体代码形式如下:
总结注意:
1. int不论在何种系统下都是4个字节
2. 推荐使用方式一定义,如果没有合适的初始值,可以设置为0
3. 在给变量设置初始值时,值不能超过int的表示范围,否则会导致溢出
4. 变量在使用之前必须要赋初值,否则编译报错
5. int的包装类型为 Integer
1.3.1.2.长整型变量
长整形变量指的是用long类型来定义的变量,具体代码形式如下:
注意事项:
1. 长整型变量的初始值后加L或者l,推荐加L
2. 长整型不论在那个系统下都占8个字节
3. 长整型的表示范围为: 见上图
4. long的包装类型为Long
1.3.1.3.短整型变量
短整型就是指的是short类型定义的变量,具体代码如下:
下面箭头指向的时short类型的范围。
注意事项:
1. short在任何系统下都占2个字节
2. short的表示范围为:-32768 ~ 32767
3. 使用时注意不要超过范围(一般使用比较少)
4. short的包装类型为Short
1.3.1.4字节型变量
字节型变量指的是被byte定义的变量,具体代码如下:
注意事项:
1. byte在任何系统下都占1个字节
2. byte的范围是:-128 ~ 127
3. 字节的包装类型为Byte
思考我们为什么要定义四种不同的整型变量?
我们可以联想到我们买衣服时要挑选不同尺寸的衣服才能让衣服和人的尺寸刚好合适,同样整型变量也是如此,我们定义不同的整型变量这样我们就可以不浪费资源和空间。
1.3.2.浮点型变量
1.3.2.1.双精度浮点型
双精度浮点型指的是被double修饰的变量。具体代码形式如下:
这里左下角大家知道为什么是这个?以下注意事项会告诉大家答案
注意事项:
1. double在任何系统下都占8个字节
2. 浮点数与整数在内存中的存储方式不同,不能单纯使用 的形式来计算
3. double的包装类型为Double
4. double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势 必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
1.3.2.2.单精度浮点型
float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数 都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。
1.3.3.字符型变量
注意事项:
1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此 一个字符占用两个字节, 表示的字符种类更多, 包括中文.
3. char的包装类型为Character。
1.3.4.布尔型变量
布尔变量可能大家听起来很陌生,但是它真的无时无刻都与我们息息相关,比如当听到有人彩票中了几百万,我们可能会想真的假的?比尔变量就是表示真假的一个条件语句变量。例如:
注意事项:
1. boolean 类型的变量只有两种取值, true 表示真, false 表示假.
2. Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.
3. Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在 Oracle公司的虚拟机实现中,boolean占1个字节。
4. boolean的包装类型为Boolean。
1.4.类型转换
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.
例如:
这里面就体现了Java语言的严格性,int类型的可以给long类型的变量赋值,而long类型的变量不可以给int类型的变量赋值,这是为什么呢?我们可以通过以下的学习来了解。
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐 式) 和 强制类型转换(显式)。
自动类型转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。
例如:
类型相同时范围小的变量会自动转化为范围大的值在进行赋值等操作,但范围大的变量不能直接向范围小的变量进行赋值等操作。
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。
例如:
注意事项:
1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查
4. 强制类型转换不一定能成功,不相干的类型不能互相转换
1.5.类型提升
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
int与long之间:int会被提升为long类型
byte与byte之间:
正确写法:
int 转成 String:
String 转成 int:
以上就是关于数据类型与变量的全部内容。
(二).运算符
运算符想必大家应该都十分熟悉了吧,但这篇文章中我们要来了解在Java中运算符是怎么用的。
2.1.算术运算符
2.1.1基本四则运算符:加减乘除模(+ - * / %)
注意:
1.都是二元运算符,使用时必须要有左右两个操作数
2.int / int 结果还是int类型,而且会向下取整,例如:
3.做除法和取模时,右操作数不能为0。
4. % 不仅可以对整型取模,也可以对double类型取模,但是没有意义,一般都是对整型取模的
5.两侧操作数类型不一致时,向类型大的提升
2.1.2.增量运算符 += -= *= %=
增量运算符其实就是一个式子的简写例如:a+=b;其实实际上就是a=a+b;故增量运算符我们可以总结为以下代码,
public static void main(String[] args) {int a = 1;a += 2; // 相当于 a = a + 2System.out.println(a); // 输出3a -= 1; // 相当于 a = a - 1System.out.println(a); // 输出2a *= 3; // 相当于 a = a * 3System.out.println(a); // 输出6a /= 3; // 相当于 a = a / 3System.out.println(a); // 输出2a %= 3; // 相当于 a = a % 2System.out.println(a); // 输出2}
注意:只有变量才能使用该运算符,常量不能使用。
2.1.3.3. 自增/自减运算符 ++ --
++是给变量的值+1,--是给变量的值-1。
int a = 1;
a++; // 后置++ 表示给a的值加1,此时a的值为2
System.out.println(a++); // 注意:后置++是先使用变量原来值,表示式结束时给变量+1,因此输出2
System.out.println(a); // 输出3
++a; // 前置++ 表示给a的值加1
System.out.println(++a); // 注意:前置++是先给变量+1,然后使用变量中的值,因此输出5
System.out.println(a); // 输出5
// --操作符给操作-1,与++含义类似
注意:
1.如果单独使用,【前置++】和【后置++】没有任何区别
2.如果混合使用,【前置++】先+1,然后使用变量+1之后的值,【后置++】先使用变量原来的值,表达式 结束时给变量+1
3.只有变量才能使用自增/自减运算符,常量不能使用,因为常量不允许被修改
2.2.关系运算符
关系运算符主要有六个: == != < > = ,其计算结果是 true 或者 false 。代码总结如下:
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
注意:当需要多次判断时,不能连着写,比如:3 < a < 5,Java程序与数学中是有区别的
2.3.逻辑运算符
逻辑运算符主要有三个: && || ! ,运算结果都是 boolean类型。
1.逻辑与 &&
逻辑与运算我们可以总结为一句话来概括就是左右两个表达式同时为真时结果为真,当两个表达式有一个为假或者同时为假的三种情况时,结果为假。
例如:
int a = 1;
int b = 2;
System.out.println(a == 1 && b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 && b > 100); // 左为真 但 右为假 则结果为假
System.out.println(a > 100 && b == 2); // 左为假 但 右为真 则结果为假
System.out.println(a > 100 && b > 100); // 左为假 且 右为假 则结果为假
2.逻辑 ||
逻辑或运算我们也可以用一句话来概括就是符号左右两个表达式当有一个为真或两个都为真的三种情况时结果为真,当左右两个表达式都为假的时候结果为假。
例如:
int a = 1;
int b = 2;
System.out.println(a == 1 || b == 2); // 左为真 且 右为真 则结果为真
System.out.println(a == 1 || b > 100); // 左为真 但 右为假 则结果也为真
System.out.println(a > 100 || b == 2); // 左为假 但 右为真 则结果也为真
System.out.println(a > 100 || b > 100); // 左为假 且 右为假 则结果为假
3. 逻辑非 !
逻辑非其实就是假的非就是真,真的非就是假。
int a = 1;
System.out.println(!(a == 1)); // a == 1 为true,取个非就是false
System.out.println(!(a != 1)); // a != 1 为false,取个非就是true
2.4.位运算符
Java 中数据存储的最小单位是字节,而数据操作的最小单位是比特位. 字节是最小的存储单位,每个字节是由8个二 进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。
位运算符主要有四个: & | ~ ^ ,除 ~ 是一元运算符外,其余都是二元运算符。
位操作表示 按二进制位运算. 计算机中都是使用二进制来表示数据的(01构成的序列), 按位运算就是在按照二进制位 的每一位依次进行计算.
1. 按位与 &: 如果两个二进制位都是 1, 则结果为 1, 否则结果为 0.
int a = 10;
int b = 20;
System.out.println(a & b)
2. 按位或 |: 如果两个二进制位都是 0, 则结果为 0, 否则结果为 1.
3.按位取反 ~: 如果该位为 0 则转为 1, 如果该位为 1 则转为 0
4. 按位异或 ^: 如果两个数字的二进制位相同, 则结果为 0, 相异则结果为 1.
2.5.移位运算
这里的移位为算符是<< >> >>>,这三个分别是左移,右移,无符号右移,
例如:左移
这里我们有一个诀窍就是怎样计算发生移位之后的值,就是结果=原本值*2^移动的位数。
右移:
右移的结果值就是n/2^x,就是结果=原本值/2^移动的位数。
这里还有一个特殊的无符号右移,
和右移最大的区别就是无符号右移右移之后最高位添零,而右移是右移后最高位添加符号位。
2.6.条件运算符
这里的条件运算符实际上用我们的话来说就是三目运算符,形式如下:
表达式1 ? 表达式2 : 表达式3
当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值;
当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.
注意:
1.表达式2和表达式3的结果要是同类型的,除非能发生类型隐式类型转换
2.表达式不能单独存在,其产生的结果必须要被使用。
2.7.运算符的优先级
在一条表达式中,各个运算符可以混合起来进行运算,但是运算符的优先级不同,比如:* 和 / 的优先级要高于 + 和 - ,有些情况下稍不注意,可能就会造成很大的麻烦。
例如:
// 求a和b的平均值
int a = 10;
int b = 20;
int c = a + (b - a) >> 1;
System.out.println(c);
上述表达式中,由于 + 的优先级要高于 >> , 因此a先和b-a的结果做加法,整体为20,最后再进行右移,因此结果 为10。
注意:运算符之间是有优先级的. 具体的规则我们不必记忆. 在可能存在歧义的代码中加上括号即可.
(三).程序逻辑控制
3.1.顺序结构
顺序结构简而言之就是按照顺序一行一行的写代码,
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc
代码的顺序改变,运行结果也随之而改变。
3.2.分支结构
3.2.1.if语句
语法格式1:
语法格式2:
语法格式3:
3.2.2. switch 语句
基本语法:
switch(表达式){
case 常量值1:{
语句1;
[break;]
}
case 常量值2:{
语句2;
[break;]
...
default:{
内容都不满足时执行语句;
[break;]
}
}
执行流程:
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
注意以下一个例子:
注意事项:
1.多个case后的常量值不可以重复
2.switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型
3.break 不要遗漏, 否则会失去 "多分支选择" 的效果
4.switch 不能表达复杂的条件
3.3.循环结构
3.3.1 while 循环
基本语法格式:
循环条件为 true, 则执行循环语句; 否则结束循环.
例如:打印1-10的数字
int num = 1;
while (num <= 10) {
System.out.println(num);
num++;
}
打印数字5的阶乘
public static void main(String[] args) {int num=1;int n=1;while(n<=5){num*=n;n++;}System.out.println(num);}
等等很多的这种例子。
注意事项:
1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { } 2. 和 if 类似, while 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行.
3.3.2break
break的功能是让循环提前结束。
例如:
这里当出现了图中要求的数字的时候程序遇到break就会跳出循环。
3.3.3. continue
continue 的功能是跳过这次循环, 立即进入下次循环.
例如:找到 100 - 200 中所有 3 的倍数
3.3.4for循环
基本语法:
表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
表达式2: 循环条件,满则循环继续,否则循环结束
表达式3: 循环变量更新方式
执行过程:
①②③④--->②③④--->②③④--->②③④--->②③④--->②③④--->...--->②为false,循环结束。
例如:打印1-100的和
public static void main(String[] args) {int sum=0;for(int i=1;i<=100;i++){sum+=i;}System.out.println(sum);}
等等很多地方都会用到for循环的。
注意事项:
1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2. 和 if 类似, for 后面的 { 建议和 while 写在同一行.
3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行.
4. 和while循环一样,结束单趟循环用continue,结束整个循环用break
3.4输入输出
Java中的输入和输出和其他语言的输入输出不一样,接下来让我们看看具体是怎么样的。
3.4.1输出到控制台
基本语法:
System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出
1.println 输出的内容自带 \n, print 不带 \n
2.printf 的格式化输出方式和 C 语言的 printf 是基本一致的.
3.4.2从键盘输入
使用 Scanner 读取字符串/整数/浮点数
例如:
好了以上就是我与大家分享的内容,望各位指出小编的不足之处我一定会积极改正的。