【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包中的两个类

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();
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937845.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线预约陪诊小程序

一、前言 随着社会老龄化加剧以及人们健康意识的提高&#xff0c;就医过程中的陪伴需求日益增长。许多患者在面对复杂的医院环境、繁琐的就医流程时&#xff0c;需要有人协助挂号、候诊、取药等&#xff0c;而家属可能因工作繁忙无法全程陪同。同时&#xff0c;异地就医的患者更…

贪心算法【1】

文章目录 860. 柠檬水找零题目解析算法原理代码实现交换论证法 2208. 将数组和减半的最少操作次数题目解析算法原理代码实现交换论证法 179. 最大数题目解析算法原理代码实现 860. 柠檬水找零 题目链接&#xff1a;860. 柠檬水找零 题目解析 一杯柠檬水5块钱&#xff0c;每个…

【一文概述】常见的几种内外网数据交换方案介绍

一、内外网数据交换的核心需求 内外网数据交换的需求核心在于“安全、效率、合规”&#xff0c;而应用场景的多样性使得不同企业需要定制化的解决方案。通过结合业务特性和安全等级要求&#xff0c;企业能够选择适合的技术方案来实现高效、安全的内外网数据交换。 1、数据安全…

C# 中的Task

文章目录 前言一、Task 的基本概念二、创建 Task使用异步方法使用 Task.Run 方法 三、等待 Task 完成使用 await 关键字使用 Task.Wait 方法 四、处理 Task 的异常使用 try-catch 块使用 Task.Exception 属性 五、Task 的延续使用 ContinueWith 方法使用 await 关键字和异步方法…

Scala学习记录

dao --------> 数据访问 mode ------> 模型 service ---->业务逻辑 Main -------> UI:用户直接操作&#xff0c;调用Service 改造UI层&#xff1a;

使用Java得hutool工具实现验证码登录

使用Java的hutool工具实现验证码登录 1.先说一下流程图 2.导入工具包 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.12</version></dependency>3.流程梳理 3.1前端模版代码 …

java中Map接口的实现类

一、介绍 Map接口常用的实现类有HashMap和TreeMap。HashMap是基于哈希表的Map接口的实现&#xff0c;HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap通过哈希码对其内部的映射关系进行快速查找。TreepMap中的映射关系存在一定的顺序&#xff0c;如果希望Map集合中…

讯飞智文丨一键生成WordPPT

在当今数字化办公的浪潮中,Word和PPT已经成为职场人士日常工作的标配工具。然而,面对繁琐的内容编辑和格式调整任务,如何提升效率成了每个人的追求。而讯飞智文,一款结合人工智能技术的文字处理与演示文稿工具,正逐渐成为用户的得力助手。本文将详细介绍讯飞智文的功能特点…

Dot Foods EDI 需求分析及对接流程

Dot Foods 是一家美国领先的食品和非食品产品的中间批发分销商&#xff0c;主要为食品服务、零售和分销行业的客户提供服务&#xff0c;是北美大型食品中间分销商之一。Dot Foods &#xff08;以下简称 Dot&#xff09;的业务模式是通过整合多个供应商的产品&#xff0c;为客户…

感知机及python实现

感知机&#xff08;Perceptron&#xff09;是神经网络的基本构件之一&#xff0c;最初由Frank Rosenblatt在1957年提出。感知机是一种二分类的线性分类器&#xff0c;通过一个简单的线性函数将输入数据分类到两种类别之一。 基本原理 感知机的工作原理如下&#xff1a; 输入&…

信号滤波分析-低通分析(Matlab)

Matlab低通滤波 信号滤波分析-低通分析&#xff08;Matlab&#xff09; 【标价是仅源码的价格】 【有课程设计答辩PPT和设计文档报告】 需要或感兴趣可以随时联系博主哦&#xff0c;常在线秒回&#xff01; 低通滤波分析方案的设计包括&#xff1a; 1.信号生成原理 2.低通滤波…

ChatGPT客户端安装教程(附下载链接)

用惯了各类AI的我们发现每天打开网页还挺不习惯和麻烦&#xff0c;突然发现客户端上架了&#xff0c;懂摸鱼的人都知道这里面的道行有多深&#xff0c;话不多说&#xff0c;开整&#xff01; 以下是ChatGPT客户端的详细安装教程&#xff0c;适用于Windows和Mac系统&#xff1a…

影像组学+病理组学+深度学习人工智能应用

影像组学 基础学习内容&#xff1a; 特征提取&#xff1a;使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选&#xff1a;应用ICC、相关系数、mRMR、Lasso等方法。建模&#xff1a;使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估&#xff1a;通过A…

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇

蓝桥杯新年题解 | 第15届蓝桥杯迎新篇 2024年的蓝桥杯即将拉开序幕&#xff01;对于许多编程爱好者来说&#xff0c;这不仅是一次展示自我能力的舞台&#xff0c;更是一次学习和成长的机会。作为一名大一新生的小蓝&#xff0c;对蓝桥杯充满了期待&#xff0c;但面对初次参赛的…

Laplace-Beltrami 拉普拉斯-贝尔特拉米算子

Laplace-Beltrami 拉普拉斯-贝尔特拉米算子 Laplace-Beltrami算子是定义在黎曼流形上的一个二阶微分算子&#xff0c;它在微分几何和偏微分方程中都有重要的应用。在计算机图形学和几何处理中&#xff0c;Laplace-Beltrami算子通常用于网格处理&#xff0c;特别是在网格平滑、…

ISP算法之坏点校正DPC(二):Verilog硬件实现与仿真

DPC的算法讲解和MATLAB仿真参考上一节&#xff1a; ISP算法之坏点校正DPC(一)&#xff1a;MATLAB仿真验证-CSDN博客 本节讲解Verilog的硬件实现与仿真 行缓存设计 DPC算法是基于窗口邻域的像素级别算法&#xff0c;因此需要对实时到来的视频流进行行缓存&#xff0c;行缓存…

clearvoice 语音降噪、语音分离库

参看: https://github.com/modelscope/ClearerVoice-Studio/tree/main ClearVoice 提供了一个统一的推理平台,用于语音增强、语音分离以及视听目标说话人提取。 代码参看: https://github.com/modelscope/ClearerVoice-Studio/tree/main/clearvoice https://github.com/mode…

Linux(网络协议和管理)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

代理 IP 行业现状与未来趋势分析

随着互联网的飞速发展&#xff0c;代理 IP 行业在近年来逐渐兴起并成为网络技术领域中一个备受关注的细分行业。它在数据采集、网络营销、隐私保护等多个方面发挥着重要作用&#xff0c;其行业现状与未来发展趋势值得深入探讨。 目前&#xff0c;代理 IP 行业呈现出以下几个显著…

[Java] 使用 VSCode 来开发 Java

目录 前言Java 环境怎么看自己是否已经配置完成&#xff1f;安装 JDK安装 Maven 环境修改 Maven 依赖源 完善 VS Code配置插件配置 Maven配置 Maven Settings配置 Maven 可执行文件地址 前言 由于使用 VSCode 编码已经成为习惯&#xff0c;并且它确实相对其他的 IDE 较为轻量化…