java(三十六)IO流(五)标准输入输出

Java 中有三个标准"流", 他们被统称为standard streams

  • 标准输入流:基于流的输入(stdin),Java中对应的API是System.in
  • 标准输出流:基于流的输出(stdout),Java中对应的API是System.out
  • 标准错误流:基于流的错误输出(stderr),Java中对应的API是System.err

通过上面的描述, 这三者功能如下:

  • 标准输入流 可以让我们在控制台中输入信息,通过输入流的处理,获取输入的数据, 供程序使用
  • 标准输出流, 错误流, 可以让我们将需要的信息输出到控制台, 可以用于查看程序运行的结果, 或提示信息

接下来就给大家详细分析输出与输出

1. 输出语句

其实,在前面的学习中, 我们已经知道Java的输出功能了, 就是利用System.out.println()语句来实现的.

接下来, 我们来分析一下该语句的含义
 

1.1 System

首先出场的就是System , System 是一个Java 内置的(自带的) 类.代表一个系统类

至于什么是类, 我们会在面向对象章节讲解. 你暂时可以这么理解, 类就是将功能相关的操作放在一起, 也就是将各种方法放在类里面, 之后就可以通过类来使用这些功能.

System 是一个系统类, 位于java.lang 包中, 在该类里面具有很多系统界别的属性, 控制方法, 供我们使用

System 类中成员变量和成员方法都是static, 即静态成员, 因此我们可以直接通过System 类名进行调用.

System 类提供了如下核心功能:

  • 标准输入输出:如out、in、err;
  • 外部定义的属性和环境变量的访问:如getenv()、setenv()、getProperties()和setProperties();
  • 加载文件和类库的方法:如load()和loadLibrary();
  • 快速拷贝数组的方法:arraycopy();
  • jvm操作:如gc()、runFinalization()、exit();
  • 获取系统时间方法:如System.nanoTime 和 System.currentTimeMillis。

这篇文章主要分析的就是标准输入输出: out , in ,err
 

1.2 out与err

接下来出场的就是outerr , 他们都是System 类的属性, 即静态成员. 因此可以被类直接获取, 即System.out, System.err 操作

out 表示一种"标准" 的输出流, 其值是java.io.PrintStream类的引用。

err 表示“标准”的错误输出流,err输出的信息, 用于显示错误消息,或者用于显示需要引起用户特别注意的信息,在控制台中会显示红色的文字。

示例

public class PrintTest {
    public static void main(String[] args) {
        System.out.print("out 标准输出");
        System.err.print("err 标准输出的错误信息");
    }
}

其实outerr的用法完全一样,功能也基本相同。

outerr的唯一区别就是,out往往是带缓存功能的,而err没有缓存功能

1.3 print 和 println

最后出场的成员就是print()println() 方法. 这两个方法out , err 输出流都可以使用

print()println() 两个方法都是java.io.PrintStream类里提供的方法, 他们的作用都是向控制台输出信息。两者的基本作用完全一样

区别在于:

  • print()方法不会产生换行
  • println()会产生换行, 是print line 的缩写. 表示输出并换行

示例:

public class PrintTest {
    public static void main(String[] args) {
        // 不换行输出
        System.out.print("hello ");
        System.out.print("world! \n");  //  通过\n 手动换行

        // 换行输出
        System.out.println("大家好:");
        System.out.print("今天天气很不错哦! \n");

        // err 错误信息不换行输出 
        System.err.print("hello ");
        System.err.print("world! \n");  //  通过\n 手动换行

        // err 错误信息换行输出
        System.err.println("大家好:");
        System.err.print("今天天气很不错哦!");
    }
}

1.4 printf 格式化输出

1.4.1 格式化输出的理解

有时候,计算机默认输出的数据格式,并不一定能够满足我们的阅读需求。

比如有的人想要保留小数点后两位,也有的人想要保留小数点后四位,针对大家不同的输出需求,Java 提供了printf 方法, 用于格式化输出.

printfprint, println 在使用上差别不大, 主要区别就是printf 方法第一个参数为输出的模板字符串. 字符串中可以使用格式化,

printfprint 方法一样不会自动换行输出

1.4.2 占位符

Java为了实现格式化输出的功能,给我们提供了多种占位符,可以在字符串模板中, 使用各种数据类型“格式化”的占位符。

常用的占位符有如下这些:

占位符说明
%d格式化输出整数
%x格式化输出十六进制整数
%f格式化输出浮点数
%e格式化输出科学计数法表示的浮点数
%s格式化输出字符串

