1、变量
1.1、变量的使用
- java定义变量的格式: 数据类型 变量名 = 变量值;
- 说明
- 变量必须先声明,后使用。
- 变量都定义在其作用域内。在作用域内,它是有效地。换句话说,出了作用域就无效了。
- 同一个作用域内,不可以声明两个同名的变量名
菜鸟教程: https://www.runoob.com/java/java-tutorial.html
1.2、变量的分类
基本的数据类型
整型 | byte \ short \ int \ long |
---|---|
浮点型 | float \ double |
字符型 | char |
布尔型 | boolean |
引用数据类型
类 | class |
---|---|
接口 | interface |
数组 | array |
1.2.1、整数类型
byte(1字节=bit)
short(2字节)
int(4字节)
long(8字节)
注意: long型变量,变量值过大必须以’l’或’L’结尾。
public class HelloWorld {
public static void main(String[] args){
byte a = 12;
short b = 15;
int c = 20;
long d = 10l;
System.out.println(d);
}
}
1.2.2、浮点型
float(4字节)
double(8字节)
Java的浮点型常量默认为double,声明float型常量,变量值必须加’f’或’F’
public class HelloWorld {
public static void main(String[] args){
float a = 3.14f;
System.out.println(a);
double b = 3.154456;
System.out.println(b);
}
}
1.2.3、字符类型
char(1字符=2字节)
定义char型变量,通常使用一对’’
public class HelloWorld {
public static void main(String[] args){
char a = 'a';
//char a = 'ab'; 注意char定义的变量只能存放一个字符的变量值。
System.out.println(a);
}
}
1.2.4、布尔类型
只能取两个值之一: true、false
public class HelloWorld {
public static void main(String[] args){
boolean a = true;
System.out.println(a);
}
}
1.3、字符串类型String
- String不是基本数据类型,属于引用数据类型
- 使用的方法与基本数据类型一致。例如: String str = “abcd”;
- String可以和8种基本数据类型变量做运算,且运算只能是连接运算: +
- 运算的结果仍然是String类型
2、运算符
运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等。
- 算数运算符
- 赋值运算符
- 比较运算符(关系运算符)
- 逻辑运算符
- 位运算符
- 三元运算符
2.1、算数运算符
public class HelloWorld {
public static void main(String[] args){
int a = 2;
//自增与自减一个道理
//int b = a++; //先赋值后运算
//int b = ++a;//先运算后赋值
//字符串拼接 +
String name = "张三";
System.out.println("姓名" + name);
}
}
2.2、赋值运算符
- 符号: ’ = ‘
- 当"="俩侧数据类型不一致时,可以使用自动类型转换或使用强制类型转换原则进行处理。大的转换为小的,需要进行强制转换。
- 支持连续赋值
- 扩展赋值运算符: +=,-=,*=,/=,%=
public class HelloWorld {
public static void main(String[] args){
int a,b;
//连续赋值
a=b=10;
System.out.println(a + b);
//强制转换
int i = 10;
byte m = (byte) i;
System.out.println(m);
//扩展赋值
int c = 10;
c +=2; // c = c+2
System.out.println(c );//12
short s1 = 10;
//s1 = s1 +2; 编译失败需要强转类型,因为java默认整型是int.
s1 += 2; //结论;不会改变变量本身的数据类型
System.out.println(s1);
}
}
2.3、比较运算符
- 比较运算符的结果都是boolean型,也就是要么是true,要么是false
- 比较运算符"==“不能误写成”="
public class HelloWorld {
public static void main(String[] args){
int i =3;
int j =4;
System.out.println(i==j);
System.out.println(i=j);//注意一个=是赋值.
}
}
2.4、逻辑运算符
&和&&
两个为真才为真
public class HelloWorld {
public static void main(String[] args){
// & 和 &&的区别
//& 当左边的条件为假时,还会继续往后执行,判断后面的条件。
//&& 当左边的条件为假时,不会在往后继续判断。
boolean a = false;
int b = 10;
if (a & (b++>0)){
System.out.println("今天天气晴");
}else {
System.out.println("天气不好");
}
System.out.println(b);
System.out.println("******************************");
int c = 10;
if (a && (c++>1)){
System.out.println("今天天气晴");
}else {
System.out.println("天气不好");
}
System.out.println(c);
}
}
| 和 ||
一个为真则为真
public class HelloWorld {
public static void main(String[] args){
// | 和 ||的区别
//| 当左边的条件为真时,还会继续往后执行,判断后面的条件。
//|| 当左边的条件为真时,不会在往后继续判断。
boolean a = true;
int b = 10;
if (a | (b++>0)){
System.out.println("今天天气晴");
}else {
System.out.println("天气不好");
}
System.out.println(b);
System.out.println("******************************");
int c = 10;
if (a || (c++>1)){
System.out.println("今天天气晴");
}else {
System.out.println("天气不好");
}
System.out.println(c);
}
}
2.5、位运算符(了解)
如何区别&,|,^是逻辑运算符,还是位运算符,取决于操作的数据类型,如果操作的是布尔类型就是逻辑运算符,如果是数值那就是位运算符。
位运算是直接对整数的二进制进行的计算
public class HelloWorld {
public static void main(String[] args) {
//结论
//1.位运算符操作的都是整型的数据
//2. <<:在一定范围内,每向左移1位,相当于*2
// >>:在一定范围内,每向右移1位,相当于/2
int i = 21;
System.out.println(i<<2); //84 21*2*2=84
System.out.println(i<<3); //168 21*2*2*2
}
}
2.6、三元运算符
public class HelloWorld {
public static void main(String[] args) {
//条件表达式的结果为boolean类型
//根据条件表达式真或假,决定执行表达式1,还是表达式2.
//如果为true,则执行表达式1,
//如果为false,则执行表达式2
//可以类比为if else 但是注意:表达式1和表达式2必须是同类型
int a = 10;
int b = 5;
int m = (a>b)?a:b;
System.out.println(m);
}
}
2.7、运算符的优先级(了解)
如果你想让谁先执行加个小括号()就可以
- 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序如表,上一行运算符优先于下一行
- 只有单目运算符、三元运算符、赋值运算符是从右向左运算的。
3、流程控制
3.1、if else基本使用
第一种: 如果表达式为真,则执行代码块,如果为假,则跳过代码块执行。
第二种: 如果表达式为真,则执行代码块1,如果为假,则执行代码块2。
第三种: 如果第一个表达式成立,则执行代码块,如果不成立,则往下继续执行表达式2,表达式2如果成立则执行代码块2,不成立则往下根据条件依次执行,都不成立,则执行else里面的代码块。
public class HelloWorld {
public static void main(String[] args) {
//分支结构中的if-else(条件判断结构)
//三种结构
/*
第一种
if(条件表达式){
执行代码块
}
第二种 二选一
if(条件表达式){
执行代码块
}else{
执行代码块
}
第三种: 多选一
if(条件表达式){
执行代码块
}else if(条件表达式){
执行代码块
}
....
else{
执行代码块
}
*/
//举例2 检查心跳是否正常
int hearBeats = 70;
if (hearBeats<60 || hearBeats>100){
System.out.println("需要去医院做进一步检查");
}
System.out.println("身体健康");
//举例2 判断天气是否炎热
int temperature = 38;
if (temperature>32){
System.out.println("今天天气非常炎热");
}else {
System.out.println("今天天气非常凉快");
}
/*
举例3 成绩
100 - 90 优秀
89 - 70 良好
69 - 60 及格
60以下及格
*/
int achievement = 69;
if (achievement >=90 && achievement<= 100){
System.out.println("成绩非常优秀");
}else if (achievement >=70 && achievement<= 89){
System.out.println("成绩良好");
}else if (achievement >=60 && achievement<=69){
System.out.println("及格,加油");
}else {
System.out.println("不及格");
}
}
}
如何从键盘获取不同的类型的变量 Scanner
public class SacnnerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);//System.in标准输入流
//注意提示信息要写在sc.nextInt前面,因为sc.nextInt要接收你输入的数据,才会往后执行。
System.out.print("年龄:");
int age = sc.nextInt(); //nextInt扫描输入下一个标记为 int。
//age用来接收键盘输入的int值
System.out.println(age);
System.out.print("姓名");
String name = sc.next();
System.out.println(name);
}
}
3.2、switch-case
说明
- 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,知道遇到break关键字或此switch-case结构末尾结束为止。
- break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构,也可以使用在其他循环语句中如 for、while、…
- switch结构中的表达式,只能是如下的六中数据类型之一: byte 、short 、char 、int 、枚举类型(JDK5.0新增) 、String 类型(JDK7.0新增)
- case之后只能声明常量。不能声明范围。
- break关键字是可选的。(不一定非要加上,根据情况而定。)
- default: 相当于if-else结构中的else
- 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
- 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。
public class SacnnerTest {
public static void main(String[] args) {
//判断楼梯在第几层,一共4层楼梯
Scanner sc = new Scanner(System.in);
System.out.print("请输入电梯层次: ");
int number = sc.nextInt();
switch (number){
case 1:
System.out.println("在第一层电梯");
break;//中断的意思,如果不加会一直往下执行。
case 2:
System.out.println("在第二层电梯");
break;
case 3:
System.out.println("在第三层电梯");
break;
case 4:
System.out.println("在第四层电梯");
break;
default:
System.out.println("到顶层了");
break;
}
}
}
3.3、for循环
for循环结构的使用
一、循环结构的4个要素
- 初始化条件
- 循环条件 ---------------->是boolean类型
- 循环体
- 迭代条件
二、for循环的结构
for(1; 2; 4){
3;
}
执行过程: 1 - 2 - 3 - 4 -2 -3 -4…
public class SacnnerTest {
public static void main(String[] args) {
//循环5个HelloWolrd
for (int i=1; i<=5; i++){
System.out.println("HelloWorld");
}
//例题:遍历100以内的偶数
for (int i=1; i<=100; i++){
if (i % 2 == 0){
System.out.println(i);
}
}
}
}
3.4、while循环
一、循环结构的4个要素
- 初始化条件
- 循环条件 ---------------->是boolean类型
- 循环体
- 迭代条件
二、while循环的结构
1
while(2){
3;
4;
}
执行过程: 1 - 2 -3 -4 -2 -3 -4…
说明
- 写while循环千万小心不要丢了迭代条件。一旦丢了,就可能导致死循环!
- 我们写程序,要避免出现死循环。
- for循环和while循环是可以相互转换的。
- 区别:for循环和while循环的初始化条件部分的作用范围不同。
public class SacnnerTest {
public static void main(String[] args) {
//列出100以内的偶数
int i = 1;
while (i<=100){
if (i%2==0){
System.out.println(i);
}
i++;
}
}
}
补充
while(true){
}
for(空的;空的;){
}
死循环,会一直执行。
3.5、do-while循环
一、循环结构的4个要素
- 初始化条件
- 循环条件 ---------------->是boolean类型
- 循环体
- 迭代条件
二、do-while循环的结构
1
do{
3;
4;
}while(2);
执行过程: 1 - 3 - 4 - 2 - 3 - 4 - 2…
说明
- do-while循环至少会执行一次循环体!
public class SacnnerTest {
public static void main(String[] args) {
//列出100以内的偶数
int i = 1;
do {
if (i % 2 ==0){
System.out.println(i);
}
i++;
}while (i<=100);
}
}
3.6、嵌套循环
嵌套循环的使用
- 嵌套循环: 将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环。
说明
- 内层循环结构遍历一遍,只相当于外层循环循环体执行一次
- 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次
技巧:外层循环控制行数,内层循环控制列数。
九九乘法表
public class SacnnerTest {
public static void main(String[] args) {
for (int i=1; i<=9 ; i++){
for (int j=1; j<=i; j++){
System.out.print(i +"*" + j + "=" +(i*j) + '\t');
}
System.out.println();
}
}
}
执行顺序
3.7、特殊关键字的使用break、continue
break和continue关键字的使用
break
使用的范围
- switch-case
- 循环结构中
循环中使用的作用
- 结束当前循环(后面在循环内的执行语句不会在执行)
continue
使用范围
- 循环结构中
循环中使用的作用
- 结束当次循环(本次循环结束)
break和continue相同点是: 后面不允许出现执行语句,例如
public class SacnnerTest {
public static void main(String[] args) {
//break
for (int i=1; i<=9; i++){
if (i % 4 ==0){
break; //执行了break,那么后面所有的在for循环里面执行语句都将终止.
}
System.out.println(i);// 1.2.3
}
//continue
for (int i=1; i<=9; i++){
if (i % 4 ==0){
continue; //执行了continue,那么本次循环就会结束。
}
System.out.println(i);// 1.2.3.5.6.7.9
}
}
}
嵌套循环使用break
- 默认跳出包裹此关键字最近的一层循环
嵌套循环使用continue
- 默认结束包裹此关键字最近的一层循环
for (int i=1; i<4; i++){
for (int j=1; j<=9; j++){
if (j%2==0){
continue;
}
System.out.println(j);
}
}
通过标识结束指定循环