一、首次使用java
1.Java环境安装
- 安装jdk
- 安装jre
- 配置环境变量
- JAVA_HOME 即安装目录 c:\Java\jdk
- Path 即JDK的bin目录%JAVA_HOME%\bin;
2.Java 入门程序
helloworld程序
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
2.1 Java代码注释
- Java中有单行注释和多行注释
- 单行注释以 //开头 换行结束
- 多行注释以 /* 开头 以*/结束
2.2关键字:是指在程序中,Java已经定义好的单词,具有特殊含义。
2.3标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。
- 命名规则: 硬性要求
- 标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。
- 标识符不能以数字开头。
- 标识符不能是关键字。
- 命名规范: 软性建议
- 类名规范: 首字母大写,后面每个单词首字母大写(大驼峰式)。
- 方法名规范: 首字母小写,后面每个单词首字母大写(小驼峰式)。
- 变量名规范:全部小写。
3.常量
常量:是指在Java程序中固定不变的数据
3.1分类
类型 | 含义 | 数据举例 |
---|---|---|
整数常量 | 所有的整数 | 0,1, 567, -9 |
小数常量 | 所有的小数 | 0.0, -0.1, 2.55 |
字符常量 | 单引号引起来,只能写一个字符,必须有内容 | ‘a’ , ’ ', ‘好’ |
字符串常量 | 双引号引起来,可以写多个字符,也可以不写 | “A” ,“Hello” ,“你好” ,"" |
布尔常量 | 只有两个值 | true , false |
空常量 | 只有一个值 | null |
4.变量
程序中可以变化的量称为变量。
4.1 分类
- Java的数据类型分为两大类:
- 基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。
- 引用数据类型:包括 类 、 数组 、 接口 。
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
字节型 | byte | 1个字节 | -128~127 |
短整型 | short | 2个字节 | -32768~32767 |
整型 | int(默认) | 4个字节 | -231次方~2的31次方-1 |
长整型 | long | 8个字节 | -2的63次方~2的63次方-1 |
单精度浮点数 | float | 4个字节 | 1.4013E-45~3.4028E+38 |
双精度浮点数 | double | (默认) 8个字节 | 4.9E-324~1.7977E+308 |
字符型 | char | 2个字节 | 0-65535 |
布尔类型 | boolean | 1个字节 | true,false |
Java中的默认类型:整数类型是 int 、浮点类型是 double 。
4.2 变量的定义
数据类型 变量名 = 数据值;
public class Variable {
public static void main(String[] args){
//定义字节型变量
byte b = 100;
System.out.println(b);
//定义短整型变量
short s = 1000;
System.out.println(s);
//定义整型变量
int i = 123456;
System.out.println(i);
//定义长整型变量
long l = 12345678900L;
System.out.println(l);
//定义单精度浮点型变量
float f = 5.5F;
System.out.println(f);
//定义双精度浮点型变量
double d = 8.5;
System.out.println(d);
//定义布尔型变量
boolean bool = false;
System.out.println(bool);
//定义字符型变量
char c = 'A';
System.out.println(c);
}
}
long类型:建议数据后加L表示。
float类型:建议数据后加F表示
- 变量名称:在同一个大括号范围内,变量的名字不可以相同。
- 变量赋值:定义的变量,不赋值不能使用。
5.数据类型转换
自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
-
自动转换:将
取值范围小的类型
自动提升为取值范围大的类型
。- 转换规则:
- 范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int 。
- 转换规则:
-
强制转换 :将
取值范围大的类型
强制转换成取值范围小的类型
。
数据类型 变量名 = (数据类型)被转数据值;
- 浮点转成整数,直接取消小数点,可能造成数据损失精度。
- int 强制转成 short 砍掉2个字节,可能造成数据丢失。
public static void main(String[] args) {
//short类型变量,内存中2个字节
short s = 1;
/*
出现编译失败
s和1做运算的时候,1是int类型,s会被提升为int类型
s+1后的结果是int类型,将结果在赋值会short类型时发生错误
short内存2个字节,int类型4个字节
必须将int强制转成short才能完成赋值
*/
s = s + 1;//编译失败
s = (short)(s+1);//编译成功
}
6.运算符
6.1算数运算符
算数运算符包括: | |
---|---|
+ | 加法运算,字符串连接运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算 |
% | 取模运算,两个数字相除取余数 |
++ 、 – | 自增自减运算 |
i++:表示先运算,后加1
++i:表示先加1,再运算
- 符号在字符串中的操作:
- 符号在遇到字符串的时候,表示连接、拼接的含义。 “a”+"b"的结果是“ab”,连接含义
6.2 赋值运算符
赋值运算符,就是将符号右边的值,赋给左边的变量。
赋值运算符包括: | |
---|---|
= | 等于号 |
+= | 加等于 |
-= | 减等于 |
*= | 乘等于 |
/= | 除等于 |
%= | 取模等 |
6.3 比较运算符
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
比较运算符包括: | |
---|---|
== | 比较符号两边数据是否相等,相等结果是true。 |
< | 比较符号左边的数据是否小于右边的数据,如果小于结果是true。 |
> | 比较符号左边的数据是否大于右边的数据,如果大于结果是true。 |
<= | 比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。 |
>= | 比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。 |
!= | 不等于符号 ,如果符号两边的数据不相等,结果是true。 |
6.4 逻辑运算符
逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false
逻辑运算符包括: | |
---|---|
&& 短路与 | 1. 两边都是true,结果是true2. 一边是false,结果是false 短路特点:符号左边是false,右边不再运算 |
|| 短路或 | 1. 两边都是false,结果是false2. 一边是true,结果是true |
! 取反 | 1. ! true 结果是false2. ! false结果是true |
6.5三元运算符
数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
- 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
7.方法
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能
7.1 方法定义
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
定义格式:
修饰符 返回值类型 方法名 (参数列表){
代码...
return ;
}
-
修饰符:
1. 访问控制修饰符公共访问控制符public、 保护访问控制符protected、 缺省默认访问控制符、 私有访问控制符private
-
非访问控制修饰符
抽象方法控制符abstract 、 静态方法控制符static 、 最终方法控制符final 、 本地方法控制符native 、 同步方法控制符synchronized
- 返回值类型:
- 方法名:
- 参数列表:
- return:
- 方法定义注意事项:
- 方法必须定义在一类中方法外
- 方法不能定义在另一个方法的里面
8.1流程控制
- if–else判断
if(关系表达式){
语句体;
}
//或者
if(关系表达式) {
语句体1;
}else {
语句体2;
}
- switch
switch(表达式) {
case 常量值1:
语句体1;
break;
case 常量值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
- 执行流程
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就结束。
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
3.for
for(初始化表达式①; 布尔表达式②; 步进表达式④){
循环体③
}
4.while
初始化表达式①
while(布尔表达式②){
循环体③
步进表达式④
}
5.do。。while
初始化表达式①
do{
循环体③
步进表达式④
}while(布尔表达式②);
for 和 while 的小区别:
- 控制条件语句所控制的那个变量,在for循环结束后,就不能再被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环结束,该变量就从内存中消 失,能够提高内存的使用效率。
- 在已知循环次数的时候使用推荐使用for,循环次数未知的时推荐使用while。
-
break:
- 使用场景:终止switch或者循环
-
continue使用场景:
- 结束本次循环,继续下一次的循环
6.嵌套循环,死循环
//while(true){}。
for(初始化表达式①; 循环条件②; 步进表达式⑦) {
for(初始化表达式③; 循环条件④; 步进表达式⑥) {
执行语句⑤;
}
}