目录
2.9.2 int 和 long 、byte 和 int 的混合运算
1.main方法
public class VariableAndType {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
代码解释:
(1)public是访问限定符,表示公有访问。访问限定符还包括protected和private;
(2)class是用于定义类的关键字,VariableAndType是类的名称;
(3)Java中main函数的固定写法是public static void main(String args[]) ,函数也称为方法,方法必须包含在类之内;
(4)String[ ] args是main函数的形参,是一个数组。
在C语言中,以整型元素数组为例,表示数组的方法为:int arr[ ] ,而在Java中表示为int [ ] arr;
(5)System.out.println()即是打印语句,Java中打印语句有三种表达方式:
System.out.println("Hello World"); //打印换行
System.out.print("Hello Java"); //打印不换行
System.out.printf("%d",10); //带格式描述的数据输出
(6)如果一个类是public修饰的,那么类名必须与文件名一致,一般情况下一个Java类只包含一个类;
运行结果如下:
2.变量与类型
Java中数据类型的分类:
2.1 整型变量
public static void main(String[] args){
int a=10; //4 byte
System.out.printf("a="+a);
}
(1)无论操作系统多少位,int类型变量都占4个字节,32个比特位;
(2)Java中没有无符号整型类型,即没有unsigned int类型数据,统一都是有符号的;
(3)试运行以下代码:
public static void main(String[] args){
int a=10; //4 byte
System.out.println(Integer.MAX_VALUE); //int类型数据的最小值
System.out.println(Integer.MIN_VALUE); //int类型数据的最大值
}
输出结果为:
一个int类型数据1个符号位,31个数值位,取值范围为-2^31~2^31-1,
即(-2147483648~-2,147,483,648);
2.2 短整型变量
short b=10;
System.out.println(a);
shrot类型变量占2个字节,16个比特位,取值范围为-2^-15~2^15-1;
2.3 布尔类型变量
boolean c = true;
System.out.println(c);
(1)与C语言0假非零真不同,Java中布尔类型变量的只有true和false两个取值;
(2)在JVM的规范中并没有规定布尔类型的大小,有些JVM的实现是占1个字节,有些是占1个比特位;
2.4 字符串类型变量
String str = "hello";
System.out.println(str);
(1)在C语言中没有字符串变量,但是在Java中存在字符串类型;
(2)单引号表示单个字符,双引号表示一串字符串;
(3)String不是基本类型,是一个引用类型;
(4)字符串的+操作表示字符串的拼接:
System.out.println("hello"+" "+"world");
System.out.println("hello"+10+20);
System.out.println(10+20+"hello");
输出结果为:
当字符串+字符串时,编译器会将字符串进行拼接;
当字符串+其他数据类型时,编译器会将其他数据类型作为字符串进行处理;
当其他数据类型+字符串时,编译器会按照从左到右依次计算的方式先进行其他数据类型的计算再与字符串进行拼接;
(5)字符串中一些特定的不便于直接输出的字符可能需要转义:
String s1 = "hello";
String s2 = "\\hello\\";
String s3 = "\\\\hello\\\\";
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
输出结果为:
常见转义字符如下:
转义字符 | 解释与含义 |
\n | 换行 |
\t | 水平制表符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
2.5 变量的作用域
Java中的变量分类:
{
int x = 10;
System.out.println(x); // 编译通过;
}
System.out.println(x); // 编译失败, 找不到变量 x.
}
运行上文代码,报错如下:
2.6 变量的命名规则
(1)硬性指标:
①、一个变量名只能包含数字、字母、下划线和美元符号;
② 、数字不能开头;
③、变量名大小写敏感,Num与num是两个不同的变量;
(2)软性指标:
①、建议不要使用拼音、美元符号等作为变量名;
②、变量名推荐使用小驼峰法如:maxNum;
2.7 常量
final int VALUE = 10;
System.out.println(VALUE);
(1)常量分为字面值常量与final修饰的变量两种;
(2)与C语言const修饰变量表示常量逻辑相同,在Java中final修饰变量表示常量,只能进行一次初始化且进行初始化后只能读不可写;
(3)建议常量命名采取大写方式;
(4)变量在程序运行时才会将数值与变量名进行对应代入,但常量是在程序编译时就已确定常量的数值;
2.8 类型转换
2.8.1 int 和long \ double 相互赋值
1、将int类型赋值给long \ double类型:
int a = 10;
long b = a;
double c = b;
System.out.println("b="+b);
System.out.println("c="+c);
输出结果为:
将一个4字节的int类型数据赋值给8个字节的long类型,编译器编译运行通过;
2、将long \ double类型赋值给int类型:
代码1:
long c = 20;
int d = c;
报错如下:
代码2:
double e = 30.0;
int f = e;
报错如下:
将一个8字节的long或double类型数据赋值给4个字节的int类型,为了防止数据丢失会报错;
2.8.2 int 和 boolean 相互赋值
1、将 int 类型赋值给 boolean 类型
int g = 10;
boolean h = g;
报错如下:
2、将 boolean 类型赋值给 int 类型
boolean i = true;
int j = i;
报错如下:
int 类型与 boolean 无法进行类型转换与相互赋值的;
2.8.3 int 字面值常量给 byte 赋值
byte k = 100;
(1)byte类型数据取值范围是-128~127,如果数据大小在该范围之内即可成功赋值,如果超过该范围就会报错:
byte l = 130;
报错如下:
(总结:1.不同数字类型的变量之间赋值,表示范围更小的类型可以隐式转换成范围较大的类型;
2.如果需要将大范围的类型赋值给小范围类型变量,需要进行强制类型转换,但有可能会造成精度损失;
3.将一个字面值常量进行赋值时,Java会自动针对数字范围进行检查;
2.9 数值类型提升
2.9.1 byte 和 byte 的运算
试运行以下代码:
byte m = 1;
byte n = 2;
byte o = m + n;
报错如下:
由于计算机CPU通常是按照4个字节为单位从内存中读取数据,为了硬件实现方便,诸如byte、short等低于4个字节的类型数据进行运算时,会将其进行类型提升,byte类型提升为int类型,m+n时会将二者均提升为int类型,结果也为int类型,此时再将该值赋值给一个byte类型的变量,编译器就会报错,需要进行强制类型转换即可正常编译运行:
byte m = 1;
byte n = 2;
byte o = (byte)(m + n);
System.out.println(o);
2.9.2 int 和 long 、byte 和 int 的混合运算
int i1 = 10;
long l1 = 20;
int i2 = i1+l1;
报错如下:
不同类型的数据进行混合运算,范围小的也会先提升为范围大的,再没有超过int类型数据大小范围的前提下,也需要进行强制类型转换才可以正常编译运行:
int i1 = 10;
long l1 = 20;
int i2 = (int)(i1+l1);
System.out.println(i2);
2.10 int 和 String 之间的相互转换
2.10.1 将 String 类型转换为 int 类型
String str = "123";
int ret= Integer.valueOf(str);
System.out.println(ret+10);
输出结果为:
2.10.2 将 int 类型转换为 String 类型
试运行以下代码:
int num = 10;
String ret = String.valueOf(num);
System.out.println(ret+20);
输出结果为:
注:8种基本类型的包装类都有与String类似的功能,int 类型的包装类名为Integer,char 类型的包装类名为Character,其余类型的包装类名均为首字母大写的数据类型名;
3. 运算符
3.1 算数运算符
算术运算符最常用的是基本四则运算的+ - * /运算符,此处仅再解对除法进行解释。
(1)int / int 结果还是int,只能保存整数部分结果,需要使用double进行计算;
(2)0不能作除数:
(3)% 表示取模,不仅可以对int 型数据进行取模,也可以对double型数据进行取模:
System.out.println(10%3);
System.out.println(11.5%2.0);
System.out.println(-10%3);
System.out.println(10%-3);
System.out.println(-10%-3);
输出结果为:
(4)增量赋值运算符 += -= *= /= %=
① 非符合运算符形式的赋值运算符的整型提升问题:
short b = 11;
b = b + 2;
System.out.println("b = "+b);
报错如下:
需要进行强制类型转换才可运行:
short b = 11;
b =(short) (b + 2);
System.out.println("b = "+b);
② 符合运算符会对跨类型可运算变量的值自动进行强制类型转换:
即下文代码是可运行的:
b += 2;
System.out.println("b = "+b);
(5)自增 / 自减运算符 ++ --
int a=10;
int a2=a++; //先使用后++
System.out.println("a="+a);
System.out.println("a2="+a2);
int b=10;
int b2=++b; //先++后使用
System.out.println("b="+b);
System.out.println("b2="+b2);
输出结果如下:
3.2 关系运算符
(1)关系运算符主要有6个: == != < > <= >= ;
(2)使用关系运算符的运算结果都是一个布尔值;
int a=10;
int b=20;
System.out.println(a==b);
System.out.println(a!=b);
System.out.println(a>b);
System.out.println(a<b);
System.out.println(a<=b);
System.out.println(a>=b);
输出结果如下:
3.3 逻辑运算符
(1)逻辑运算符主要有三种 ①逻辑与&& ②逻辑或 || ③ 逻辑非 !;
(2)逻辑运算符的操作数和返回值类型都是boolean;
(3)逻辑与 和 逻辑或 运算符支持短路求值,即:
在判断逻辑与(表达式1&&表达式2)时,若表达式1为假,会不再进行表达式2的判断直接输出假;
在判断逻辑或(表达式1||表达式2)时,若表达式1为真,会不再进行表达式2的判断直接输出真;
示例1:逻辑与一假则假,逻辑或一真则真,逻辑非取反
int a=10;
int b=20;
int c=30;
System.out.println(a<b&&b<c);
System.out.println(a>b||b>c);
System.out.println(!(a<b));
输出结果如下:
示例2:逻辑运算符的短路求值:
System.out.println(10>20&&10/0==0);
System.out.println(10<20||10/0==0);
输出结果为:
运行上文代码没有报错也印证了逻辑运算符的短路求值设计;
3.4 位运算符
java中对数据的操作的最小单位不是字节,而是二进制位;
位运算符主要有4个:& | ~ ^ ;
按位与 &:对应位都是1则结果就是1;
按位或 | :对应位如果有1则结果就是1;
按位异或 ^ :对应位相同为0不同为1;
按位取反 ~:如果该位为0则转为1,若为1则转为0;
3.5 移位运算
移位运算符有三个: 左移<< 右移>> 无符号右移>>>
(1)左移:弃最左位数字,最右位补0;
左移一位:0000 1011 ——> 0001 0110 (11——>22)即11*2^1;
再左移一位:0001 0110 ——> 0010 1100 (22——>44)即11*2^2;
左移相当于乘法;
(2)右移:弃最右位数字,最左位正数补0负数补1;
右移一位:0000 1011 ——> 0000 0101 (11——>5)即11/2^1;
再右移一位: 0000 0101——> 0000 0010 (5——>2)即11/2^2;
右移相当于除法;
但负数是特殊的,如-1,其补码为1111 1111,右移一位补符号位1,为1111 1111,结果仍然是-1;
移动负数位或移动位数过大都没有意义;
(3)无符号右移:弃最右位数字,不论正负均补0;
3.6 条件运算符
条件运算符即三目运算符:表达式1?表达式2:表达式3
表达式1成立时返回表达式2,否则返回表达式3,其中表达式1必须返回一个布尔值;
代码示例:
int a=10;
int b=20;
int max=a>b?a:b;
System.out.println(max);
输出结果为:
4.注释
Java中有3种注释:
(1)单行注释:// …… (使用最多)
(2)多行注释:/* …… */
(3)文档注释:/** …… */ (常用于方法和类至上描述方法和类的作用),可以用于自动生成文档;