一、数据类型
所有写的 java 的源代码 都要复合 java 编译器的规范,要能够让编译器理解编译通过。
1:在编写源代码的时候,需要告诉编译器,我申请的内存的名字,还有内存中数据的类型。
java是一种强类型语言。
2:java 语言中,支持的数据的类型。
表达某些数据的时候,可以使用那些类型来表示。
java中规定一块内存区域只能保存一种类型的数据。
3:java 支持的数据类型
2大类:
1:基本数据类型、简单数据类型、java内置类型。
2:引用数据类型、复合数据类型、复杂数据类型。
4:java 支持的基本数据类型有哪些?8种。
1:4种整数类型
1:字节型 byte 占用1byte的内存空间。数据范围[-128~127][-2^7 ~ 2^7-1] 256
2: 短整型 short 占用 2 bytes 数据表示的范围 [-2^15 ~ 2^15-1] 65536
3: 整型 int 占用 4 bytes 数据表示的范围 [-2^31 ~ 2^31-1]
4:长整型 long 占用 8个字节 数据表示的范围 [-2^63 ~ 2^63-1]
2:2个浮点数
1:单精度类型 float 占用4bytes 小数点后可以有7个小数位左右。
2:双精度 double 占用8bytes 小数点后可以保留15位小数左右。
3:字符类型 char 2bytes
4:布尔类型 boolean 官方没有给出具体占用空间的大小?? 只有两个值 true 和 false。只使用了一个二进制位来表示这两种状态。1-->true 0---false.
数据类型的作用:1:决定了数据占用内存空间的大小。2:底层二进制存储的格式。
定义指定类型的标识符并存储指定的数据的通用格式:
数据类型 标识符 = 某一个值;
例子:通过什么样的方式,去申请一块内存空间,去保存一个年龄的整数。并把数打印输出到cmd 窗口。
public class TestType{
public static void main(String[] args){
//先向 jvm 申请一块内存并起一个名字,然后再将数据放到该内存中。
//申请内存的必须告诉编译器申请多大
//向jvm 申请一块内存区域,申请的区域的数据类型为int,该内存的标识符名字是 age,然后将10这个数放到该内存中。
int age = 19;
//使用byte 存储一个 分数
byte score = 99;
//使用short 存储一个 学校的人数
short studentCount = 520;
//使用long 存储一个世界人口的数量
long worldPersonCount = 74_0000_0000L;
//float 表示圆周率
float pi = 3.141592653F;
double pi1 = 3.141592653222222222222222222222222;
//0.1 0.5 0.01 0.3
//char 存储一个字符 A
//单引号中放置一个字符,双引号中放置若干个字符。
char charA = 'A';
//用boolean 表示班里是否有女孩子
boolean isGirlInClass = true;
//+ 可以是先 字符串 和 任意类型的数据连接,连接之后生成一个新的字符串,将新的字符串打印输出。
System.out.println("age = " + age +";");
System.out.println("score = " + score + ';');
System.out.println("studentCount = " + studentCount);
System.out.println("worldPersonCount = " + worldPersonCount);
System.out.println("pi = " + pi);
System.out.println("pi1 = " + pi1);
System.out.println("charA = " + charA);
System.out.println("isGirlInClass = " + isGirlInClass);
}
}
二、变量
声明变量:数据类型 变量名;
赋初值:变量名 = 初始值;
所以,定义变量就是 声明 + 赋值的过程。
//使用变量
public class TestVariable{
public static void main(String[] args){
//定义一个int 类型的变量 保存一个100;
int value = 100;
//获得变量的值 get
System.out.println("value = " + value);
//修改变量的值 set
value = 99;
//获得变量的值 get
System.out.println("value = " + value);
//定义变量的其他的语法形式。
//声明变量 声明的变量不能访问,如果只是声明变量,那么jvm 不会给 变量分配内存。
//如果一个变量可以被访问,那么必须保证 被访问的时候已经被分配了内存。
int age;
//赋初值
age = 19;
System.out.println("age = " + age);
int num1 = 10,num2 = 20, num3 = 30;
int value1 = 10,value2,value3 = 50,value4;
value2 = 19;
System.out.println("value2 = " + value2);
//System.out.println("value4 = " + value4);
}
}
作用域:
概念:局部变量的作用域:局部变量可以被访问的范围。
局部变量的作用域:从定义的位置开始,到变量所在的大括号的结尾处内。
ä¸ã 常量
java 中的常量 分为两种:
1:字面常量、字面值。 12, 1.2,'A',"123",true,false.
2:不可变的变量。final + 数据类型 + 变量名 = 常量;
如:不可变的变量:
int maxYearDayCount = 366;
如何将一个变量变成不可变的量:
final int maxYearDayCount = 366;
final 修饰的变量称之为 终态变量。只能初始化一次。
java 中所有的数据都是要有类型的,可以显式的指定数据的类型。
字面值 是被编译器 隐式指定数据类型。
隐式指定数据类型的规则:
如果是整数 类型为int。
如果一个字面整数的值超过了int 的范围,那么必须告诉编译器 申请8个字节的空间去存储它。通过在常量的末尾添加 字符 l or L 建议使用 L
如果是浮点数,那么默认类型 为double。占用8个字节。
肯定不能将八个字节的数据赋值给4个字节的内存空间。可能会有精度的损失。不安全。
需要在浮点数常量值的末尾添加 F or f 。来申请四个字节的空间存储。
//final 练习
//求一个 球 的体积。半径通过键盘输入获得。
import java.util.Scanner;
//默认导入的核心包 下所有的类 * 通配符,代表所有的
//import java.lang.*;
public class TestFinal{
public static void main(String[] args){
//创建一个扫描器对象 用来接收键盘输入的。System.in 代表键盘 标准输入设备
//需要告诉编译器 Scanner 来自于哪里
Scanner scanner = new Scanner(System.in);
//提高用户体验 User Expression UE
System.out.println("请您输入球体的半径:");
//定义变量保存一个球体的半径
//让扫描器对象使用自己接收键盘输入的功能去接收一个数据。接收下一个输入的整数,输入完毕回车接收。
//将接收的结果赋值给 半径变量。
//nextInt() 是 扫描器 对象的功能。方法。用来接收键盘的一个整数。
//阻塞式方法。可以让程序停下来,如果想让程序继续执行,解除阻塞才可以。
int radius = scanner.nextInt();
//定义变量 来保存 球体的体积
double volume = 0;
//定义变量来保存 圆周率的 值,如果圆周率的精确度需要调整,
//通过将 PI 定义成 终态变量,来保证代码的安全性。
final double PI = 3.141593;
//计算体积公式
volume = PI * 4 / 3 * radius * radius * radius;
System.out.println("半径为:"+ radius + " 球的体积为 = "+volume);
}
}
åã 转义字符
char 类型:
占用 2 bytes 。
可以当作整数来看来。[0-65535] 无符号短整型。没有负数。
美国的字符集 ASCII
0 字符对应的整数 48
A --->65
a ---> 97
转义字符:
\t 对应着键盘上的Tab 键 可以表示[1-8]个半角位 \t输出的位置必须保证前面输出的所有的内容要求是8的倍数的半角位,不够8的倍数,补齐8的倍数,够了,自己就独自占8个。
\b 对应着键盘上的Backspace 键 退格键。
\f 换页符
\r 回车符 让光标回到当前行的行首。
\n 换行符 让光标去到下一行
注意:键盘上的回车键 对应了2个字符 \r\n
回车键:去到下一行的行首。
\': 单引号 字符
\":双引号 字符
\\: 反斜杠 字符
打印一个字消耗的时间是0.1s,每次换行 需要消耗0.2s 每次换行 都会丢俩字符。
后来就在需要换行的地方 添加两个空白字符 \r\n。
1:读取到了 97 去本地字符集 gbk 去查找 97 对应的字符 a ,再去unicode 字符集中 将 a 的字符对应的整数替换过来。
//char 类型 练习
public class TestChar{
public static void main(String[] args){
//定义char 类型的变量
char c1 = 'A';
//就是每一个字符都对应这个一个唯一的整数 这个整数在[0-65535]
char c2 = 66;
System.out.println(c1);
System.out.println(c2);
//使用转义字符的方式去表示字符
//java 使用字符集是 Unicode 字符集
//使用4个16进制位来表示16bits
//转义序列
char c3 = '\u0043';
System.out.println(c3);
//字符集中的某些具有特殊意义的字符没有办法使用一个符号来表示,所以使用一种转义字符的方式来表示。
//System.out.println("\t123456789");
//System.out.println("123456789");
//System.out.println("1\t23456789");
System.out.println("1234567\n89");
char c4 = '\'';//单引号 字符
char c5 = '\"';//双引号 字符
char c6 = '\\';//反斜杠 字符
}
}
äºã 生成随机数
//获得指定区间[10~51) 2个 随机数 value1,value2.并打印value1 和 value2 的值。
//然后实现功能,将value1 和 value2 的值互换。并再次打印。
public class TestRandom{
public static void main(String[] args){
//以后一旦涉及到区间范围,包含小的,不包含大的。
//使用终态变量替代字面常量:尽量少的使用字面常量
//先定义随机区间的范围[10~51)
final int MIN = 10,MAX = 12;
//Math.random() 可以得到一个随机数[0.0~1.0)随机的double 值。
//保存最终随机值的变量
int ran = 0;
//Math.random()*(MAX-MIN);[0.0~41.0)
//Math.random()*(MAX-MIN)+MIN;[10.0~51.0)
ran = (int)(Math.random() * ( MAX - MIN ) + MIN);
System.out.println("ran = " + ran);
}
}
//生成随机数 并 交换位置
//获得指定区间[10~51) 2个 随机数 value1,value2.并打印value1 和 value2 的值。
//然后实现功能,将value1 和 value2 的值互换。并再次打印。
public class ChangeValue{
public static void main(String[] args){
//定义取值区间
final int MIN = 10,MAX = 51;
//求两个随机值
int num1 = (int)(Math.random()*(MAX-MIN)+MIN);
int num2 = (int)(Math.random()*(MAX-MIN)+MIN);
//打印两个随机值
System.out.println("交换之前的随机值为:num1 = " + num1 + "\tnum2 = " + num2);
//交换变量的值
int temp = num1;//备份num1
num1 = num2;
num2 = temp;
//打印交换后的值
System.out.println("交换之后的随机值为:num1 = " + num1 + "\tnum2 = " + num2);
}
}