Java:理解数据类型和变量

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("好习惯让编程更轻松!");
    }
}

总结:最重要的三点

  1. 选择合适的类型:根据数据特点选择最合适的数据类型

    • 整数用int,小数用double
    • 真假用boolean,字符用char
    • 大数字用long,小数字用byte
  2. 变量名要有意义:让代码自己说话

    • agea
    • studentCountsc
    • isPassedip
  3. 注意类型转换:避免数据丢失

    • 自动转换:小类型转大类型
    • 强制转换:大类型转小类型(小心!)
相关推荐
亭上秋和景清34 分钟前
数据在内存中的存储
java·开发语言
古城小栈34 分钟前
SpringBoot:声明式事务 和 编程式事务 的擂台霸业
java·spring boot·后端
小二·37 分钟前
Java基础教程之网络编程
java·开发语言·网络
泥嚎泥嚎38 分钟前
【Android】RecyclerView 刷新方式全解析:从 notifyDataSetChanged 到 DiffUtil
android·java
努力学算法的蒟蒻39 分钟前
day23(12.3)——leetcode面试经典150
java
luod43 分钟前
RabbitMQ简单生产者和消费者实现
java·rabbitmq
弥巷44 分钟前
【Android】深入理解Window和WindowManager
android·java
okseekw1 小时前
Java抽象类详解:从“不能生孩子”的类到模板设计模式实战
java
古城小栈1 小时前
Spring中 @Transactional 和 @Async注解 容易不消停
java·spring