Java基础【之】8种基本数据类型、引用类型、变量的使用
1.数据类型
- Java语言是强类型编程语言,所有数据都必须具有明确的数据类型,先声明后使用
- 每种数据类型初始化时,在内存空间的占用大小是不同的
1.1.基本数据类型
整数类型(byte、short、int、long)
- 数据存储
以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位
一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位 。
- bit: 计算机中的最小存储单位。
- byte:计算机中基本存储单元。
- 换算:1EB=1024PB、1PB=1024TB、1TB=1024GB、1GB=1024MB 、1MB=1024KB 、1KB=1024B、 1B=8bit
- byte ~ 1 字节
- short ~ 2 字节
- int ~ 4 字节
- long ~ 8 字节
public static void main(String[] args) {
//-128 ~ 127
System.out.println("byte 表示范围:" + Byte.MIN_VALUE + " ~ " + Byte.MAX_VALUE);
//-32768 ~ 32767
System.out.println("short 表示范围:" + Short.MIN_VALUE + " ~ " + Short.MAX_VALUE);
//-2147483648 ~ 2147483647
System.out.println("int 表示范围:" + Integer.MIN_VALUE + " ~ " + Integer.MAX_VALUE);
//-9223372036854775808 ~ 9223372036854775807
System.out.println("long 表示范围:" + Long.MIN_VALUE + " ~ " + Long.MAX_VALUE);
}
浮点类型(float、double)
浮点型常量有两种表示形式:
十进制:3.14 、3.1f
科学计数法:3.14e2 、10E1 、10E2 、 10E-2float:单精度,尾数可以精确到7位有效数字。
单精度float 4字节 -3.403E38 ~ 3.403E38double:双精度,精度是float的两倍。通常采用此类型。
双精度double 8字节 -1.798E308 ~ 1.798E308浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
public static void main(String[] args) {
//10.0
System.out.println(10F);
System.out.println(10.0F);
System.out.println(10E0);
//100.0
System.out.println(10E1);
//98.0
System.out.println(10E1 - 2);
//1000.0
System.out.println(10E2);
//float 表示范围:1.4E-45 ~ 3.4028235E38
System.out.println("float 表示范围:" + Float.MIN_VALUE + " ~ " + Float.MAX_VALUE);
//double 表示范围:4.9E-324 ~ 1.7976931348623157E308
System.out.println("double 表示范围:" + Double.MIN_VALUE + " ~ " + Double.MAX_VALUE);
}
编码(ASCII、Unicode、UTF-8)
- ASCII 码
在计算机内部,所有数据都使用二进制表示。
每一个二进制位(bit)有 0 和 1 两种状态,8 个二进制位就可以组合出 256 种状态.从0000000 到 11111111。
上个世纪60年代,美国制定了一套字符编码,规定了128个字符的编码,。只占用了一个字节的后面7位,最前面的1位统一规定为0。
比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)
- Unicode 码
每个符号用三个或四个字节表示,将世界上所有的符号都纳入其中。
每一个符号都给予一个独一无二的编码,使用 Unicode 没有乱码的问题。
- UTF-8 码
UTF-8 是 Unicode 编码的一种实现方式。
使用 1~6 个字表示一个符号,根据不同的符号而变化字节长度。
字符类型(char)
- 字符类型占用 2字节
- 定义形式:用单引号括起来
- 特殊转义字符:用反斜线声明
//---------------
//ab退格:【b】
//---------------
//ab换行:【a
//b】
//---------------
//b】
//---------------
//ab制表:【a b】
//---------------
//ab双引号:【a"b】
//---------------
//ab单引号:【a'b】
//---------------
//反斜线:【ab=>a\b】
//---------------
public static void main(String[] args) {
char a = 'a';
char b = 'b';
//特殊转义字符,用反斜线声明
char _n = '\n';
System.out.println("---------------");
System.out.println("ab退格:【" + a + "\b" + b + "】");
System.out.println("---------------");
System.out.println("ab换行:【" + a + "\n" + b + "】");
System.out.println("---------------");
System.out.println("ab回车:【" + a + "\r" + b + "】");
System.out.println("---------------");
System.out.println("ab制表:【" + a + "\t" + b + "】");
System.out.println("---------------");
System.out.println("ab双引号:【" + a + "\"" + b + "】");
System.out.println("---------------");
System.out.println("ab单引号:【" + a + "\'" + b + "】");
System.out.println("---------------");
System.out.println("反斜线:【ab=>" + a + "\\" + b + "】");
System.out.println("---------------");
}
布尔类型(boolean)
- 布尔类型:boolean,用来判断逻辑条件
- boolean类型只存在2个值:true、false
在编译后的字节码中:用1表示true,用0表示false。
@SneakyThrows
public static void main(String[] args) {
boolean mark = true;
boolean mark2 = false;
if (mark) {
System.out.println("001---true");
}
while (mark) {
System.out.println("002---true");
Thread.sleep(1000);
}
do {
System.out.println("003---true");
Thread.sleep(1000);
} while (mark);
}
1.2.引用类型(class、interace、[])
- 类(class)
- 接口(interace)
- 数组([])
//类
class TestClass {
}
//接口
interface TestInterface {
//接口函数
void aaa();
}
public class Main {
public static String a = "a";
public static String[] arrayA = new String[]{"1", "2", "3"};
public static int b = 10;
public static int[] arrayB = new int[]{1, 2, 3, 4, 5};
public static void main(String[] args) {
TestClass testClass = new TestClass();
TestInterface testInterface = new TestInterface() {
@Override
public void aaa() {
}
};
//基本数据类型,默认输出值
System.out.println(a); //a
System.out.println(b); //10
//引用数据类型,默认打印的是引用地址
System.out.println(arrayA);//[Ljava.lang.String;@74a14482
System.out.println(arrayB);//[I@1540e19d
System.out.println(testClass);//com.abl.javabasis._04_type.TestClass@677327b6
System.out.println(testInterface);//com.abl.javabasis._04_type.Main$1@14ae5a5
}
}
1.3.自动类型转换
- 自动类型转换:容量小的类型自动转换为容量大的数据类型。
从小到大排序为:(byte char short)、int、long、float、double
出现多种类型的数据混合运算时,自动将数据转换成容量最大的那种数据类型,然后进行计算。
- 注意:
1.byte、short、char之间不会相互转换,在计算时首先会被转换为int类型。
2.boolean 类型不能参与运算。
3.任何基本数据类型和字符串进行连接运算时,值将自动转化为字符串类型。
public static void main(String[] args) {
// 1.byte、short、char 之间不会相互转换,在计算时首先会被转换为int类型。
byte byte_ = 0;
short short_ = 1;
char char_1 = 'a';
char char_2 = 'z';
System.out.println(byte_);//0
System.out.println(short_);//1
System.out.println(char_1);//a
System.out.println(char_2);//z
System.out.println(char_1 + short_); //98
System.out.println(byte_ + char_2); //122
System.out.println(char_1 + char_2); //219
// 2.boolean 类型不能参与运算。
// 3.任何基本数据类型和字符串进行连接运算时,值将自动转化为字符串类型。
String str = "String";
System.out.println(str+byte_); //String0
System.out.println(str+short_); //String1
System.out.println(str+char_1); //Stringa
System.out.println(str+char_2); //Stringz
}
1.4.强制类型转换
- 情况1:将大容量数据类型,转换为小容量数据类型时,会丢失精度。
- 情况2:将不同类型的引用对象进行相互转换时,可能出现报错信息。
- 注意:
1.字符串一般通过基本类型对应的包装类的parse*方法,把字符串转换成基本类型。
2.boolean类型不可以转换为其它的数据类型。
public static void main(String[] args) {
long long_ = 99999999999L;
System.out.println(long_);//99999999999
int short_ = (int) long_;
System.out.println(short_);//1215752191
String str = "99999999999";
double v = Double.parseDouble(str);//9.9999999999E10
long l = Long.parseLong(str);//99999999999
System.out.println(v);
System.out.println(l);
int i = Integer.parseInt(str);//报错-NumberFormatException
System.out.println(i);
}
2.变量
- 变量:
变量是程序中最基本的存储单元。三部分组成,变量类型、变量名、值(一块内存区域)
变量指向内存中保存的数据,(指向一块内存区域)
变量必须先声明,后使用- 访问:使用变量名来访问这块区域的数据
- 作用域:其定义所在的一对{ }内,变量只有在其作用域内才有效,同一个作用域内,不能定义重名的变量
语法
<数据类型> <变量名>;
<数据类型> <变量名> = <初始化值>;
int a ;
int a = 10;
赋值操作
<变量名> = <新的值>;
a = 20;
class A {
//成员变量/实例变量
public String paramStr = "666";
//类变量/静态变量
public static String paramStrStatic = "999";
//普通方法
//param: 参数
public void test(String param) {
//局部变量
int a = 0;
System.out.println("A -- test -- " + param);
}
//类方法/静态方法
//param 参数
public static void testStatic(String param) {
//局部变量
int a = 0;
System.out.println("A -- testStatic -- " + param);
}
}
public class Main {
public static void main(String[] args) {
//a: 局部变量/局部对象实例
A a = new A();
//通过对象实例,调用普通方法
a.test(" 略略略111~ ");
//通过对象实例,调用静态方法/类方法
a.testStatic(" 略略略222~ ");
//通过类名,调用静态方法/类方法
A.testStatic(" 略略略333~ ");
}
}
《上一篇:关键字、保留字、命名规范》
《下一篇:运算、位运算、比较、循环与控制》
《目录:Java渐进式学习》
《幕》
- 留白 —<老吉>
- ~ 今 ~ ❀ ~ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀❀❀❀ ❀❀❀❀❀❀❀