这里我们要注意,在输出语句中,%表示占位符。有特殊意义, 如果只是向在模板字符串中输出一个普通的% 字符, 需要使用%% ,

如果你想了解更详细的格式化参数,可以参考JDK文档:java.util.Formatter

1.4.3 示例

public class Person {
    public static void main(String[] args) {
        // 格式化 字符串, 整数, 浮点数
        System.out.printf("姓名:%s, 年龄:%d, 成绩:%f \n", "张三", 15, 86.6);

        // 格式化: 十六进制整数, 科学计数法浮点数
        System.out.printf("字符串模板: 十六进制输出:%x, 科学计数法: %e", 30, 16.8);
        
    }
}

输出结果:

姓名:张三, 年龄:15, 成绩:86.600000 
字符串模板: 十六进制输出:1e, 科学计数法: 1.680000e+01

2. 输入语句

2.1 输入语句简介

除了输出流以外, Java 还有一个负责输入的标准流, 对应的API 是System.in.

与标准输出相比,标准输入则复杂的多。尤其是直接使用System.in时,虽然可以读取到用户的输入,但该方式特别的复杂,对咱们初学者来说很不友好。

所以为了更方便地实现输入功能, 我们介绍一个简单的类, 即Scanner 类:

2.2 Scanner 类简介

Scanner类是Java 5中开始提供的,负责解析基本类型和字符串的简单文本扫描器。通过Scanner类,我们可以获取用户在控制台里的输入数据。

Scanner类里常用API方法有如下几个:

  • nextInt() :获取输入的整数;

  • nextDouble() :获取输入的双精度浮点数;

  • nextLine() :获取输入的字符串,包括单词里的空格和除回车以外的所有字符;

  • next() :获取输入的字符串,只从有效字符计算。获取到字符前的空字符都会被自动忽略,之后的空格键,Tab,Enter 键都视做结束符

2.3 使用步骤

使用Scanner , 需要遵循以下步骤:

  1. 导包: 导入Scanner 类,导包的的知识之后会相信分析, 这里通过import关键字导包
  2. 实例化: 创建Scanner 类的实例对象, 使用new 关键字
  3. 获取 :使用Scanner 对象的扫描输入的内容
  4. 释放: 通过Scanner 对象的close方法释放资源

需要注意的是:根据相应的方法,来输入指定类型的值。

如果输入的数据类型与要求的类型不匹配时,会报异常 导致程序终止。

2.4 Scanner各种类型输入示例

案例: 小明注册某交友网站,要求录入个人相关信息。如下:

请输入你的网名、你的年龄、你的体重、你是否单身、你的性别等情况。

示例:


// 1. 导入包
import java.util.Scanner;

public class Person {
    public static void main(String[] args) {
        // 2.创建实例对象, System.in 表示键盘输入
        Scanner scanner = new Scanner(System.in);


        // 3. 根据提示, 调用不同的方法, 获取不同类型的数据
        System.out.println("欢迎进入本交友网站!");

        // 获取字符串信息
        System.out.println("请输入你的网名:");
        String name = scanner.next();

        // 获取 int 类型
        System.out.println("请输入你的年龄:");
        int age = scanner.nextInt();

        // 获取 double 类型
        System.out.println("请输入你的体重:");
        double weight = scanner.nextDouble();

        // 获取 boolean 类型
        System.out.println("你是否单身(true/false):");
        boolean isSingle = scanner.nextBoolean();



        // 获取 char 类型
        System.out.println("请输入你的性别:");
        char gender = scanner.next().charAt(0);  // 按照字符串接收,获取第一个字符

        // 输出结果:
        System.out.println("你的基本情况如下:");
        System.out.println("网名:" + name + ";  年龄:" + age + ";  体重:" + weight +
                ";  单身:" + isSingle + ";  性别:" + gender);


        // 4. 关闭资源
        scanner.close();
    }
}

运行结果:

欢迎进入本交友网站!
请输入你的网名:
张三
请输入你的年龄:
18
请输入你的体重:
120.5
你是否单身(true/false):
true
请输入你的性别:
男
你的基本情况如下:
网名:张三;  年龄:18;  体重:120.5;  单身:true;  性别:男

3. 结语

至此, 我们就把Java 中的输入和输出语句给大家讲解完毕了, 本节内容并不复杂. 学完之后, 你应该掌握以下知识:

  1. 理解输入输出流
  2. 常用的输出方法: System.out.print, System.out.println,System.out.printf
  3. 输入类Scanner 中的一些输入方法, 比如next, nextInt ,nextDouble

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Allen019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值