JAVA语法基础 -数据类型与类型转换
一.数据类型 [分为:1.基本类型(八种) , 2.引用类型]
1.基本类型介绍(八种)
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
java是一个强类型的语言,会把日常见到的数据,分成好多类型.
内存管理系统根据变量类型来分配存储空间,分配的空间只能用来储存该类型数据。
常用的转换关系:
位 bit,来自英文bit,音译为“比特”,表示二进制位。
1 Byte = 8 Bits (1字节 = 8位)
1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB
2. 引用类型
引用类型是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。如:类,接口,数组,
基本类型
测试代码: 变量交换
测试代码: 查看基本类型的最大值与最小值
package cn.tedu.basic;
/**
* 本类用于查看基本类型的最大值与最小值
* Ctrl+Alt+向下键 快速向下复制一行
*/
public class TestTypeScope {
//必须要写入口函数,否则代码无法执行,因为没有入口
public static void main(String[] args) {//入口函数
//进行整形类型的测试 byte1 short2 int4 long8
//1.定义变量,用变量分别保存最大值与最小值
//定义变量 数据类型 变量名 变量值 Ctrl+Alt+向下键 快速向下复制一行 换位置:Alt+方向键
/**JAVA提供了对应的基本类型的工具箱*/
byte byteMax = Byte.MAX_VALUE;
byte byteMin = Byte.MIN_VALUE;
System.out.println("byte类型的最大值是:"+byteMax);//127
System.out.println("byte类型的最小值是:"+byteMin);//-128
short shortMax = Short.MAX_VALUE;
short shortMin = Short.MIN_VALUE;
System.out.println("short类型的最大值是:"+shortMax);//32767
System.out.println("short类型的最小值是:"+shortMin);//-32768
int intMax = Integer.MAX_VALUE;
int intMin = Integer.MIN_VALUE;
System.out.println("int类型的最大值是:"+intMax);//2147483647
System.out.println("int类型的最小值是:"+intMin);//-2147483648
long longMax = Long.MAX_VALUE;
long longMin = Long.MIN_VALUE;
System.out.println("long类型的最大值是:"+longMax);//9223372036854775807
System.out.println("long类型的最小值是:"+longMin);//-9223372036854775808
//浮点型测试 float double
//1.4E-45(1.4乘以10的负45次方)
float floatMax = Float.MAX_VALUE;
float floatMin = Float.MIN_VALUE;
System.out.println("float类型的最大值是:"+floatMax);//3.4028235E38
System.out.println("float类型的最小值是:"+floatMin);//1.4E-45
double doubleMax = Double.MAX_VALUE;
double doubleMin = Double.MIN_VALUE;
System.out.println("double类型的最大值是:"+doubleMax);//1.7976931348623157E308
System.out.println("double类型的最小值是:"+doubleMin);//4.9E-324
//布尔型boolean true真 false假
boolean b1 = true;
boolean b2 = false;
//字符型char
char c1 = 'a';//可以保存一个字符
char c2 = 97;//可以保存一个数字
char c3 = '中';//可以保存一个汉字
//char类型可以存数字,但是在打印时,会去查ASCII码表,把数字对应的字符拿出来使用
//ASCII码表值规定了数组0-127对应的字符,128-65535默认按照字符?来处理
System.out.println(c1);//a
System.out.println(c2);//a
System.out.println(c3);//中
}
}
测试代码: 求圆形的面积
package cn.tedu.basic;
import java.util.Scanner;
/**本类用于求圆的面积*/
public class TestCircleArea {
public static void main(String[] args) {
//公式:π*r*r
//1.提示用户输入要求圆的半径
System.out.println("请您输入要求圆的半径值:");
//2.接收用户输入的半径值
double r = new Scanner(System.in).nextDouble();
//3.根据半径进行计算圆的面积
double circleArea = 3.14*r*r;
//4.把圆的面积打印到控制台
System.out.println("当半径为"+r+"时,圆的面积为:"+circleArea);
}
}
3 基本类型的字面值(5条)
3.1 整数字面值是int类型
int x = 99999;//对,右面数据的字面值是int类型
int x = 99999999999;//错,右面数据的字面值是int类型,但是已经超出int的取值范围。
3.2 byte,short,char三种比int小的整数可以用范围内的值直接赋值
byte b1=127;//对,
byte b2=128;//错,超出byte范围
3.3 浮点数的字面值是double类型
double r =3.14;//对
float r =3.14;//错,右面的数据字面值是double,float是4字节存不下double类型的数据
3.4 字面值后缀L D F
long x =99999999999L;//字面值是int类型,需转成long类型的数据,加字面值后缀L即可
float b = 3.0F;//3.0字面值是double类型,加后缀F会变成float类型
double d = 3D;//3字面值是int类型,加后缀D,会变成double类型
3.5 进制前缀
0b - 标识这是2进制 ,如:0b0101
0 - 标识这是8进制, 8进制是三位,如: 023
0x - 标识这是16进制,如: 0x0001
\u -标识这是char类型,属于16进制
4 基本类型的类型转换
箭头开始的地方是小类型,箭头指向的地方是大类型
我们此处所指的"大"和"小",指的是对应类型的取值范围,不是字节数哦
4.1 小到大(隐式转换)
byte m = 120;
int n = m;//小转大,右面的m是小类型,给左面的n大类型赋值,可以直接使用
float f = 3.2f; double d = f; -->可以执行
4.2 大到小(显示转换)
容量大的类型转换为容量小的类型时必须使用强制类型转换。
int x = 999;
byte y =(byte)x;//大转小,右面x给左面的y小类型赋值,不可以,需要强制类型转换
转换过程中可能导致溢出或损失精度
例如:int i =128; byte b = (byte)i; //打印的结果是-128
因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。
浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入
例如:float f = 32.7f; int a2 =(int) f; //打印的结果是32
不能对boolean类型进行类型转换。
4.3 口诀:
小到大,直接转 大到小,强制转 浮变整, 小数没
低 ------------------------------------> 高
byte,short,char→ int→ long→float→double
5 运算规则(5条)
5.1 计算结果的数据类型,与最大数据类型一致
System.out.println(3/2);//1,int/int,得到的结果类型还是int
System.out.println(3/2d);//1.5,int/double。得到的结果是double
5.2 byte,short,char三种比int小的整数,运算时会先自动转换成int
byte a = 1;
byte b = 2;
byte c = (byte)(a+b);
//a+b会自动提升成int类型,右面得运算结果就是int大类型
//给左面的byte小类型赋值,不可以,需要强转。
5.3 整数运算溢出
整数运算,类似于一个钟表,转到最大时,再转会回到最小。
计算:光速运行一年的长度是多少米?3亿m/s
//溢出的现象:
//因为做了大的整型数据的运算,会超出int取值范围。解决方法:把整数提升成long类型。
System.out.println(300000000L * 60 * 60 * 24 * 365);
5.4 浮点数运算不精确
1-0.8 (这是一个现象,后续会学习解决方案)
5.5 浮点数的特殊值
Infinity 无穷大 3.14/0
NaN not a number 0/0.0 或 0.0/0
6 拓展 标识符命名风格
1.【强制】标识符命名均不能以数字开头,而且下划线或美元符号开始,也不能以下划线或美元符号结束
错误案例:1name/name / name / n a m e / n a m e name / name name/name
2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。
注意,即使纯拼音命名方式也要避免采用。
正确案例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。
错误案例:DaZheModule [打折模块] / getPingfenByName() [评分]
3.【强制】类名使用 UpperCamelCase 风格