Java语言基础
变量
变量的概念
计算机内存中的一块存储空间,是存储数据的基本单元用于存储在程序执行中的数据
变量的定义方式
-
先声明,再赋值(常用)
数据类型 变量名;int i;
变量名=值;i = 100;
-
声明并赋值(常用)
数据类型 变量名=值;
int i = 100;
-
多个同类型变量的声明与赋值
数据类型 变量1,变量2=值,变量3;
int i,j=100,k;
(java是强类型语言,变量的类型必须与数据的类型一致)
注意事项
- 变量需要先赋值在使用
- 在同一个作用域,变量名不能重名
- 注意取值范围不要出现越界问题( byte范围:-128~127 byte c = 300;—越界 )
数据类型
- 作用:用于约束所存储数值的范围
- 数据类型分类
- 基本数据类型:byte short int long float double boolean char
- 引用数据类型:String(常用-存字符串)
基本数据类型
- 整数 (int 为整数的默认类型,如需要long类型赋值较大整数时,需在后面追加L)
- 小数/浮点数**(double 为浮点数的默认类型,如需要float类型赋值时,需在后面追加F)**
-
布尔
- 可直接赋值true/false
- 可赋值一个结果为true/false的表达式
- 布尔不能参与算数运算
-
字符
Unicode中每个字符都对应一个二进制数,可以使用多种方式赋值
- 字符赋值:char c = ‘A’;(通过’'为字符赋值)
- 整数赋值:char b= 65;(通过十进制数65在字符集中对应的字符赋值)
- 进制赋值:char a = ‘\u0041’;(通过十六进制数41在字符集中对应的字符赋值)
引用数据类型
- String
转义字符
Java通过转义字符来解决特殊字符的输出
- \n:换行
- \t:水平制表
- \’:输出一个单引号
- \":输出一个双引号
- \\:输出一个\
class ZhuangYi{
public static void main(String[] args){
/*转义字符: \n \t \' \" \\ */
System.out.print("姓名: \n");
System.out.println("年\'龄:20;\t\"爱好\":睡\\觉");
//姓名:
//年'龄:20; "爱好":睡\觉
}
}
数据间的类型转换
自动类型转换
- 两种类型相互兼容
- 目标取值范围大于原类型
/* 数据类型的自动转换
数据间的类型兼容 目标数据类型范围大于源数据类型
*/
// 1.整数整数间的转换
byte b = 30;
short s = b;
// 2.整数与浮点数间的转换
double d = s;
// 3.整数与字符间的转换
char c = 'C';
int i = c;
System.out.println("自动类型转换:");
System.out.println(s); //30
System.out.println(d); //30.0
System.out.println(i); //67
强制类型转换
- 两种类型相互兼容
- 目标类型范围小于原类型
/* 数据类型的强制转换
数据间的类型兼容 源数据类型范围大于目标数据类型
*/
// 1.整数整数间的转换
int i2 = 178;
byte b2 = (byte)i2;
// 2.整数与浮点数间的转换
double d2 = 100.02;
int i3 = (int)d2;
// 3.整数与字符间的转换
int i4 = 99;
char c2 = (char)i4;
System.out.println("强制类型转换:");
System.out.println(b2); //-79 符号位变化,为负数
System.out.println(i3); //100
System.out.println(c2); //c
强制类型转换规则
-
整数长度足够,数据完整
int i = 100;byte b = (byte) i; //b=100
-
整数长度不够,数据截断
int i = 10000;byte b = (byte) i; //b=16(符号位变化,可能为负数)
-
小数转整数,数据截断
double d =2.5; int i =(int)d; //i =2(小数位舍弃)
-
字符整数互转,数据完整
char c = 65; int i = c; //i =65
-
Boolean 取值为true/false,不可与其他类型转换
运算符
算数运算符
+ - * / % ++ --(重点)
注意: 整数相除,取整;有一边为小数,结果为小数,有小数则为double型
5.0/2=2.5(输出结果为double型)
5/2=2(输出结果为int型)
a++: 后置自增:先计算表达式的值;变量值后+1(后自增,先用再增)
**++a:前置自增:**变量值先+1,;再计算表达式的值(前自增,先增再用)
a–:后置自减:先计算表达式的值;变量值后-1 (后自减,先用再减)
–a:前置自减:变量值先-1,;再计算表达式的值(前自减,先减再用)
int a=10,b=2;
/* 算数运算符 + - * /% */
System.out.println("--------------");
System.out.println(a+b); //12
System.out.println(a-b); //8
System.out.println(a*b); //20
System.out.println(a/b); //5
System.out.println(a%b); //0
/* 一元运算符 ++ --*/
// i++ 先使用i 再进行+1操作
// ++i 先进行+1操作 再使用i
System.out.println("--------------");
System.out.println(a++); //10
System.out.println(b--); //2
System.out.println(++a); //12
System.out.println(--b); //0
赋值运算符
*=直接赋值 +=求和后赋值 -=求差后赋值 =求积后赋值 /=求商后赋值 %=求余后赋值
/* 赋值运算符 += -= *= /= %= = */
int c =2;
int d =0; d+=3;
int e =0; e-=3;
int f =0; f*=3;
int g =0; g/=3;
int h =1; h%=3;
int i =0; i=3;
System.out.println("--------------");
System.out.println(d); //3
System.out.println(e); //-3
System.out.println(f); //0
System.out.println(g); //0
System.out.println(h); //1
System.out.println(i); //3
关系运算符
>大于 <小于 ==等于 >=大于等于 <=小于等于 !=不等于
运算后得到的是一个Boolean值
/* 关系运算符 > < == >= <= !=*/
// 返回值为boolean类型
int j=1,k=2;
System.out.println("--------------");
System.out.println(j<k); //true
System.out.println(j>k); //false
System.out.println(j==k); //false
System.out.println(j>=k); //false
System.out.println(j<=k); //true
System.out.println(j!=k); //true
逻辑运算符
&&与 ||或 !非
逻辑与& VS 短路与&&
逻辑与:当操作数1为false时,仍然会执行操作数2
短路与:当操作数1为false时,不会执行操作数2—效率高
逻辑或| VS 短路或||
逻辑或: 当操作数1为true时,仍然会执行操作数2
短路或: 当操作数1为true时,不会执行操作数2—效率高
/* 逻辑运算符 && || ! 对boolean 类型的数据进行运算 得到的结果也是boolean类型的*/
int l=10,m=20;
// && 与 一假即假
System.out.println("--------------");
System.out.println(l<m&&m>l); //true
System.out.println(l>m&&m>l); //false
// || 或 一真即真
System.out.println(l<m||m>l); //true
System.out.println(l>m||m>l); //true
System.out.println(l>m||m<l); //false
// ! 非 真假颠倒
// 操作对象是boolean类型. 所以表达式需要用括号包裹
System.out.println(!(l>m)&&m>l); //true
System.out.println(!(l>m)||m<l); //true
三目运算符
语法:数据类型 变量名 = boolean表达式?结果一:结果二
/** 三元运算符 */
class YunSF2{
public static void main(String[] args){
/* 语法 数据类型 变量名 = boolean表达式?结果一:结果二*/
int grade = 89;
int grade2 = 60;
String s = grade>=80?"送一层楼":"送练习题";
String s2 = grade2>=80?"送一层楼":"送练习题";
double d = grade>=80?2:2.2;
System.out.println(s); //送一层楼
System.out.println(s2); //送练习题
System.out.println(d); //2.0
}
}
优先级
()>算数运算符>关系运算符>逻辑运算符>赋值运算符
表达式
使用运算符连接的变量或字面值,并得到一个结果
int a = 5 + 6; // 5+6: 算术表达式:算术运算符参与运算的式子
自动类型提升
-
进行算术运算时:
- 两个操作数有一个为double,结果提升为double
- 操作数中没有double,有float,结果提升为float
- 操作数中没有float,有long,结果提升为long
- 操作数中没有long,有int,结果提升为int
- 操作数中没有int,均为byte或short,结果提升为int
-
特殊:任何类型与String相加(+)实为拼接,结果自动提升为String。
控制台输入
导包语法
import 包名.类名 //将外部class文件的功能引入到自身文件中
语法顺序
- 导包:import java.util.Scanner;
- 声明变量:Scanner input = new Scanner(System.in);
- 使用Scanner中方法
- .nextInt() //获得整数
- .nextDouble() //获得小数
- .next() //获得字符串
- .next().charAt(0) //获得单个字符