Java中包和导包、Scanner类、输入源的详细讲解

 更新时间:2025年08月28日 08:52:37   作者:Code哈哈笑  
包是Java中用来组织类和接口的一种机制,通过使用包,可以避免命名冲突,同时也方便管理代码结构,这篇文章主要介绍了Java中包和导包、Scanner类、输入源的详细讲解,文中通过代码介绍的非常详细,需要的朋友可以参考下

1. 包

1.1 什么是包?

举个例子,你和你的同学有不同的家庭,你们都有自己的爸爸妈妈,都有自己的家。在自己的家中你们可以按照自己爱好摆放东西,都互不干扰。但是,假如你们的家都在一起,你们就不能按照自己的喜好摆放东西了,你们之间会相互影响。

为了让每个程序之间直接有相对好的隔离,就设置了包。包其实就是一个串文件夹,在不同的文件夹中可以设置相同的名字的文件。

1.2 包的主要作用

包(Package)是一种将类和接口组织在一起的机制。

  1. 命名空间管理
    包提供了一种命名空间管理机制,避免类名冲突。通过将类放在不同的包中,可以确保类名的唯一性。例如,多个项目中可能会有多个名为 Logger 的类,但通过将它们放在不同的包中,可以避免命名冲突。

  2. 访问控制
    包还提供了访问控制机制。通过使用不同的访问修饰符(如 public、protected、默认(即不写访问修饰符)和 private),可以控制类、方法和变量的可见性。例如,一个类的成员可以对同一个包中的其他类可见,但对其他包中的类不可见。

  3. 代码组织
    包有助于将相关的类和接口组织在一起,使代码更易于管理和维护。通常,一个包会包含一组具有相似功能或用途的类和接口。例如,java.util 包包含了各种实用工具类,如 List、Map、Set 等。

1.3 src文件

src 文件夹(或目录)通常代表“source”的缩写,用于存放项目的源代码文件。这个文件夹是项目的核心部分,包含了所有的业务逻辑、类定义、函数实现等代码文件。

项目的标准目录结构如下:

子文件夹组织:

src 文件夹通常会进一步细分为多个子文件夹,以更好地组织代码。
例如:

  • main/java:存放主要的 Java 源代码文件。
  • main/resources:存放资源文件,如配置文件、静态文件等。
  • test/java:存放测试代码文件。
  • test/resources:存放测试资源文件。

1.4 创建包

包时在src文件下创建的

接着创建包

包名通常是小写的,并且通常使用公司域名的逆序来命名,以确保全局唯一性。

把图片中的package_name改为:com.example.myapp

这个包名com.examplemyapp是一个文件的名字吗?

我们看一下src文件的有没有com.example.myapp文件

src文件夹中只有com文件夹,没有com.example.myapp文件,其实.把包的名字分隔了,分割成三个镶嵌的文件夹。

com.example.myapp文件夹中创建Myclass

在 Java 源文件的顶部,使用 package 关键字来指定包名。

目前该包的目录结构为:

2. 导包

2.1 什么是导包?

“导包”指的是使用 import 语句将一个类或接口从一个包中引入到当前的编译单元中,以便在代码中可以直接使用这些类或接口,而不需要每次都写完整的类名或接口名。

导包的作用:

  • 简化代码
    导包可以让你在代码中直接使用类或接口的简单名称,而不是完整的类名或接口名。这使得代码更简洁、易读。
    例如,java.util.ArrayList 可以简化为 ArrayList。
  • 避免命名冲突
    当两个不同的包中有同名的类或接口时,通过导包可以明确指定你使用的是哪个包中的类或接口。
    例如,java.util.Date 和 java.sql.Date 都有 Date 类,通过导包可以区分它们。

2.2 导包的语法

导入单个类或接口

import package_name.ClassName;

package_name:包的名子。
ClassName:类的名字。

导入整个包中的所有类和接口

import package_name.*;

package_name:包的名子。

*:表示该包下的所有类

静态导入(Java 5 及以上)

静态导入允许你直接使用类中的静态成员(如静态方法和静态字段),而不需要类名前缀。

import static package_name.ClassName.staticMember
  • static 关键字:表示静态导入。
  • package_name:包的名子。
  • ClassName:类的名字。
  • staticMember:类中静态成员变量或静态方法。

