Java的基本数据类型(8个)
Java有8种基本数据类型,我把它们分成4组
第1组:整数组(存整数)
Java
public class IntegerTypes {
public static void main(String[] args) {
System.out.println("=== 整数组成员 ===");
// 1. byte:最小的整型,适合存小数字
byte myByte = 100; // 范围:-128 ~ 127
System.out.println("byte值: " + myByte + " (占用1个字节)");
// 2. short:短整型,比byte大一点
short myShort = 30000; // 范围:-32768 ~ 32767
System.out.println("short值: " + myShort + " (占用2个字节)");
// 3. int:最常用的整型(默认选择)
int myInt = 1000000; // 范围:约±21亿
System.out.println("int值: " + myInt + " (占用4个字节)");
// 4. long:大整数,数字后要加L
long myLong = 10000000000L; // 范围:非常大!
System.out.println("long值: " + myLong + " (占用8个字节)");
// 实际应用:学生信息
byte studentAge = 18; // 年龄用byte足够
short studentId = 12345; // 学号用short
int population = 1400000000; // 中国人口,用int
long worldPopulation = 7800000000L; // 世界人口,用long
}
}
第2组:浮点组(存小数)
Java
public class FloatTypes {
public static void main(String[] args) {
System.out.println("=== 浮点组成员 ===");
// 1. float:单精度小数,数字后要加F
float myFloat = 3.14F; // 精度约6-7位小数
System.out.println("float值: " + myFloat + " (占用4个字节)");
// 2. double:双精度小数(默认选择)
double myDouble = 3.1415926535; // 精度约15位小数
System.out.println("double值: " + myDouble + " (占用8个字节)");
// 实际应用:购物计算
float applePrice = 5.99F; // 苹果单价
double totalCost = applePrice * 2.5; // 总价
System.out.println("2.5斤苹果总价: " + totalCost + "元");
// 科学计算示例
double pi = 3.141592653589793;
double earthRadius = 6371.0; // 地球半径(公里)
double circleArea = pi * earthRadius * earthRadius;
System.out.println("地球表面积约: " + circleArea + "平方公里");
}
}
第3组:字符组(存单个字符)
Java
public class CharType {
public static void main(String[] args) {
System.out.println("=== 字符类型 ===");
// char:存单个字符,用单引号
char myChar = 'A';
char chineseChar = '我';
char numberChar = '7';
char symbolChar = '@';
System.out.println("英文字母: " + myChar);
System.out.println("中文字符: " + chineseChar);
System.out.println("数字字符: " + numberChar);
System.out.println("符号字符: " + symbolChar);
// char可以存储Unicode字符
char heart = '\u2764'; // 心形符号的Unicode
char smiley = '\u263A'; // 笑脸符号的Unicode
System.out.println("特殊符号: " + heart + " " + smiley);
// 实际应用:密码验证
char firstChar = 'a';
char lastChar = 'z';
System.out.println("字母范围: " + firstChar + " 到 " + lastChar);
// char和int的转换
char letter = 'A';
int asciiValue = letter; // 自动转换为ASCII码
System.out.println("字符'A'的ASCII码是: " + asciiValue);
int number = 66;
char correspondingChar = (char) number; // 强制转换为字符
System.out.println("ASCII码66对应的字符是: " + correspondingChar);
}
}
第4组:布尔组(真假判断)
Java
public class BooleanType {
public static void main(String[] args) {
System.out.println("=== 布尔类型 ===");
// boolean:只有两个值 true 或 false
boolean isJavaFun = true;
boolean isFishFly = false;
System.out.println("学Java有趣吗?" + isJavaFun);
System.out.println("鱼会飞吗?" + isFishFly);
// 实际应用:条件判断
boolean isRaining = true;
boolean hasUmbrella = false;
System.out.println("正在下雨: " + isRaining);
System.out.println("有雨伞: " + hasUmbrella);
if (isRaining && !hasUmbrella) {
System.out.println("结论:你会被淋湿!");
} else {
System.out.println("结论:你不会被淋湿!");
}
// 更多实际例子
boolean isWeekend = true;
boolean isSunny = false;
boolean isHoliday = true;
boolean shouldGoOut = isWeekend && isSunny;
boolean canSleepLate = isWeekend || isHoliday;
System.out.println("应该出去玩吗?" + shouldGoOut);
System.out.println("可以睡懒觉吗?" + canSleepLate);
}
}
变量:数据的"存储盒子"
变量三要素:类型、名字、值
Java
public class VariableDemo {
public static void main(String[] args) {
System.out.println("=== 变量基础 ===");
// 变量声明三部曲
// 1. 声明变量(创建盒子)
int age;
// 2. 赋值(往盒子里放东西)
age = 18;
// 3. 使用变量(从盒子里取东西)
System.out.println("我的年龄是: " + age + "岁");
// 也可以一步到位
String name = "小明";
double height = 175.5;
System.out.println("姓名: " + name);
System.out.println("身高: " + height + "厘米");
// 变量可以重新赋值(但类型不能变)
age = 19; // ✅ 正确:改变盒子的内容
System.out.println("一年后,我的年龄是: " + age + "岁");
// age = "十九岁"; // ❌ 错误:不能改变盒子的类型
}
}
变量命名规则(重要!)
Java
public class NamingRules {
public static void main(String[] args) {
System.out.println("=== 变量命名规则 ===");
// ✅ 正确的命名方式
int age = 18; // 简单清晰
String studentName = "张三"; // 驼峰命名法
double totalPrice = 99.99; // 描述性名称
boolean isPassed = true; // 布尔变量用is/has开头
final double PI = 3.14159; // 常量全大写
// ❌ 错误的命名方式(不要这样做!)
// int 1age = 18; // 不能以数字开头
// String student name = "李四"; // 不能有空格
// double class = 3.14; // 不能用关键字
// int a = 10; // 太简单,没意义
// 好的命名示例
int numberOfStudents = 45; // 清晰易懂
double averageScore = 85.5; // 一看就知道是什么
boolean hasPermission = true; // 布尔变量命名规范
String filePath = "/home/user"; // 描述清楚
System.out.println("好名字让代码更易读!");
}
}
类型转换:数据类型的"变形术"
自动类型转换(小转大)
Java
public class AutoConversion {
public static void main(String[] args) {
System.out.println("=== 自动类型转换 ===");
// byte -> short -> int -> long -> float -> double
// char -> int
// 小类型自动转大类型(安全转换)
byte smallNumber = 100;
int bigNumber = smallNumber; // byte自动转int
System.out.println("byte转int: " + bigNumber);
int count = 100;
double price = count; // int自动转double
System.out.println("int转double: " + price);
char letter = 'A';
int ascii = letter; // char自动转int
System.out.println("char转int: " + ascii);
// 实际应用:计算平均值
int totalScore = 450;
int studentCount = 5;
double average = totalScore / (double) studentCount; // 自动转换
System.out.println("平均分: " + average);
}
}
强制类型转换(大转小)
Java
public class ForceConversion {
public static void main(String[] args) {
System.out.println("=== 强制类型转换 ===");
// 大类型转小类型需要强制转换(可能丢失数据)
double bigNumber = 99.99;
int smallNumber = (int) bigNumber; // 强制转换,小数部分丢失
System.out.println("double 99.99 转 int: " + smallNumber);
long bigValue = 100000L;
int normalValue = (int) bigValue; // 强制转换
System.out.println("long转int: " + normalValue);
// 注意:超出范围会出问题!
int largeInt = 200;
byte tinyByte = (byte) largeInt; // byte最大127,这里会溢出
System.out.println("int 200 转 byte: " + tinyByte + " (溢出错误!)");
// 实际应用:商品价格取整
double originalPrice = 299.99;
int roundedPrice = (int) originalPrice; // 去掉小数部分
System.out.println("原价: " + originalPrice);
System.out.println("取整后: " + roundedPrice);
}
}
常量:不变的量
Java
public class ConstantDemo {
public static void main(String[] args) {
System.out.println("=== 常量 ===");
// 使用final关键字定义常量
final double PI = 3.1415926535; // 数学常数π
final int DAYS_IN_WEEK = 7; // 一周天数
final String COMPANY_NAME = "阿里巴巴"; // 公司名称
System.out.println("圆周率: " + PI);
System.out.println("一周有 " + DAYS_IN_WEEK + " 天");
System.out.println("公司: " + COMPANY_NAME);
// 常量一旦赋值就不能修改
// PI = 3.14; // ❌ 错误:不能修改常量
// 实际应用:计算圆面积
double radius = 5.0;
double circleArea = PI * radius * radius;
System.out.println("半径为5的圆面积: " + circleArea);
// 配置信息用常量
final int MAX_LOGIN_ATTEMPTS = 3;
final String DATABASE_URL = "jdbc:mysql://localhost:3306/test";
final boolean DEBUG_MODE = true;
System.out.println("最大登录尝试次数: " + MAX_LOGIN_ATTEMPTS);
System.out.println("数据库连接: " + DATABASE_URL);
System.out.println("调试模式: " + DEBUG_MODE);
}
}
综合实战:学生成绩管理系统
Java
public class StudentGradeSystem {
public static void main(String[] args) {
System.out.println("=== 学生成绩管理系统 ===");
// 学生信息(使用合适的数据类型)
String studentName = "张三";
byte studentAge = 18;
int studentId = 2023001;
char studentClass = 'A';
// 各科成绩
byte chineseScore = 85; // 0-100分,用byte足够
byte mathScore = 92;
byte englishScore = 78;
byte scienceScore = 90;
// 计算总分和平均分
int totalScore = chineseScore + mathScore + englishScore + scienceScore;
double averageScore = totalScore / 4.0; // 用double存小数
// 判断是否及格
boolean isPassed = averageScore >= 60;
// 判断成绩等级
char grade;
if (averageScore >= 90) {
grade = 'A';
} else if (averageScore >= 80) {
grade = 'B';
} else if (averageScore >= 70) {
grade = 'C';
} else if (averageScore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
// 输出学生信息
System.out.println("===== 学生信息 =====");
System.out.println("姓名: " + studentName);
System.out.println("年龄: " + studentAge);
System.out.println("学号: " + studentId);
System.out.println("班级: " + studentClass + "班");
System.out.println("\n===== 成绩单 =====");
System.out.println("语文: " + chineseScore + "分");
System.out.println("数学: " + mathScore + "分");
System.out.println("英语: " + englishScore + "分");
System.out.println("科学: " + scienceScore + "分");
System.out.println("\n===== 统计 =====");
System.out.println("总分: " + totalScore + "分");
System.out.println("平均分: " + averageScore + "分");
System.out.println("是否及格: " + (isPassed ? "是" : "否"));
System.out.println("成绩等级: " + grade);
// 类型转换示例
System.out.println("\n===== 类型转换示例 =====");
double preciseAverage = (double) totalScore / 4; // 强制转换
System.out.println("精确平均分: " + preciseAverage);
int roundedAverage = (int) averageScore; // 去掉小数部分
System.out.println("取整平均分: " + roundedAverage);
}
}
常见错误和注意事项
错误示例:
Java
public class CommonMistakes {
public static void main(String[] args) {
// 1. 未初始化就使用变量
// int x;
// System.out.println(x); // ❌ 错误:变量未初始化
// 2. 超出数据类型范围
// byte b = 200; // ❌ 错误:byte最大127
// int i = 10000000000; // ❌ 错误:超出int范围
// 3. 类型不匹配
// int num = 3.14; // ❌ 错误:double不能直接赋给int
// 正确做法:int num = (int)3.14;
// 4. 使用错误的字面值
// long l = 10000000000; // ❌ 错误:需要加L
// 正确做法:long l = 10000000000L;
// 5. 变量名冲突
// int age = 18;
// int age = 20; // ❌ 错误:重复定义
System.out.println("记住这些常见错误,避免踩坑!");
}
}
正确示例:
Java
public class BestPractices {
public static void main(String[] args) {
System.out.println("=== 最佳实践 ===");
// 1. 选择合适的数据类型
byte age = 25; // ✅ 年龄用byte足够
int population = 1400000000; // ✅ 人口用int
double price = 19.99; // ✅ 价格用double
// 2. 使用有意义的变量名
int numberOfStudents = 45; // ✅ 清晰易懂
// int n = 45; // ❌ 太简略
// 3. 及时初始化变量
int count = 0; // ✅ 声明时就初始化
String name = ""; // ✅ 给初始值
// 4. 常量用final修饰
final double TAX_RATE = 0.13; // ✅ 税率是常量
// 5. 注意类型转换
double result = 10 / 3.0; // ✅ 得到3.333...
// double result = 10 / 3; // ❌ 得到3.0
System.out.println("好习惯让编程更轻松!");
}
}
总结:最重要的三点
-
选择合适的类型:根据数据特点选择最合适的数据类型
- 整数用
int,小数用double - 真假用
boolean,字符用char - 大数字用
long,小数字用byte
- 整数用
-
变量名要有意义:让代码自己说话
age比a好studentCount比sc好isPassed比ip好
-
注意类型转换:避免数据丢失
- 自动转换:小类型转大类型
- 强制转换:大类型转小类型(小心!)