Java(四)输出和输入函数
介绍一下Java里简单常用的输入输出方法。
Java的输出函数很简单,直接调用System类的out对象的print函数即可。
代码:
System.out.print(a);//输出变量a的值
System.out.print("214214");//输出字符串
System.out.print("123"+a);//混合输出字符串和变量值
/*
当然也可以使用System.out.println();表示换行输出,相当于System.out.print("\n");
其中System是一个类,out是java.io.PrintStream的对象,也就是System这个类中含有java.io.PrintStream的对象out。 print()是java.io.PrintStream类里的一个方法,也就是out对象的一个方法。 */
Java的输入比较麻烦,找了好多书都讲的不详细,网上也看了些方法,像BufferedReader类和InputStreamReader类法,Scanner类法等等。综合发现还是Scanner类最好用,它既可以读字符,也可以读字符串和整数。
代码:
import java.util.Scanner;
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
}
另外,该对象的next()方法和nextLine()方法的区别:
在java中,next()方法是不接收空格的,在接收到有效数据前,所有的空格或者tab键等输入被忽略,若有有效数据,则遇到这些键退出。nextLine()可以接收空格或者tab键,其输入应该以enter键结束。
在学习Java的输入时,有个有趣的发现,感兴趣的朋友可以往下看。
Java版的getchar()函数:(char)System.in.read()
当时想的是,既然输出用的是out对象,那么必然有个in对象的方法能完成输入的功能。于是就发现了System.in.read()这个东东,它实现的功能是:从键盘读一个字符。好嘛^_^,那么就输下这个东东
System.out.println(System.in.read());
运行结果:

结果很意外,输入5,输出53 13 10;输入a,输出97 13 10;什么也不输直接回车,输出13 10。即输出了输入字符、回车控制字符和换行控制字符的ASCLL码!!
不,我不要ASCLL码数字,我要字符型!那么就强转一下吧。改下代码:
System.out.println((char)System.in.read());
果然如愿输出了字符型,而且回车控制字符和换行控制字符都不见了!而且经测试,结果完全符合算法题中的输入的要求,即在Java中实现了类似C++中的getchar()函数:(char)System.in.read()
再进一步思考,加个while(true)能否用字符数组形式输出字符串呢?
代码如下:
import java.io.IOException;
public class dd {
public static void main(String[] args) throws IOException {
while(true){
System.out.print((char)System.in.read());
}
}
}
运行结果:

成功得到了字符串是不是?
实际并没有。。
这个方法有极大的缺陷:
System.out.println((char)System.in.read());
实际就相当于:
InputStream a=System.in;
char ch=(char)a.read();
System.out.print(ch);
果然还是没有摆脱缓冲区的束缚,把刚才输出字符串的代码的while(true)换成for循环:
import java.io.IOException;
public class dd {
public static void main(String[] args) throws IOException {
//while(true){
for(int i=0;i<5;i++){
System.out.print((char)System.in.read());
//}
}
}
}
运行结果:

只能读for循环限制的5个字符。。while(true)只是用一个死循环把输入缓冲区的字符都读完了而已,才造成了这种方法能读字符串的假象,
再回到C/C++想想,这个真的和getchar()一样。。
参考下面代码:
#include<stdio.h>
int main()
{
while()
{
char a=getchar();
printf("%c",a);
}
return ;
}
运行结果:

曾经,getchar()是否给了你它能输出字符串的假象呢?
Java(四)输出和输入函数的更多相关文章
- Android For JNI(二)——C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器
Android For JNI(二)--C语言中的数据类型,输出,输入函数以及操作内存地址,内存修改器 当我们把Hello World写完之后,我们就可以迈入C的大门了,今天就来讲讲基本的一些数据类型 ...
- Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...
- Java四种线程池
Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...
- Pascal、VB、C#、Java四种语法对照表
因为工作原因,自学会了vb后陆续接触了其它语言,在工作中经常需要与各家使用不同语言公司的开发人员做程序对接,初期特别需要一个各种语法的对照比,翻看了网络上已有高人做了整理,自己在他基础上也整理了一下, ...
- Java四种引用--《深入理解Java虚拟机》学习笔记及个人理解(四)
Java四种引用--<深入理解Java虚拟机>学习笔记及个人理解(四) 书上P65. StrongReference(强引用) 类似Object obj = new Object() 这类 ...
- (转载)new Thread的弊端及Java四种线程池的使用
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new ...
- Java 输入/输出 反射
Java 输入/输出 反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一 ...
- 【转】java格式化输出 printf 例子
[转]java格式化输出 printf 例子 转自http://www.cnblogs.com/TankMa/archive/2011/08/20/2146913.html#undefined imp ...
- 线程池是什么?Java四种线程池的使用介绍
使用线程池的好处有很多,比如节省系统资源的开销,节省创建和销毁线程的时间等,当我们需要处理的任务较多时,就可以使用线程池,可能还有很多用户不知道Java线程池如何使用?下面小编给大家分享Java四种线 ...
- java四种引用与回调函数
JAVA四种引用 java对象的引用包括: 强引用 软引用 弱引用 虚引用 Java中提供这四种引用类型主要有两个目的: 第一是可以让程序员通过代码的方式决定某些对象的生命周期: 第二是有利于JVM进 ...
随机推荐
- linux入门系列12--磁盘管理之分区、格式化与挂载
前面系列文章讲解了VI编辑器.常用命令.防火墙及网络服务管理,本篇将讲解磁盘管理相关知识. 本文将会介绍大量的Linux命令,其中有一部分在"linux入门系列5--新手必会的linux命令 ...
- Method Resolve Order (MRO) - 类对象属性的解析顺序
Method Resolve Order (MRO) - 类对象属性的解析顺序 Python 支持多重继承, 此时就需要解决按照何种顺序来解析属性的问题.类的继承关系在一个特殊的类属性中指定(__mr ...
- 小记centos7.5下yum安装cobbler遇到的问题
问题1:执行cobbler sync同步命令报错,提示dhcpd服务错误和Python源码错误 [root@server ~]# cobbler sync #<===执行cobbler同步的时候 ...
- python安装模块速度慢的解决方法
1.Win+R,cmd 2.pip install pqi 3.pqi use aliyun
- 进阶之路 | 奇妙的Window之旅
前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: Window&WindowManagerService Window&Window ...
- js—DOM详情
1,什么是DOM,有什么作用 Document Object Model 文档对象模型,是一个html和xml文档的编程接口,可以将文档(html页面)解析成dom树,然后通过提供的dom接口来改变文 ...
- 用 Python 分析今年考研形势
还有5天,就到了考研初试的时间了. ! 尽管今年研招网内部,已经做了优化改善,还是抵挡不住考生们的报名热情(网站崩溃). 2017年考研人数增长至201万人, 2018年则达到238万人, 201 ...
- 关于mac下redis的安装和部署
近来学习scrap分布式,需要用到redis,但以前没接触过,所以记录一下自己的安装过程. 准备:Mac,redis-5.0.4.tar.gz 1.压缩包到官网下(建议下载稳定版)网址:redis.i ...
- Spring Boot从入门到精通(一)搭建第一个Spring Boot程序
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- 小白的linux笔记1:CentOS 8 安装与设置
为了在服务器上跑爬虫,以及学SegNet,研究了一圈看来linux是必学品了.在自己电脑上安装了一个 1.官网下载iso,一个linux dvd是稳定版,选之,另一个stream版是更新更快的测试版, ...