示例:

  1. 单个类的导入,导入ArrayList

    import java.util.ArrayList;
    
    public class InOut {
        public static void main(String[] args){
            // 创建数组
            ArrayList<String> arr = new ArrayList<>();
            // 添加元素
            arr.add("Hello");
            arr.add("World");
            // 打印
            System.out.println(arr);
        }
    

    ArrayListjava.util包中的泛型类,是一个动态数组。

  2. 整个包的导入,使用ArrayList和HashMap类

    import java.util.*;
    
    public class InOut {
        public static void main(String[] args){
            // 创建数组
            ArrayList<String> arr = new ArrayList<>();
            // 添加元素
            arr.add("Hello");
            arr.add("World");
            // 打印
            System.out.println(arr);
    
            HashMap<String, Integer> map = new HashMap<>();
            map.put("One", 1);
            map.put("Two", 2);
            System.out.println(map);
        }
    }
    

    ArrayListHashMapjava.util包中的两个类

2.3 习题

关于包的说法, 下列错误的是:( )

A.包是一组类的集合
B.包能防止类的名字冲突
C.import 语句能够导入一个指定的包
D.import static 能够导入一些静态方法

答:C

import java.util.Arrays;

import java.util;  // 报错

import java.util.*;

第1行导入的是具体的包中的类。

第2行报错,不能导入指定包。

第3行导入的是包下的所有类,用到这个包底下哪个类就回调用哪个。

3. Scanner 类

3.1 什么是 Scnner 类?

我们人与人之间的交流一般都是通过对话,但是我们怎么与程序进行对话呢?

答:用Scanner类。

Scanner 类是 Java 标准库中的一个实用工具类,用于从标准输入(通常是键盘输入)或其他输入源(如文件或字符串)读取不同类型的输入数据。Scanner 类提供了多种方法来读取和解析不同类型的数据,如整数、浮点数、字符串等。

主要特点:

  • 输入源多样:Scanner 可以从多种输入源读取数据,包括标准输入、文件、字符串等。
  • 类型丰富:Scanner 支持读取多种数据类型,如 int、double、String 等。
  • 分隔符灵活:Scanner 使用分隔符(默认为空白字符,包括空格、制表符、换行符等)来分隔输入数据,但也可以自定义分隔符。
  • 简单易用:Scanner 提供了丰富的 API,使得读取和解析输入数据变得非常简单。

3.2 创建一个 scanner 对象

Scanner类在java.util包中,使用Scanner需要调包。
示例:

import java.util.Scanner;

public class InOut {
    public static void main(String[] args){
        Scanner  sc = new Scanner(System.in);
        //读取字符串
        System.out.println("请输入您的名字");
        String s = sc.next();
        // 读取整型
        System.out.println("请输入您的年龄");
        int n = sc.nextInt();
        
        //打印
        System.out.println(s+"年龄是:"+n+"岁");
		
		// 使用结束后释放资源
		sc.close()
    }
}

同学们可以发现,创建Scanner对象的时传入了一个参数System.in,为什么要传参呢?

在创建 Scanner 对象时传递 System.in 参数是为了指定输入源。System.in 是一个标准输入流,通常用于从键盘读取用户输入。通过传递 System.inScanner 构造函数,你可以让 Scanner 从标准输入(即键盘)读取数据。

3.3 输入源

  1. 标准输入 (System.in)
    System.in 是一个 InputStream 对象,表示标准输入流,通常是从键盘输入的数据。

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入您的名字:");
            String name = scanner.nextLine();
            System.out.println("你好," + name);
            scanner.close();
        }
    }
    
  2. 字符串输入
    从字符串读取数据时,可以传递一个 String 对象给 Scanner 构造函数。

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            String input = "100 200 300";
            Scanner scanner = new Scanner(input);
            while (scanner.hasNextInt()) {
                int number = scanner.nextInt();
                System.out.println(number);
            }
            scanner.close();
        }
    }
    
  3. 文件输入:
    从文件读取数据时,可以传递一个 File 对象给 Scanner 构造函数。

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            try {
                File file = new File("input.txt");
                Scanner scanner = new Scanner(file);
                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    System.out.println(line);
                }
                scanner.close();
            } catch (FileNotFoundException e) {
                System.out.println("文件未找到!");
                e.printStackTrace();
            }
        }
    }
    

4. Scanner(System.in) 常用的方法

4.1 读取数值

方法名描述
next()读取下一个 token(默认以空白字符分隔)。
nextLine()读取下一行(字符串)。
nextInt()读取下一个整数。
nextDouble()读取下一个双精度浮点数。
nextBoolean()读取下一个布尔值。
nextByte()读取下一个字节。
nextShort()读取下一个短整数。
nextLong()读取下一个长整数。
nextFloat()读取下一个单精度浮点数。

nextLine():nextLine() 会读取包括空格在内的所有字符,直到遇到换行符\n为止。
next():next() 方法读取输入中的下一个 token,并返回一个字符串。一个 token 是由空白字符分隔的一段连续的字符序列。默认的分隔符是空白字符,包括空格( )、制表符(\t)、换行符(\n)、回车符(\r)等。例如,输入字符串 “Hello World” 会被 next() 方法分成两个 token:“Hello” 和 “World”。

