# Java基础语法
变量和表达式
程序中的变量用于存储诸如数字和字母这样的数据。它们可以被认为是一种容器,变量中的数字、字母以及其他数据项称为变量的值。
在程序中使用某个变量之前,必须陈述每一个变量的一些基本信息。需要知道变量的名称、要为该变量保留多少计算机内存、变量中的数据项如何编码为一串的0和1。
变量声明告诉计算机保存什么类型的数据。由于不同类型的数据以不同的方式保存在计算机中,计算机必须知道变量的类型,从而知道如何在计算机内存中存储和提取变量的值。
变量声明示例:
int a,b,c;
变量声明组成:类型名称、一系列变量名称、各名称之间用逗号隔开,最后分号结束变量的声明。
数据类型
数据类型指定一组值以及其操作。java语言是一个强调数据类型的语言,在声明任何变量时,必须将该变量定义为一种数据类型。
java拥有两种主要的数据类型:类类型和基本类型。
类类型是一种用于类的对象的数据类型。基本类型是一个不可分解的值。
java的基本数据类型:
byte用一个字节来表示整数值
拥有十进制、二进制、八进制,但无论采用哪种形式,输出控制台上,系统都会将其自动转换为十进制。
public class Byte {
public static void main(String[] args) {
byte x = 22; //十进制
byte y =022 ; //八进制
byte z = 0x22 ;//十六进制
//输出相应的值
System.out.println("x= " + x);
System.out.println("y = " + y);
System.out.println("z = " + z);
}
}
运行效果:
run:
x= 22
y = 18
z = 34
成功构建 (总时间: 0 秒)
短整型
程序:
public class Short {
public static void main(String[] args) {
short x = 22; //十进制
short y =022 ; //八进制
short z = 0x22 ;//十六进制
//输出相应的值
System.out.println("x= " + x);
System.out.println("y = " + y);
System.out.println("z = " + z);
}
}
运行效果:
run:
x= 22
y = 18
z = 34
成功构建 (总时间: 0 秒)
后面的与之类似,其中long类型需要在数据后面添加L标志,float类型需要添加F标志。
在java中可以方便地取得数据类型的最大值和最小值。如取得int数据类型范围的最大值:Integer.MAX_VALUE; 取得int数据类型的最小值:Integer.MIN_VALUE。
数据的极限操作:
public class DataOperator {
public static void main(String[] args) {
int max = Integer.MAX_VALUE; //最大值
int min = Integer.MIN_VALUE; //最小值
System.out.println(max);
System.out.println(min);
//数据溢出:最大值 + 1 = 最小值
System.out.println(max+1);
System.out.println(max+2);
//数据溢出: 最小值 - 1 = 最大值
System.out.println(min-1);
}
}
程序运行结果:
run:
2147483647
-2147483648
-2147483648
-2147483647
2147483647
成功构建 (总时间: 0 秒)
解决数据溢出的主要方法可以通过扩大数据范围来完成。比int大的范围是long。
public class DataOperator1 {
public static void main(String[] args) {
int max = Integer.MAX_VALUE; //最大值
int min = Integer.MIN_VALUE; //最小值
System.out.println(max);
System.out.println(min);
//数据溢出:最大值 + 1 = 最小值
System.out.println(max+1L);
System.out.println(max+2);
//数据溢出: 最小值 - 1 = 最大值
System.out.println(min-(long)1);
}
}
结果:
run:
2147483647
-2147483648
2147483648
-2147483647
-2147483649
成功构建 (总时间: 0 秒)
本程序中将每一个操作中一个int类型数据转变为了long型数据,这样程序在处理的时候就会发生数据的转型,最终变为了对long型数据进行数学操作,从而可以很好地解决数据溢出的问题。
而在java中,各个基本数据类型的转型操作流程为:
- 范围小和范围大的两种数据操作,范围小的数据类型会自动变为范围大的数据类型,如 int + long = long。
- 如果要把范围大的数据类型转变为数据类型小的数据,则必须强制类型转换,如 int = (int)long。
问题:如果要强制转换的数据类型的数据大于接收类型会怎样?如int类型转换成byte类型,此时int变量保存的数据值已经大于byte的数据范围(-128~127)了,则byte的内容会是多少?
答案依然会存在数据溢出。简单的验证:
public class TestIntToByte {
public static void main(String[] args) {
int x = 200;
byte b = (byte)x; //强制类型转换
System.out.println(b);
}
}
结果:
run:
-56
成功构建 (总时间: 0 秒)
在开发中如果给出了两个整型数据进行除法计算,会出现结果不正确的情况。如:
public class IntChuInt {
public static void main(String[] args) {
System.out.println(9/2);
}
}
结果为:
run:
4
这是因为计算的都是两个整型数据,所以计算结果还是int,而int不包含小数位,小数位如果存在则直接取消,想要得出正确结果的话只需将其中一个数据转换成double或float型。
字符型(char)
java中使用单引号''定义的内容表示一个字符,使用char来完成定义字符类型。另外在java语言中char和int之间是可以相互转换的。
- 大写字母范围:65-90
- 小写字母范围:97-122
大小写字母之间差了32
定义字符并完成与int完成转换。
public class IntToChar {
public static void main(String[] args) {
char c = 'A'; //定义一个字符
int x = c; //char转换成int
x += 32; //大写字母转为小写字母
char temp = (char) x; //int 类型强制转换成char
System.out.println(temp);
}
}
结果为:
run:
a
问题:char型变量中能否保存一个中文汉字?为什么
能够存储一个中文,因为java中以Unicode编码,一个char占16个字节,所以可以保存一个中文。
布尔型(boolean)
布尔型主要表示的是一种逻辑判断,对布尔型数据只有两种取值:true和false。
在许多语言中,布尔型也使用0或非0来表示,但在java中并无此概念
字符串(String)
java中使用String可以定义字符串变量,但String属于一个类(引用型数据),字符串是使用双引号定义的一串数据。
**任何数据类型遇到String变量的“+”操作都会自动变为String型数据。
运算符
java中的语句有很多形式,表达式就是其中一种,表达式由操作数和运算符组成。
java运算符:
运算符的优先级:
三目运算符:
格式: 数据类型 变量 = 布尔表达式?满足条件的内容:不满足条件设置的内容;
范例:将两个int型中数据大的数值赋给变量
public class maxSanMu {
public static void main(String[] args) {
int x = 10;
int y = 20;
int result = x>y?x:y;
System.out.println(result);
}
}
结果:
run:
20
逻辑运算符
逻辑运算一共包含三种:与、或、非
“与”操作要求所有的判断条件都满足,在多个判断条件中,如果有一个条件不满足,那么不需要向后判断,结果一定是false。
“或”操作,若干条件一起判断,其中只要一个范围true,结果就是true,只有都返回false结果才为false。
位运算符
位运算在java中有:&、^、~、>>、<<、>>>,而所有的位运算都是采用二进制数据进行操作的。