java是一种强雷型语言,每个变量都必须声明其数据类型。
Java的数据类型可分为两大类:基本数据类型(primitive data type)和引用数据类型(reference data type)。
基本数据类型分为:数据型———整数类型(byte,short,int,long)和浮点类型(float,double)
字符型(char)
布尔型(boolean)
引用数据类型:类(class)
接口(interface)
数组PS:巧妙记忆:除了基本数据类型以外的所有类型都属于引用数据类型,本章重点:基本数据类型
一、数据型
(1)整数类型(byte,short,int,long):
常数:
十进制整数,如:99,-500,0
八进制整数,要求以0开头
十六进制整数,要求0x或者0X开头
二进制:要求0b或者0X开头
变量:
一个字节代表8位数
类型 | 占用存储空间 | 表数范围 |
---|---|---|
byte | 1字节 | -2^7~2^7-1(-128~127) |
short | 2字节 | -2^15~2^15-1(-32768~32767) |
int | 4字节 | -2^35~-2^35-1(-2147483648~2147483647)约21亿 |
long | 8字节 | -2^63~2^63-1 |
public class testVar03 {
public static void main(String[] args){
//定义整数类型的变量:
//给变量赋值的时候,只可以为不同进制的:
int num1 = 12;//默认情况下赋值就是十进制的情况
System.out.println(num1);
int num2 = 012;//前面加上0,这个值就是八进制的
System.out.println(num2);
int num3 = 0x12;//前面加上0x或者0X,这个值就是十六进制的
System.out.println(num3);
int num4 = 0b10;//前面加上0b或者0B,这个值就是二进制的
System.out.println(num4);
//定义byte类型的变量:
byte b = 126;//定义了一个byte类型的变量,名字叫b,赋值为12
System.out.println(b);
//注意:超范围的赋值会报错。
short s = 30000;
System.out.println(s);
int i = 1234;
System.out.println(i);
//整数类型默认就是int类型的,所以12345678910是一个int类型的数,对于int类型来说,他超出范围了
//要想把一个输给long类型变量,那么后面加上L(推荐)或者l就可以了
//注意:只有这个数超出int类型的范围了后面才加上L,否则无需加上L也可以赋值给long类型
(2)浮点类型(float,double):
常量:
public class testVar04 {
public static void main (String[] args){
//浮点类型的常量有两种形式:
//十进制形式:
double num1 = 3.14;
System.out.println(num1);
//科学计数法形式:
double num2 = 314E-2;
System.out.println(num2);
//
}
}
变量:
float类型又被称作单精度类型,尾数可以精确到7位有效数字,在很多情况下,float类型的精度很难满足需求。
而double表示这种类型的数值精度约是float类型的两倍,又被称作双精度类型,绝大部分应用程序都采用double类型 float类型的数值有一个后缀F或者f,没有后缀F/f的浮点数值默认为double类型。
类型 | 占用存储空间 | 表数范围 |
---|---|---|
float | 4字节 | 大约士3.402 823 47E+38P(有效位数为6-7位左右) |
double | 8字节 | 大约士1.797 693 134 862 315 70E+308(有效位数为15-16位左石) |
PS:有效数字指的是从左开始第一个不为0的数到最后一个数
public class testVar04 {
public static void main (String[] args){
//浮点类型的变量:
//注意:浮点型默认是double类型的,要想将一个double类型的数赋给float类型,必须后面加上F或者f
float f1 =3.1423456789876F;
System.out.println(f1);
//注意:double类型后面可以加D或者d,但是一般都省略不写
double d1 = 3.1423456789876;
System.out.println(d1);
//注意:我们最好不要进行浮点类型的比较:
float f2 = 0.3F;
double d2 = 0.3;
System.out.println(f2==d2);
/*
区别:
= 赋值运算: 将等号右侧的值赋给等号左侧
== 判断==左右两侧的值是否相等 :结果要么相等 要么不相等
==运算符的结果就是要么是true,要么是false
*/
}
}
二、字符类型(char)
【1】编码和字符集
Unicode :国际通用字符集,融合了目前人类使用的所有字符。为每个字符分配唯一字符码。
推出了UTF标准:
三种编码方案:UTF-8 , UTF-16 , UTF-32
我们最常用的为UTF-8
Java中使用单引号来表示字符常量,字符型在内存中占2个字节。
char类型用来表示在Unicode编码表中的字符。Unicode编码被设计用来处理各种语言的文字,它占2个字节,可允许有65536个字符
【2】转义字符:
转义符 | 含义 | Unicode |
---|---|---|
\b | 退格 | \u0008 |
\n | 换行 | \u000a |
\r | 回车 | \u000b |
\t | 制表符 | \u0009 |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
【3】ASCll表
【4】Unicode编码表
https://blog.csdn.net/tgvincent/article/details/93884725
代码1
public class textVar05 {
public static void main(String[] args){
//定义字符类型的变量:
char ch1 = 'a';
System.out.println(ch1);
char ch2 = 'A';
System.out.println(ch2);
char ch3 = '4';
System.out.println(ch3);
char ch4 = '中';
System.out.println(ch4);
char ch5 = '!';
System.out.println(ch5);
//java中无论:字母,数字,符号,中文都是字符类型中的常量,都占2个字节。
char ch6 = ' ';
System.out.println(ch6);
//字符类型:单引号引起来的单个字符
System.out.println("------------------------");
/*
转义字符:
\将后面普通字符转换为特殊含义
*/
char ch7 = '\n';
System.out.println("aaa"+ch7+"bbb");
System.out.println("aaa\nbbb");//\n换行
System.out.println("aaaaaaa\tbbb");//\t 制表符
System.out.println("aaa\bbbb"); //\b 向前退一格
System.out.println("aaa\rbbb"); // \r将光标到本行开头(回车)
System.out.println("\"java\"");
System.out.println("\'java\'");
System.out.println("\\java\\");// \"将双引号原样输出 \'将单引号原样输出 \\将\原样输出
}
}
代码2
public class textVar06 {
public static void main (String[] args){
char ch1 = 'A';
System.out.println(ch1);//A
System.out.println(ch1+90);//155
System.out.println(155-ch1);//90
//char类型我们看到的样子就是它本身字面常量,但是底层在进行计算的时候,实际上是按照一个码进行计算的。
//这个码就是ASCII
//之前说char类型是按照Unicode码表进行存储的(Unicode兼容了ASCII码,Unicode的前128位置ASCII)
char ch2 = '中';
System.out.println(ch2);
System.out.println(ch2+90);//20103
System.out.println(20103-ch2);//90
int num1 = (ch2);
System.out.println(num1);//20013
char ch = (char)20013;
System.out.println(ch);
int num2 = '中';
char ch5 = 20013;
System.out.println(ch5);
//面试题
char ch6 = '2'+2;
System.out.println(ch6);//'4'--->4
}
}
三、布尔类型(boolean)
boolean类型有两个常量值,true和false,在内存中占一位(不是一个字节),不可以使用0或非0的整数替代true和false,这点和C语言不同。boolean 类型用来判断逻辑条件,一般用于程序流程控制。
public class textVar07 {
public static void main(String[] args){
//创建一个布尔类型的变量:
boolean flag1 = true;
System.out.println(flag1);
boolean flag2 = false;
System.out.println(flag2);
boolean flag3 = 5==9;
System.out.println(flag3);
boolean flag4 = 5<9;
System.out.println(flag4);
}
}
四、类型转换问题
public class textVar08 {
public static void main(String[] args){
//类型转换的两种形式:
double d = 6;//int-->double 自动类型转换
System.out.println(d);
int i = (int)6.5;//double--->int 强制类型转换 (强转)
System.out.println(i);
//在同一个表达式中,有多个数据类型转换的时候,应该如何处理:
/*
double d2 = 12+1294L+8.5F+3.81+'a'+true;
System.out.println(d2);
多种数据类型参与运算的时候,整数类型,浮点类型,字符类型都可以参与运算,唯独布尔类型不可以参与运算。
*/
double d2 = 12+1294L+8.5F+3.81+'a';
System.out.println(d2);
/*
类型级别:(从高到低的)
byte,short,char < int < long < float < double
级别用来做什么?当一个表达式中有多种数据类型的时候,要找出当前表达式中级别最高的那个类型,然后其余的
类型都转换为当前表达式中级别最高的类型进行计算。
double d2 = 12+1294L+8.5F+3.81+'a';
=12.0+1294.0+8.5+3.81+97.0
*/
int i2 = (int)(12+1294L+8.5F+3.81+'a');
System.out.println(i2);
/*
在进行运算的时候:
左=右 : 直接赋值
左<右 : 强转
左>右 : 直接自动转换
*/
//以下情形属于特殊情况:
byte b = 12;
System.out.println(b);
//对于byte,short,char类型来说,只要在他们的表述范围中,赋值的时候就不需要进行
//强转了直接赋值即可。
}
}
练习习题(final,字符常量,Scanner的使用):
import java.util.Scanner;//形象理解:在java.util下降Scanner拿来用
public class testVar09 {
public static void main(String[] args){
//现实功能:求圆的周长和面积
//【1】提取变量:提取变量,就是为了一劳永逸,以后只要改变变量的值,下面只要用到这个变量的地方,取值也都发生变化了
//【2】一个变量值被final修饰,这个变量就变成了一个常量,这个常量的值就不可变了
// 这个常量就是我们所说的字符常量----》pi
// 约定俗成的规定:字符常量的名字全部大写
//【3】使用扫描器:Scanner的使用---》注意通过形象的理解去使用
final double PI = 3.1415926;
//拿来一个扫描器:
Scanner sc = new Scanner(System.in);
//给一个友好型的提示:
System.out.println("请录入一个半径:");
//让扫描器扫描键盘录入的int类型的数据:
int r = sc.nextInt();
//求周长:
double c = 2*PI*r;
System.out.println("周长为:"+c);
//求面积:
//pi = 9.29;报错,java: 无法为最终变量pi分配值
double s = PI*r*r;
System.out.println("面积为:"+s);
}
}
练习:加深对Scanner的使用:
代码:
import java.util.Scanner;
public class textVer10 {
public static void main(String[] args){
//键盘录入学生信息:年龄,身高,姓名,性别:
//键盘输入年龄:(接收int类型数据)
Scanner sc = new Scanner(System.in);
System.out.print("请输入年龄:");
int age = sc.nextInt();
//键盘输入身高:(接收double类型数据)
System.out.print("请输入身高:");
double height = sc.nextDouble();
//键盘输入姓名:(接收String类型数据---》字符串)
System.out.print("请输入姓名:");
String name = sc.next();
//键盘输入性别:(接收char类型数据)
System.out.print("请输入性别:");
String sexStr = sc.next();
char sex = sexStr.charAt(0);
//上面两句可以合为一句表示:char sex - sc.next().charAt(0)
System.out.print("该学生的信息为:姓名是"+name+",年级是:"+age+",身高为:"+height+",性别是:"+sex);
}
}
结果:
请输入年龄:18
请输入身高:183.5
请输入姓名:呼呼呼
请输入性别:男
该学生的信息为:姓名是呼呼呼,年级是:18,身高为:183.5,性别是:男