示例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

		System.out.print("请输入您的名字:");
        String name = scanner.nextLine(); // 读取一行(字符串)
        System.out.println("你好," + name);

        System.out.print("请输入您的爱好(用空格分隔):");
        String hobbies = scanner.next(); // 读取下一个 token
        System.out.println("你的爱好是:" + hobbies);

        System.out.print("请输入您的年龄:");
        int age = scanner.nextInt(); // 读取下一个整数
        System.out.println("你的年龄是:" + age);

        System.out.print("请输入您的身高(米):");
        double height = scanner.nextDouble(); // 读取下一个双精度浮点数
        System.out.println("你的身高是:" + height + " 米");

        scanner.close();
    }
}

4.2 检查输入

在使用 Scanner 类读取输入时,检查输入的作用非常重要。这些检查方法可以帮助你在读取数据之前验证输入的类型和格式,从而避免潜在的运行时错误和异常。

方法描述
hasNext()检查是否还有下一个 token(默认以空白字符分隔)。
hasNextLine()检查是否还有下一行。
hasNextInt()检查是否还有下一个整数。
hasNextDouble()检查是否还有下一个双精度浮点数。
hasNextFloat()检查是否还有下一个单精度浮点数。
hasNextLong()检查是否还有下一个长整数。
hasNextByte()检查是否还有下一个字节。
hasNextShort()检查是否还有下一个短整数。

示例:

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个整数:");
        if (scanner.hasNextInt()) {
            int number = scanner.nextInt();
            System.out.println("你输入的整数是:" + number);
        } else {
            System.out.println("输入的不是整数!");
            scanner.next(); // 清除错误输入
        }

        scanner.close();
    }
}

总结 

到此这篇关于Java中包和导包、Scanner类、输入源的文章就介绍到这了,更多相关Java包和导包、Scanner类、输入源内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java的四种常用输入方法你会几种

    java的四种常用输入方法你会几种

    这篇文章主要介绍了java四种常用输入方法的相关资料,分别是Scanner、System、命令行和JOptionPane,每种方法都有其特点和适用场景,文中提供了详细的代码示例,需要的朋友可以参考下
    2025-03-03
  • java中对象转json字符串的三种常用方式

    java中对象转json字符串的三种常用方式

    本文主要介绍了java中对象转json字符串的三种常用方式,包含Jackson库,Gson库和Hutool工具类这三种,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Java实现最小高度树

    Java实现最小高度树

    本文主要介绍了Java实现最小高度树,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • 浅析SpringBoot中过滤器配置与应用场景

    浅析SpringBoot中过滤器配置与应用场景

    过滤器是 Web 三大组件之一,也是项目中常用的工具,这篇文章主要介绍一下过滤器的概念及在 Spring Boot 中的常用使用方法,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-05-05
  • java排序算法图文详解

    java排序算法图文详解

    这篇文章主要为大家详细介绍了Java经典排序算法之归并排序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望可以对你有所帮助
    2021-07-07
  • Java http加签、验签实现方案详解

    Java http加签、验签实现方案详解

    这篇文章主要介绍了Java http加签、验签实现方案详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-07-07
  • 解读.idea文件的使用及说明

    解读.idea文件的使用及说明

    文章介绍了IntelliJ IDEA项目中的.idea文件夹及其作用,包括编译配置、工作空间配置、项目标识文件、编码配置、jar包信息以及插件配置等,同时,文章提醒在版本控制时应排除.idea文件夹,以避免版本冲突
    2025-01-01
  • IDEA如何一键部署SpringBoot项目到服务器

    IDEA如何一键部署SpringBoot项目到服务器

    文章介绍了如何在IDEA中部署SpringBoot项目到服务器,使用AlibabaCloudToolkit插件进行配置部署,步骤包括设置服务名称、选择文件上传类型、选择jar文件、添加服务器信息、输入上传路径、选择上传后执行的脚本以及执行前的操作命令
    2024-12-12
  • SpringBoot数据校验及多环境配置的问题详解

    SpringBoot数据校验及多环境配置的问题详解

    这篇文章主要介绍了SpringBoot数据校验及多环境配置,本文以SpringBoot-02-Config 项目为例,给大家详细介绍,需要的朋友可以参考下
    2021-09-09
  • Java NIO Path接口和Files类配合操作文件的实例

    Java NIO Path接口和Files类配合操作文件的实例

    下面小编就为大家分享一篇Java NIO Path接口和Files类配合操作文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11

最新评论