初识Java、Java中的变量及数据类型、类型转换、强制类型转换、输出信息、转义符、获取用户输入及代码规范、运算符、选择结构、循环结构
Java基础部分
初识Java
1.什么是程序?
为了让计算机执行某些操作或解决某个问题而编写的一系列有序的集合=>计算机程序。
而编写程序的工具就是计算机语言。
2. Java语言的特点。
Java语言的特点: 简单、面向对象、分布式、结构中立、可移植、解释执行、健壮、安全、高性能、多线程和动态。
3. Java平台
(1)、Java SE(Java Standard Edition、标准版)包含Java语言的基础核心(JRE、JDK、Java开发工具包)。 主要用于桌面开发,例如QQ、记事本。
(2)、Java EE (Java Enterprise Edition、企业版)包含Java SE。主要用于企业应用程序开发。例如:Web网站、分布式应用。
(3)、Java ME(Java Mocro Edition、移动版)主要用于开发移动设备/嵌入式设备的应用,例如手机游戏。
4. JDK
JDK(Java Development kit)=>Java 开发工具包。
5.JRE
JRE (Java Runtime Environment)Java运行时环境。
6.0 JVM
JVM (Java Virtual Machine)Java虚拟机。
7.0 JDK、JRE、JVM三者关系
JDK包含JRE,JRE包含JVM(JVM 嵌在JRE中)。
JDK>JRE>JVM
8.0 Java程序运行过程
变量与数据类型
1.变量
所谓变量就是值可以变化的量,变量是作为程序运行时的数据。
变量的三要求:变量名、变量类型、变量值。
int a = 2; //定义一个整型变量a且赋值为2。
2.数据类型
常用数据类型 | 含义 | 长度 | 说明 |
---|---|---|---|
byte | 整数 | 1字节 | 字节型、取值范围[-128,127] |
short | 整数 | 2字节 | 短整型、取值范围[-2^15, 2^15-1] |
int | 整数 | 4字节 | 整数型、取值范围[-2^31, 2^31-1] |
long | 整数 | 8字节 | 长整型、取值范围[-2^63, 2^63-1]、定义长整型时要在末尾加 l/L |
float | 小数 | 单精度 4字节 | 末尾加f/F |
double | 小数 | 双精度 8字节 | Java中会将小数默认当作double类型处理 |
char | 字符 | 2字节 | 表示单个字符、用时需单引号引起 |
boolean | 布尔 | 1字节 | 表示真或假即true/false |
string | 字符串 | 看具体字符串长度而定 | 表示一串字符,用时需双引号引起 |
3.进制数表示
二进制数:以0b或0B为前缀,0是阿拉伯数字。
八进制数:以0为前缀,0是阿拉伯数字。
十六进制数:以0x或0X为前缀,0是阿拉伯数字。
int a1 = 28;
int a2 = 0b11100;//二进制
int a3 = 0B11100;//二进制
int a4 = 034;//八进制
int a5 = 0x1c;//十六进制
int a6 = 0X1c;//十六进制
都是表示28的数。
4.指数
大写或者小写的e表示幂。
int a = e2;
double b = 3.14e-2;
这e2表示10^2, 3.14e-2表示 3.14*10^-2。
5.类型转换
1.自动类型转换(隐式转换)。
条件:a、数据类型要兼容。
b、目标类型要大于原类型(字节长度)
int a=3;
long b=a;
System.out.println(b);
这里输入的是3,长整型,
long类型的长度大于int类型的长度。
若是
long a=3;
int b=a;
System.out.println(b);
则输出会报错。
2.强制类型转换(显示转换)。
语法:
(目标的数据类型)数值;
double e=12.6;
int f=(int)e;
System.out.println(f);
系统输出的是12。
这也说明了强制转换会导致数据的丢失和降低精度。
3.char 和 int 之间的转换
char 和 int 都是以二进制类型存储的。
//将char转换为int
int x='a'; //隐式转换
System.out.println(x);
输出的结果是97,这是a的ASCII码。
//将char转换为int
int x='a'; //隐式转换
System.out.println(x);
//将int转换为char
char y=(char)x; //必须进行强制类型转换
System.out.println(y);
char z=97; //不会报错,97被当作常数来处理
//而非整型int(整数和整型是有所不同的)
System.out.println(z);
运行结果
97
a
a
信息的输入输入及代码规范
1.输出信息
输出信息有三种;
a、print();打印字符不换行,有多个重载方法,可以打印任何类型数据。
b、println();打印字符换行,有多个重载方法,可以打印任何类型数据。
c、printf();使用指定输出格式,打印任何长度的数据,但不换行。
int a = 3;
System.out.println("-------");
System.out.print(a);
System.out.println("-------");
System.out.println(a);
System.out.println("-------");
System.out.printf("%d",a);//%d表示格式化整数
System.out.println("-------");
执行结果:
-------
3-------
3
-------
3-------
可以看出不转行的输出后面都跟着虚线,转行的输出与虚线分隔两行。
2.转义符
Java中用反斜杠 \ 表示转义符。
转义符 | 代表含义 |
---|---|
\n | 换行符、换行 |
\t | 制表符 、加多个空格 |
\\ | 表示反斜杠 \ |
%n | 换行 |
%d | 对整数格式化 |
%f | 对浮点格式化 |
3.注释
注释是用来标记解释内容,不会被程序执行。分为:单行注释、多行注释、文本注释。
a、单行注释:以 // 开头
b、多行注释:
/*…
* …
*/
c、文本注释:
/ * *…
*…
*/
以上是注释的模板。
其中文本注释可以通过指定命令生成注释文本。
cmd 的命令格式:
javadoc 文件名.java
4.获取用户输入的数据
Java 中有一个Scanner包可以获取用户输入的数据内容。
使用Scanner获取用户输入数据步骤:
a、导入Scanner包
import java.util.Scanner;
b、创建Scanner对象
Scanner input = new Scanner(System.in);
c、获取数据、将数据存储在变量中
String name = input.next();//字符串类型
double a = input.nextDouble();//小数
int b = input.nextInt();//整型类型
编码规范及建议
- 类名与文件名相同,通常采用所有单词的首字母大写的形式。
- 语句必须一分号结尾。
- 标点符号必须为英文符号。
- Java是大小写敏感的,即区分大小写。
建议 - 所有命名不建议使用中文、空格、特殊字符等,不要以数字开头。
- 一行只写一条语句。
- 注意{}的使用及位置。
- 合理的代码缩进(每行代码对齐)。
运算符
1.运算符分类
运算符分为:算术运算符、关系运算符、赋值运算符、逻辑运算符、条件运算符、位运算符。
2.算数运算符
算数运算符 | 含义 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取余/求模 |
++ | 自增 |
- - | 自减 |
前缀自增自减和后缀自增自减的区别:
- 前缀自增自减
先进行自增或自减,然后再执行表达式 - 后缀自增自减
先执行表达式,然后再进行自增或自减
int a = 3;
int b = 2;
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);
System.out.println("-------------");
//自增自减
int a1=3,a2=3,a3=4,a4=4;
System.out.println(a1++);//先输出再加1
System.out.println(++a2);//先加1再输出
System.out.println(a3--);//先输出再减1
System.out.println(--a4);//先减1在输出
运行结果:
5
1
6
1
1
-------------
3
4
4
3
对于以下代码又是怎么样呢?
int i = 3;
int j = (i++) + (++i);
System.out.println(j);
毫无疑问结果是8,不是4+4得来的,它是3+5得来的。
3.关系运算符
关系运算符 | 含义 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于或等于 |
<= | 小于或等于 |
== | 等于 |
!= | 不等于 |
int a = 5, b = 8;
System.out.println(a > b); // 结果为boolean值
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);
运行结果:
false
true
false
true
false
true
4.赋值运算符
赋值运算符 | 含义 |
---|---|
= | 简单赋值 |
+= | 加法赋值 |
-= | 减法赋值 |
*= | 乘法赋值 |
/= | 除法赋值 |
%= | 取模赋值 |
int a1 = 3,a2 = 3,a3 = 3,a4 = 3,a5 = 3;
a1 += 2; // 等价于a = a+2
a2 -= 2; // 等价于a = a-2
a3 *= 2; // 等价于a = a*2
a4 /= 2; // 等价于a = a/2
a5 %= 2; // 等价于a = a%2
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
System.out.println(a4);
System.out.println(a5);
运行结果:
5
1
6
1
1
5.逻辑运算符
逻辑运算符 | 含义 |
---|---|
&& | 逻辑与,并且 |
ll | 逻辑或,或者 |
! | 非,否 |
boolean a = true, b = false;
System.out.println(a && b); // 两个都为true,则为true,否则为false
System.out.println(a || b); // 只要有一个为true,则为true,否则为false
System.out.println(!b); // 如果为true,则为false;如果为false,则为true
运行结果:
false
true
true
- 逻辑运算是一种短路运算 。
- 对于&&,如果左边为false,则不再执行右边代码。
- 对于||,如果左边为true,则不再执行右边代码。
6.条件运算符
条件运算符也称为三目运算符
语法: 条件?表达式1:表达式2
当条件为true时执行表达式1,当条件为false时执行表达式2。
int a = 1;
int b = 2;
System.out.println(a * 2 < b ? "yes" : "no");
int c = a > b ? a + b : a - b;
System.out.println(c);
运行结果:
no
-1
7. 运算符的优先级
从高到低的顺序:
1. 小括号( )
2. 一元运算:自增++、自减、非!
3. 乘*、除/、取余%
4. 加+、减
5. 关系运算:> < >= <=
6. 相等运算:==、!=
7. 逻辑与 &&
8. 逻辑或 ||
9. .赋值运算:=、+=等
注:当运算符较多时,建议使用小括号控制运算的顺序
8.位运算符
位运算符 | 含义 |
---|---|
& | 按位与 |
l | 按位或 |
~ | 按位非 |
^ | 异或 |
>> | 右移 |
<< | 左移 |
>>> | 无符号右移 |
位运算符和逻辑运算符的区别:
逻辑运算符是针对布尔值进行运算 位运算符是针对二进制数的位进行运算。
int a = 5; // int是4字节32比特,即32位数,二进制为00000000 00000000 00000000 00000101
int b = 8; // 二进制为00000000 00000000 00000000 00001000
// 与:两位都为1,则为1,否则为0
System.out.println(a & b); //00000000 00000000 00000000 00000000
// 或:只要有一个1,则为1,否则为0
System.out.println(a | b); // 00000000 00000000 00000000 00001101
// 非:如果为1,则为0,如果为0,则为1
System.out.println(~a); // 11111111 11111111 11111111 11111010
//异或:如果两位相同,则为0,否则为1
System.out.println(a^b); // 00000000 00000000 00000000 00001101
//左移:将二进制的所有位都向左移指定的位数,末尾补0
System.out.println(a<<2); //00000000 00000000 00000000 00010100
//右移:将二进制的所有位都向右移指定的位数,高位补符号位
System.out.println(a>>2); //00000000 00000000 00000000 00000001
//无符号右移:将二进制的所有位都向右移指定的位数,高位补0
System.out.println(a>>>2);//00000000 00000000 00000000 00000001
运行结果:
0
13
-6
13
20
1
1
选择结构
1.选择结构
根据条件进行判断,从而执行不同的操作,称为选择结构(分支结构),其实就是条件判断。
选择结构有三种:顺序结构、选择结构、循环结构。
2.if语句引导的if结构、if-else结构和else-if结构
if结构:
if(条件语句){
语句组
}
int age = 19;
if (age >= 18) {
System.out.println("你成年了");
}
if-else结构:
if(条件语句){
语句组1
}else{
语句组2
}
int age = 19;
if (age >= 18) {
System.out.println("你成年了");
}else {
System.out.println("你未成年");
}
else-if结构:
if(条件语句1){
语句组1
}else if(条件语句2){
语句组2
}.
.
.}else if(条件语句n){
语句组n
}else{
语句组n+1
}
int score =85;
if(score>=90) {
System.out.println("a");
}else if(score>=80) {
System.out.println("b");
}else if (score>=70) {
System.out.println("c");
}else if (score>=60) {
System.out.println("d");
}else {
System.out.println("请认真点");
}
3.switch语句
语法:
switch (表达式){
case 值1:
语句组1
case 值2:
语句组2
case 值3:
语句组3
.
.
.
case 值n:
语句组n
defaut:
语句n+1
}
int a = 85;
switch (a/10) {
case 9:
System.out.println("a");
break;
case 8:
case 7:
System.err.println("b");
break;
case 6:
System.out.println("c");
break;
default:
System.out.println("d");
运行结果:
b
若都没有beak;程序的结果为:
b
c
d
显然这是错误的,不加break;程序会进入下一个case,直到结束。
循环结构
1.循环结构类型
循环语句分为:while、do-while、for类型。
2.while语句
语法:
while(循环条件){
代码块
}
//打印4次holle world
int i =0;
while(i<5) {
i++;
System.out.println("hello world");
}
3.do-while 语句
语法:
do{
代码块
}while(循环条件)
int i =0;
do {
System.out.println("hello world");
i++;
}while(i<5);
运行结果:
hello world
hello world
hello world
hello world
hello world
5次hello world,相比while多执行了一次。
while语句是先判断再循环。
do-while则是先执行再判断,而且至少执行一次。
4.for语句
语法:
for(初始化,循环条件,迭代){
代码块
}
//利用for循环打印出1-9之间的平方值
for(int i =1;i<10;i++) {
System.out.printf("%d X %d =%d",i,i,i*i);
System.out.println();
运行结果:
1 X 1 =1
2 X 2 =4
3 X 3 =9
4 X 4 =16
5 X 5 =25
6 X 6 =36
7 X 7 =49
8 X 8 =64
9 X 9 =81
5.增强for循环
增强for循环是用来遍历数组的。
语法:
for(元素类型 循环变量:集合){
语句组
}
import java.util.Arrays;
int[] nums = { 3, 12, 67, 2, 65, 32, 9 };
for (int n : nums) {
System.out.println(n);
//Arrays类的toString()方法,将数组转换为字符串
}
System.out.println(Arrays.toString(nums)); //数组元素以逗号隔开,放到中括号里
运行结果:
3
12
67
2
65
32
9
[3, 12, 67, 2, 65, 32, 9]
跳转语句
1.break语句
语法:
break:
int[] nums= {1,2,3,4,5,6};
for(int i =0;i<nums.length;i++) {
System.out.println(i);
if(i==3) {
break;//跳出循环
}
运行结果:
0
1
2
3
2.continue语句
continue;
for (int i = 1; i <= 30; i++) {
if (i % 2 == 0) {
continue; // 本次循环不再执行,直接执行一次循环
}
System.out.println(i);
运行结果;
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29