JavaSe基础篇2
1. 数据类型转换
1.1 数据类型转换分类
数据类型转换包括以下两种类型:
- 自动类型提升:小范围类型的数据赋值给大范围类型的变量
- 强制类型转换:大范围类型的数据赋值给小范围类型的变量(可能会造成数据损失精度)
注意点:
- 布尔类型不参与类型转换
- 变量参与运算时,最后会统一提升成为最大的类型
- byte,short,char类型运算时,最后结果类型会提升为int类型
- 在为byte,short,char类型赋值时,只要是其范围内的“常量”都能成功赋值
- 常量看范围,变量看类型
- 可表示数值大小来看,byte<short<int<long<float<double
- char类型参与四则运算,会先转为字符
- 布尔类型不参与类型转换
1.2 强制类型转换
小范围类型 变量 = (小范围类型)大范围类型数据
//强制类型转换
byte a = (byte)129;
System.out.println(a); //输出-128
//char
char ch = 'a';
short b = (short)(ch + 1);
System.out.println(b); //输出98
//long
long money = (long)12 * 1000000000;//或者long money = 12 * 1000000000L;
System.out.println(money);
注:如果数值本身已超过强制转换类型的范围,输出的结果并非去除超出的部分,而是以下图方式发生改变。
2. 运算符
2.1 算数运算符
算术运算符即数学中的“+”,“-”,“*”,“/”加上一个“%”。
-
“+”:代表正号,加法运算,同时也能用作字符串的连接符使用。
(当运算符左右两边一旦出现字符串,+就作为字符串的连接符使用,最终把两边数据拼接,得到一个新的字符串)
-
“-”:负号,减法运算
-
“*”:乘法
-
“/”:除法,取整
-
“%”:求余数,当第一个操作数小于第二个操作数时,结果为第一个操作数
int a = 1+3;
int b = 1;
int c = 5;
System.out.println("a=" + a); //"a=4"
System.out.println("b = "+b); //"b = 1"
System.out.println("hello"+'a'+1); // "helloa1"
System.out.println('a'+1+"hello"); // "98hello"
System.out.println(5/1); //5
System.out.println(5%1); //0
System.out.println(1%5); //1
2.2 单目/一元运算符
- “++”:自增即自身+1
- “–”:自减即自身-1
当操作数只影响自身时,“++”“–”放在操作数前后都是自身加减1。
当操作数影响别人时,“++”“–”放在操作数前是先自身变化再做运算;“++”“–”放在操作数后是先做运算再自身变化。
int a = 3;
//影响自己
a++; //a= a +1;
System.out.println(a); //4
--a; //a=a-1;
System.out.println(a); //3
//影响别人
int b = a++; //1)先做赋值 int b = a; 2)再自身+1 a++;
System.out.println(a); //4
System.out.println(b); //3
int c = b++ + 5;
System.out.println(b); //2
System.out.println(c); //6
2.3 赋值运算符
-
基础赋值运算符“=”:等号是java中唯一一个自右向左运算的符号
-
扩展赋值运算符(算数运算符+基础赋值运算符):
例如+=:a+=b即a=a+b
同理还有“-=”,“*=”,“/=”,“%=”
扩展赋值运算符的优点:执行效率高,帮助自动做强制类型转换(++也可以实现自动强制类型转换)
int result = 0;
int zhang = 100;
result += zhang ; //result = result + zhang;
int wang = 98;
result += wang; //result = result + wang;
2.4 比较/关系运算符
比较运算符得到的结果为boolean类型,有以下两种:
- “>”,“<”,“>=”,“<=”:用于基本数据类型的比较
- “==”,“!=”:用于基本数据类型和引用数据类型的比较
int a = 3;
int b = 4;
System.out.println(a>b); //false
System.out.println(a+1<=b); //true
System.out.println("zhangsan" != "lisi"); //true
System.out.println(a+3 == b+2); //true
boolean flag = ++a == b;
System.out.println(flag);//true
2.5 逻辑运算符
逻辑运算符的操作数只能为值是boolean类型的表达式或者值,有以下几种:
- "&"与:一个为false就是false,两个都为true才是true
- "|"或:一个为true就是true,两个都为false才是false
- "^"异或:相同为false,不同为true
- "!"非(取反):!true = false,!false = true
- 短路:如果第一个操作数已经能够决定最终的结果了,第二个操作数就不看了。短路分为"&&"(短路与)和"||"(短路或)
System.out.println(true&false); //false
System.out.println(true|false); //true
System.out.println(true^false); //true
System.out.println(true^true); //false
System.out.println(!false); //true
System.out.println(true&&false); //false
System.out.println(true&&true); //true
2.6 条件运算符
表达式?值1:值2(表达式值为true结果为值1,表达式结果为false结果为值2)
int a = 5;
int b = 6;
int c = 4;
//求a与b的最大值,这个数据值
int result = a>b ? a : b;
System.out.println(result);
//判断a是否为偶数
str = a % 2 == 0 ? "偶数" : "奇数";
System.out.println(str);
//有三个变量,通过条件运算符,求出最大的值
int max = a > b && a > c ? a : (b > c ? b : c);
System.out.println(max);
2.7 运算符优先级
记住一个口诀:单目算数位关系,逻辑三目后赋值。单目运算优先级最高,赋值运算优先级最低。
//运算符优先级
a=5 b=6
boolean x = a < b ?( ++a * 2 > b | (a*=2) ==12 ): (a < b);
System.out.println(x); //true
System.out.println(a); //6
3. Scanner类
Scanner类接收用户键盘输入的内容,具体使用步骤如下:
-
导包:
import java.util.Scanner;
-
构建一个Scanner类型的变量:
Scanner sc = new Scanner(System.in);
-
使用功能:
- 引用.nextByte() 接收用户输入的byte类型的数据
- 引用.nextShort() 接收用户输入的short类型的数据
- 引用.nextInt() 接收用户输入的int类型的数据
- 引用.nextLong() 接收用户输入的Long类型的数据
- 引用.nextFloat() 接收用户输入的float类型的数据
- 引用.nextDobule() 接收用户输入的double类型的数据
- 引用.next() 接收用户输入的字符串,从有效字符开始接收,遇到空格|tab不再继续接收内容,知道遇到enter结束功能
- 引用.nextLine() 接收一整的内容,知道遇到enter结束功能
-
关闭:
sc.close();
在当前类中使用完毕Scanner之后关闭资源,这是良好的开发习惯
//1.导包
//2.构建一个Scanner类型的变量
Scanner sc = new Scanner(System.in);
//3.使用功能
System.out.println("请输入您的年龄");
int age = sc.nextInt();
System.out.println(age);
System.out.println("请输入您的月薪");
double salary = sc.nextDouble();
System.out.println(salary);
System.out.println("请输入您的名字");
String name = sc.next();
System.out.println(name);
//遗留anter问题
sc.nextLine();
System.out.println("请输入您的用户名");
String username = sc.nextLine();
System.out.println(username);
//关闭
sc.close();