基础知识-数据类型
1. 数据类型
1.1 前言
1.1.1 标识符
可以简单的理解为一个名字。在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且遵循以下规则:
- 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符。
- 不能以数字开头。
- 标识符是严格区分大小写的。
- 标识符的命名最好能反映出其作用,做到见名知意。
1.1.2 关键字
在java语言中已经被赋予特定意义的一些单词。
- 一共有53个关键字。其中有两个保留字:const和goto。
- 关键字不能被用作标识符!!
1.1.3 注释
Java代码的解释说明。不影响程序的运行,用于辅助读程。
- // 单行注释
- /* 多行注释 */
- /** 文档注释 */
1.1.4 变量
在JAVA中,有的数据值是不固定的,总在变,我们还需要记录这些值,我们可以把这些值理解为变量。
我们通过三个元素来描述变量:变量类型,变量名以及变量值。
int age=18; //声明int类型的变量并赋值
String tel; //声明String类型的变量
注意:
1、 变量名必须是一个有效的标识符。
2、 变量名不可以使用java关键字
3、 变量名不能重复
1.1.5 常量
在程序运行过程中一致不会改变的量成为常量。
1.2 基本类型(八种)
1.2.1 介绍
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
1.2.2 练习1:测试最大值最小值
- 创建工程day02
- 创建cn.chuci.basic包
- 创建Test1_Scope.java
package cn.chuci.basic;
//这个类用来测试取值范围
public class Test1_Scope {
public static void main(String[] args) {
//整型测试 byte short int long
//定义变量记录最大值 最小值
//数据类型 数据名 数据值
byte max = Byte.MAX_VALUE;
byte min = Byte.MIN_VALUE;
System.out.println(max);//127
System.out.println(min);//-128
short smax = Short.MAX_VALUE;
short smin = Short.MIN_VALUE;
System.out.println(smax);//32767
System.out.println(smin);//-32768
int imax = Integer.MAX_VALUE;
int imin = Integer.MIN_VALUE;
System.out.println(imax);//2147483647
System.out.println(imin);//-2147483648
long lmax = Long.MAX_VALUE;
long lmin = Long.MIN_VALUE;
System.out.println(lmax);//9223372036854775807
System.out.println(lmin);//-9223372036854775808
//浮点型 float double
float fmax = Float.MAX_VALUE;
float fmin = Float.MIN_VALUE;
System.out.println(fmax);//3.4028235E38
System.out.println(fmin);//1.4E-45
double dmax = Double.MAX_VALUE;
double dmin = Double.MIN_VALUE;
System.out.println(dmax);//1.7976931348623157E308
System.out.println(dmin);//4.9E-324
//布尔类型boolean
boolean b = false;
boolean b2 = true;
//字符型char
char c = 'a';//可以存一个字符
char c2 = 128;//可以存一个数字
char c3 = '中';//可以存一个汉字
System.out.println(c);
//char类型可以存数字,但是在打印时,会去查ascii码表,把这个数字对应着的字符是什么拿出来使用。
//ascii码表里只规定过来数字0-127对应着的字符,128-65535默认按照字符?处理
System.out.println(c2);//?
System.out.println(c3);
}
}
1.2.3 练习2:输入个人信息
package cn.chuci.basic;
//这个类用来测试个人信息
public class Test2_Info {
public static void main(String[] args) {
String name = "楚辞";
//通过+拼接字符串
System.out.println("我叫"+name);
int age=20;
//如果中间要动态拼接字符串"+?+"
System.out.println("我叫"+name+",今年"+age+"岁");
}
}
2 基本类型的字面值(5条)
2.1 整数字面值是int类型
int a = 9999999;
2.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b = 127;
byte b2 = 128;//右面128字面值是int类型,已经超出byte取值范围
2.3 浮点数的字面值是double类型
float f = 3.0;//错误,右面的字面值是double类型,左面是float类型,放不下的。
2.4 字面值后缀LFD
long a = 999999999999L;// 999999999999字面值是int类型,但是超出了int取值范围,会报错,解决方案就是加后缀L,从int转成long
float b = 3.0F;//3.0字面值是double类型,加后缀F会变成floa类型
double d = 3D;//3字面值是int类型,加后缀D,会变成double类型
2.5 进制前缀
0x
- 16进制 0x00010
-8进制 0230b
-2进制 0b0101\u
-char类型,16进制 ,默认值是\u0000
3 基本类型的类型转换
3.1 小到大/隐式转换
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
//小转大/隐式转换
byte m = 10;
long n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
3.2 大到小/显示转换
需要强制类型转换
//大转小/显示转换
float x = 9.9F;
int y = (int)x ;//大转小,右面的x是大类型,给左面的y小类型赋值,不可以直接赋值。需要添加强转的代码(小类型)
4 运算规则(5条)
4.1 计算结果的数据类型,与最大类型一致
System.out.println(3/2);//1,int/int,得到的结果类型还是int
System.out.println(3/2d);//1.5,int/double。得到的结果是double
4.2 byte,short,char三种比int小的整数,运算时会先自动转换成int
byte a = 1;
byte b = 2;
byte c = (byte)(a+b);//a+b会自动提升成int类型,右面得运算结果就是int大类型,给左面的byte小类型赋值,不可以,需要强转。
4.3 整数运算溢出
整数运算,类似于一个钟表,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米?3亿m/s
//溢出的现象:因为做了大的整型数据的运算,会超出int取值范围。解决方法:把整数提升成long类型。
System.out.println(300000000L*60*60*24*365);
4.4 浮点数运算不精确
为什么浮点精度运算会有问题
我们平常使用的编程语言大多都有一个问题——浮点型精度运算会不准确。比如
double num = 0.1 + 0.1 + 0.1;
// 输出结果为 0.30000000000000004
double num2 = 0.65 - 0.6;
// 输出结果为 0.05000000000000004
4.5 浮点数的特殊值
Infinity 无穷大 3.14/0
NaN not a number 0/0.0
5 运算符
5.1 概述
通常,我们用0表示false,用1表示true
与:表示并且的关系
单与&:
1 & 2 ,结果想要是true,要求1和2都必须是true
双与/短路与&&:
1 && 2 ,当1是false时,2会被短路,提高程序的效率
或:表示或者的关系
单或|:
1 | 2,结果想要是true,要求1和2只要有一个为true就可以
双或/短路或||:
1 || 2,当1是true时,2会被短路,提高程序效率
5.2 练习1:自增自减
package cn.chuci.basic;
//这个类用来测试自增自减
public class Test5_Yunsuanfu {
public static void main(String[] args) {
//符号在前,先变化再使用
//符号在后,先使用再变化
int a = 1;
System.out.println(a++);
int b = 1;
System.out.println(++b);
System.out.println(++a+a+b++);//3+3+2
int c = 1;
System.out.println(c--);
int d = 1;
System.out.println(--d);
System.out.println(--c-c-c--);//-1-(-1)-(-1)
}
}
5.3 练习2:两个数的最大值
package cn.chuci.basic;
import java.util.Scanner;
//这个类用来获取两个数中的大值
public class Test6_Max {
public static void main(String[] args) {
//1、接收键盘输入的两个整数
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
//2、比较,用三元运算符比较 1 ? 2 : 3
int max = a > b ? a : b;
System.out.println(max);
//TODO 如何比较三个数中的大值呢?
}
}
5.4 练习3:平年闰年
输入年号,判断是否是闰年。 两个条件: 1、能被4整除,并且不能被100整除 2、能被400整除
package cn.chuci.basic;
import java.util.Scanner;
//这个类用来测试平年闰年
public class Test7_Runnian {
public static void main(String[] args) {
//1、输入年号,判断是否是闰年
int year = new Scanner(System.in).nextInt();
String desc = "平年";//设置默认值,假设每年都是平年
//2、判断,年号是否满足闰年的条件
//if(判断条件){满足条件的代码}
// if(year%4==0){//能被4整除
// if(year%100 != 0){//并且不能被100整除
// desc = "闰年";//修改默认值
// }
// }
// if(year%400 == 0){//能被400整除
// desc = "闰年";//修改默认值
// }
//TODO 代码优化...
// 1、能被4整除,并且不能被100整除
// 2、能被400整除
// if( (小判断条件1 && 小判断条件2 ) || 判断条件2){满足条件的代码}
// if( (能被4整除 && 不能被100整除 ) || 能被400整除){
if( (year%4==0 && year%100 != 0 ) || year%400 == 0){
desc = "闰年";//修改默认值
}
System.out.println(year+"年是"+desc);
}
}
至此,本节完~~~
上一节:CGB1-day1–HelloWorld
下一节:
此 系 列 以 完 整 记 录 自 己 在 J a v a 学 习 路 的 过 程 此系列以完整记录自己在Java学习路的过程 此系列以完整记录自己在Java学习路的过程