1.数据类型
1.1 数据类型分类
Java中的数据类型分为基本数据类型和引用数据类型
基本数据类型:
是Java语言中内置的类型,分别是整数类型、浮点类型、字符类型、布尔类型。这四类基本类型是最简单、最基础的类型。
引用数据类型:
是强大的数据类型,它是基于基本数据类型创建的。JavaSE中提供了一个超级类库,类库中包含了近万种引用数据类型。不过现在我们先要学习的是基本类型!
1.2 基本数据类型表示
整数类型:
十进制表示方式:正常数字 如 13、25等
二进制表示方式:以0b(0B)开头 如0b1011 、0B1001
八进制表示方式:以0开头 如01、07、0721
十六进制表示方式:以0x(0X)开头 数字以0-9及A-F组成 如0x23A2、0xa、0x10
浮点数类型:
如1.0、-3.15、3.168等
布尔类型:
true,false
字符类型:
如'a','A', '0', '家'
注意:字符必须使用’’ 包裹,并且其中只能且仅能包含一个字符。
1.3 基本数据类型占用大小和表示范围
四类 | 八种 | 占用字节数 | 数据表示范围 |
整型 (精确) | byte | 1 | -128~127 |
short | 2 | -32768~32767 | |
int(默认) | 4 | -2147483648~2147483647 | |
long | 8 | -2^63~2^63-1 | |
浮点型 (不精确) | float | 4 | -3.403E38~3.403E38 |
double(默认) | 8 | -1.798E308~1.798E308 | |
字符型 | char | 2 | 表示一个字符 |
布尔型 | bollean | 1 | 只有两个值true与false |
2.常量和变量
2.1常量
定义:不变的数据量
分类:
2.2变量
1.定义:在程序中可以变化的量
2.格式:数据类型 变量名 = 数据值 例:int a = 100
public static void main(String[] args) {
// byte类型变量
byte b = 100;
System.out.println(b);
//short类型变量
short s = 100;
System.out.println(s);
//int类型变量
int x = 100;
System.out.println(x);
//long类型变量
long num = 100L;
System.out.println(num);
//float类型变量
float f = 2.0F;
System.err.println(f);
float f2 = 2.0f;
System.out.println(f2);
//double类型变量
double d = 3.14;
System.out.println(d);
double d2 = 3.14d;
System.out.println(d2);
double d3 = 3.14D;
System.out.println(d3);
//char类型变量
char c = 'a';
System.out.println(c);
//boolean类型变量
boolean flag = true;
System.out.println(flag);
}
变量定义后可以不赋值 使用时再赋值 不赋值不能使用 使用前必须先赋值
public static void main(String[] args) {
int x;
x = 20; //下面要使用变量x x必须先赋值
System.out.println(x);
}
变量不能重新定义 并且赋值时类型要匹配
public static void main(String[] args) {
int x = 20; // 定义一个int类型变量x
//int x = 30; //编译报错, 不能重复定义一个x变量
x =30; // 正确,表示给x重新赋值
//x = "abc"; //编译报错,赋值时,类型要匹配
}
变量使用时有作用域的限制
public static void main(String[] args) {
int a= 100;
{
int b = 200;
System.out.println(a);
System.out.println(b);
}
//System.out.println(b); // 编译报错,这里不能访问到变量b
}
3.数据类型转换
3.1数据类型转换
数据类型转换分为自动类型转换和强制类型转换
自动类型转换:小类型——>大类型
格式:范围大的数据类型 变量 = 范围小的数据类型值
强制类型转换:大类型不能转换为小类型 但通过强制类型转换可以实现
格式:范围小的数据类型 变量 = (范围小的数据类型) 范围大的数据类型值
转换规律:
各种数据类型按照数据范围从小到大依次列出:范围小的类型向范围大的类型提升
byte<short=char‐‐>int‐‐>long‐‐>float‐‐>double
byte、short、char 运算时直接提升为int
3.2类型转换案例
1.计算一年有多少毫秒(一年按365天计算)
public class Demo01 {
public static void main(String[] args) {
long result = 365L*24*60*60*1000;
System.out.println(result);
}
}
2.整数的除法运算
public class Demo02 {
public static void main(String[] args) {
int x = 10;
int y = 4;
int result = x/y;
System.out.println(result); // 2
double result2 = x/y;
System.out.println(result2); //2.0;
double result3 = (double)x/y; // 把x强转成double
System.out.println(result3); //2.5
double result4 = 1.0*x/y;
System.out.println(result4);
}
}
3.浮点数 四舍五入取整 四舍五入取两位小数
public class Demo03 {
public static void main(String[] args) {
double x = 3.4665;
//四舍五入取整数
int result = (int)(x+0.5);
System.out.println(result);
// 四舍五入取保留两位小数
double result2 = (int)(x*100+0.5)/100.0;
System.out.println(result2);
}
}
4.字符集
4.1常见字符集
ASCII字符集&编码
ASCII一共定义了128个字符,包括33个控制字符,和95个可显示字符。大部分的控制字符已经被废弃。
GB2312字符集&编码
GB2312 或 GB2312–80 是中华人民共和国国家标准简体中文字符集,共收录6763个汉字,同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符,基本满足了汉字的计算机处理需要。它所收录的汉字已经覆盖中国大陆99.75%的使用频率,但对于人名、古汉语等方面出现的罕用字和繁体字,GB2312不能处理
GBK字符集&编码
汉字内码扩展规范,称GBK,GBK的K为汉语拼音Kuo Zhan(扩展)中“扩”字的声母
GB2312只收录6763个汉字,有不少汉字,如部分在GB2312推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。GBK对GB 2312-80进行扩展,GBK对GB 2312-80进行扩展, 总计拥有23940个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。
Unicode字符集
Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。其中最常用的编码为utf-8
4.2几个特殊意义的字符
\ 转义字符
\’ 表示 单引号
\\ 表示 \\n 换行
\t tab 制表符
4.3练习
在控制台输出完成水果超市价格表如下图
public class Demo04 {
public static void main(String[] args) {
System.out.println("水果编号\t水果名称\t水果单价\t计价单位\t品质");
System.out.println(1+"\t榴莲\t"+32.0+"\t公斤\t"+"A");
System.out.println(2+"\t苹果\t"+6.5+"\t公斤\t"+"B");
System.out.println(3+"\t猕猴桃\t"+6.0+"\t公斤\t"+"A");
}
}
5.运算符
5.1概述
对常量和变量进行操作的符号称为运算符
5.2分类
算术运算符 赋值运算符 关系运算符 逻辑运算符 三元运算符
5.2.1算术运算符
public class Demo05 {
public static void main(String[] args) {
int result1 = 1+2;
int result2 = 3-1;
int result3 = 3*2;
int result4 = 3/2;
int result5 = 3%2; // 取模 (余数) -------> 判断能不能整除
System.out.println(result1); //3
System.out.println(result2); //2
System.out.println(result3); //6
System.out.println(result4); //1
System.out.println(result5); //1
int x = 100;
int y = 3;
int result6 = x+y;
int result7 = x/y;
int result8 = x%y;
System.out.println(result6); //103
System.out.println(result7); //33
System.out.println(result8); // 1
// ++(递增) --(递减)
int a = 1;
//a++;
++a;
System.out.println(a); //3
}
++a:先加1再赋值
a++:先赋值再加1
public static void main(String[] args) {
int a = 1;
//int b = ++a;//a:2 b:2 注意:++在前表示先计算++ 再赋值
int b = a++;//a:2 b:1 注意:++在后表示先赋值 再计算++
System.out.println(a);
System.out.println(b);
}
5.2.2赋值运算符
所谓赋值运算符,就是将符号右边的值,赋给左边的变量
public static void main(String[] args) {
int a = 5;
int b = 2;
a+=2; // a= a+2;
System.out.println(a); //7
a-=1; // a = a-1;
System.out.println(a); //6
a*=2; // a = a*2;
System.out.println(a); //12
a/=2; a = a/2;
System.out.println(a); //6
a%=2; a= a%2;
System.out.println(a); //0
}
5.2.3关系运算符
关系运算符,是两个数据之间进行比较的运算
运算结果都是布尔值true(正确的,真的,满足条件的) 或者false(错误的,假的,不满足条件的)
public static void main(String[] args) {
int a = 2;
int b = 1;
System.out.println(b>a); // true
System.out.println(b>=a); // true
System.out.println(b<a); // false
System.out.println(b<=a); // false
System.out.println(b==a); // false
System.out.println(b!=a); // true
}
5.2.4逻辑运算符
逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值true 或者false
public static void main(String[] args) {
/* int x = 5;
int y = 3;
int a = 10;
int b =8;
System.out.println(x>y & a>=b); // true & true = true
System.out.println(x>y & a<b); // true & false = false
System.out.println(a<b & x>y); // false & true = false
System.out.println(a<b & x<y); // false & false = false
System.out.println(x>y | a>=b); // true | true = true
System.out.println(x>y | a<b); // true | false = true
System.out.println(a<b | x>y); // false | true = true
System.out.println(a<b | x<y); // false | false = false
System.out.println(x>y ^ a>=b); // true ^ true = false
System.out.println(x>y ^ a<b); // true ^ false = true
System.out.println(a<b ^ x>y); // false ^ true = true
System.out.println(a<b ^ x<y); // false ^ false = false
*/
/*
int x = 5;
int y = 3;
int a = 10;
int b =8;
System.out.println(!(x>y)); // false
System.out.println(!(x<y)); // true
System.out.println(x>y && a>=b); // true && true = true
System.out.println(x>y && a<b); // true && false = false
System.out.println(a<b && x>y); // false && true = false
System.out.println(a<b && x<y); // false && false = false
System.out.println(x>y || a>=b); // true || true = true
System.out.println(x>y || a<b); // true || false = true
System.out.println(a<b || x>y); // false || true = true
System.out.println(a<b || x<y); // false || false = false
*/
}
短路功能的&&和||
&& 短路与
短路特点:符号左边是false,右边不运算
|| 短路或
短路特点: 符号左边是true,右边不运算
结论:实际开发中都是使用短路与&&和短路或||,因为效率更高
int x = 5;
int y = 3;
int a = 10;
int b =8;
/*
System.out.println(x<y & a++<b); // false
System.out.println(a); // 既是第一个表达式是false 也会计算第2个表达式 也就是执行了a++ a的值变为11
*/
System.out.println(x<y && a++<b); // false
System.out.println(a); //10 第一个表达式是false了结果就直接为false 不会执行第2个表达式 也就是没有执行a++ a的值还是10
5.2.5三元运算符
三元运算符格式:
数据类型 变量名 = 布尔类型表达式?值1:值2
三元运算符计算方式:
布尔类型表达式值是true时,三元运算符整体值为值1,赋值给变量。
布尔类型表达式值是false时,三元运算符整体值为值2,赋值给变量。
int a = 5;
int b = 8;
int result = a<b?a:b;
System.out.println(result); // 判断a大于b吗 如果a大于b 把 a赋给result 反之把b赋给result
练习:交换两个变量的值
// 使用临时变量
public static void main(String[] args) {
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
System.out.println(a);
System.out.println(b);
}
//不使用临时变量
public static void main(String[] args) {
int a = 1;
int b = 2;
int sum = a+b;
a = sum - a;
b = sum - a;
System.out.println(a);
System.out.println(b);
}
//采用和的方式
public static void main(String[] args) {
int a = 1;
int b = 2;
b = a+b-(a=b);
System.out.println(a);
System.out.println(b);
}
5.2.6键盘录入scanner类
使用步骤:
1.定义变量,并相应类型的对象赋值给变量:
数据类型 变量名 = new 数据类型();
如:Scanner scanner = new Scanner(System.in);
2.导包:
使用import导包,告诉JVM从哪里去找Scanner类
3.调用Scanner对象方法:
变量名.方法名();
import java.util.Scanner;
public class Demo24_键盘输入 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt(); //代码执行到这一步时,会阻塞(停住) 等着键盘从控制台输入,输入完成后回车,把输入的值赋给了x
System.out.println("键盘输入的值为:"+x);
double y = sc.nextDouble();
System.out.println("键盘输入的浮点数值为:"+y);
}
}
5.2.7位运算符
任何信息在计算机中都是以二进制的形式保存的,”&”、“|”、“^”除了可以作为逻辑运算符也可以作为位运算符。位运算是直接对二进制进行运算。
& 参加运算的两位数都为1,&运算符结果才为1,否则就为0。
| 参与运算的两位都为0,|运算的结果才为0,否则就为1。
左移<<
右移>>
最快的运算是位运算