《疯狂Java讲义》8
目录
与用户互动
1、 运行Java程序的参数
2. 使用Scanner获取键盘输入
系统相关
1.System类
2.RunTime类
BigDecimal类
与用户互动
1、 运行Java程序的参数
Java程序的入口——main()方法的方法签名:
public static void main(String[] args) { }
下面详解为什么用这个方法签名:
public修饰符:因为Java类由JVM(java虚拟机)调用,为了让JVM可以自由调用这个main()方法,所以用public进行修饰。
static修饰符:JVM调用这个方法时,不会先创建该主类的对象,然后通过对象调用这个主方法,JVM直接通过调用这个类来调用这个主方法(之前说道过,static修饰的方法是类方法,可以通过类或者对象进行调用)。
void:JVM调用主方法,主方法的返回值要返回给JVM,但是这没有任何意义,所以就不要返回值就好了。
String[] args:字符数组形参。根据方法调用原则,谁调用了方法,谁就提供形参的值,也就是说,JVM调用了主方法,所以由它为形参赋值。
但是JVM怎么知道如何为这个数组赋值?
看下面代码:
结果如下:
这是是意料之中的结果,因为没有给数组赋什么值,长度当然为0;
但是如果运行Java程序时(控制台运行)在类名后面紧跟一个或者多个字符串(多个字符之间通过空格分开),JVM就会把这些字符串依次赋值给args数组元素。
如果某参数本身包含了空格,则应该将参数用双引号(“”)括起来,否则java会把这个空格单座参数分隔符,而不是参数本身。
是不是很神奇,没想到一个以为是套路的东西含义这么深刻。
2. 使用Scanner获取键盘输入
(1)Scanner主要提供了两个方法来扫描输入:
1)hasNextXXX():是否还有下一个输入项,其中XXX可以是int,long等代表基本数据类型的字符串;如果只是判断是否包含下一个字符串,则直接使用hasNext()。
2)nextXXX():获取下一个输入项。
代码如下:
结果如下:
这里需要了解一下,Scanner默认的是通过空白(空格,Tab空白,回车)作为分隔符,如果不想将空白作为分隔符,例如想输入一行数据,无论有没有空格,都看作一个输入项,如果是这种需求,可以把Scanner的分隔符设置成只回车。 为Scanner设置分隔符使用useDelimiter(String pattern)方法即可。该方法的参数应该是一个正则表达式。(后文会介绍)
看一下栗子:
结果为:
可以看到这次在一行输入三个数据,空白是没有分界符的作用的。
实际上,Scanner提供了两个简单的方法进行逐行读取:
1)boolean hasNextLine():返回输入源中是否还有下一行;
2)String nextLine():返回输入源中下一行的字符串。
下面演示个用Scanner获取输入源中整型的输入项:
结果为:
可以看到的是,它将数字(整数或者浮点数均变成了浮点数进行输出),但是第二个输入数据,因为输入了字符,不是数字,所以没有输出结果,此时,Scanner的读取操作被阻塞。这也是其不如上一个程序所在,适应性不强。
Scanner不仅能够读取用户的键盘输入,还能对文件进行读入。
举个栗子:
这个大体上写法类似于上面的,要注意两点,一个是文件的载入的写法,一个是上面的异常处理(这个程序会自动提示生成)。
系统相关
Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定的功能。Java提供了System类和Runtime类与程序的运行平台进行交互。
1.System类
System类作为当前运行平台时,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。
System类提供了代表标准输入、标准输出和错误输出的类变量,并提供了一些静态方法用于访问环境变量、系统属性的方法,还提供了加载文件和动态链接库的方法(这个我不清楚,了解一下而已)。System类还有两个获取当前系统时间的方法,currentTimeMillis()和nanoTime(),它们都返回一个long型整数,这里必须指出的是,这两个方法返回的时间粒度取决于底层操作系统,可能所在的操作系统根本不支持以毫秒和纳秒作为计时单位。
2.RunTime类
Runtime类代表Java程序的运行环境时,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取
与之关联的Runtime对象Runtime作为运行环境时,可以访问JVM的相关信息,
如处理器数量,内存信息等。
举个栗子:
结果如下:
此外,Runtime类还有一个功能:直接单独启动一个进程来运行操作系统的命令:
感觉好厉害的样子哦!
BigDecimal类
1. 为了能精确表示、计算浮点数,Java提供了BigDecimal类,该类提供了大量的构造器用于创建BigDecimal 对象,包括把所有的基本数值型变量转换成一个BigDecimal对象,也包括利用数字字符串、数字字符数组来创建BigDecimal对象。
2. 在BigDecimal类的构造器中,BigDecimal(double val)构造器有一定的不可预知性,当程序使用new BigDecimal(0.1)来创建一个BigDecimal对象时,它的值并不是0.1,它实际上等于一个近似0.1的数,因为0.1无法准确表示为double浮点数。但是使用BigDecimal(String val)构造器的结果是可预知的,因此通常优先使用基于String的构造器。如果必须使用double浮点数作为BigDecimal 构造器的参数时,通过BigDecimal.valueOf(double value)静态方法来创建BigDecimal对象。
END
《疯狂Java讲义》8相关推荐
- 《zabbix用户权限分配管理》-8
登陆zabbix 默认账号:Admin,密码:zabbix,这是一个超级管理员.登陆之后在右下角可以看到"connected as Admin"(中文版:连接为Admin). za ...
- Windows Server 2003成员服务器基准用户权限分配策略
本文出自 "王达博客" 博客,转载请与作者联系! 作者已授权本博客转载 以下内容是摘自笔者编著,最新出版的<网管员必读--网络安全>(第2版)一书. 10.5.2 W ...
- 本地策略和组策略,更改安全设置和用户权限分配兼容性问题
如果您更改安全设置和用户权限分配,则可能会导致客户端.服务和程序问题发生 适用于: Microsoft Windows Server 2003 Standard Edition (32-bit x86 ...
- 用户权限的管理与提权
用户权限的管理与提权 用户权限的管理: 提示:权力越大,责任越大 环境变量的设置: 1. bash shell 配置文件 PS: 如果全局配置和个人配置产生冲突,以个人配置为准. 2.登陆系统后,环境 ...
- mysql用户权限重置_mysql中重置密码与新用户权限分配的方法介绍
本篇文章给大家带来的内容是关于mysql中重置密码与新用户权限分配的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.重置root密码 1.修改配置文件,免密登陆 输入命令 ...
- vue后台系统管理项目-角色权限分配管理功能
vue后台系统管理项目: 技术选型:vue + element-ui 菜单权限管理模块功能 角色列表查询,通过(角色名称:角色编号:状态:启用.禁用)进行角色数据搜索. 查询.重置.新建角色功能 角色 ...
- oracle用户常用权限,Oracle用户权限分配的具体方法【常用财务软件使用教程】
Oracle用户权限分配的具体方法 这里我们将介绍Oracle用户权限分配和Oracel从服务器导出数据的方法,希望能对大家有所帮助. 对于Oracle用户权限分配,很多人觉得不是很困难,但是要做好O ...
- mysql %用户域_MySQL运维---用户权限及管理
一.mysql创建用户 1.创建用户 mysql> create user test@'%' identified by '123456'; 创建了用户,但是没有任何权限 Query OK,0 ...
- oracle用户权限的管理
概述:创建的新用户是没有任何权限,甚至连登陆数据库的权限都没有.因此对于新创建的用户,需要为其制定 权限.用于给用户赋予权限的命令为grant,会搜权限的命令是revoke 1. 授予权 ...
- centos7 安装vsftpd和配置以及虚拟用户权限分配
系统环境 centos7.3 版本 ftp 根目录 : /data/ftp ftp 配置文件目录:/etc/vsftpd ftp 虚拟用户权限配置文件目录:/etc/vsftpd/vuser_conf ...
最新文章
- pandas使用resample进行不同粒度下的时间特征重构实战:构建时间维度统计特征
- PostgreSQL 数据库多列复合索引的字段顺序选择原理
- python对文件的读写操作方式-python 文件读写操作
- aspx ttf文件加载不出来_加载页面信息,刷不出来心态都崩了
- 数据中台是下一代大数据_全栈数据科学:下一代数据科学家群体
- iOS - UITextField
- 混合知识实例-本地GIS定位系统Web版(Java、vue、Geoserver)
- [Linux] rpm 与 dpkg 用法比较
- 有史以来最容易理解的控制反转(IoC)与注入依赖(DI)
- 【计算机网络】物理层
- NRF52832-USB-Dangle-DIY笔记
- 【一分钟解决】Matplotlib 中英文混排多字体设置问题
- 我以前的痛苦,你也拥有吗?
- Operation CREATE USER failed for 'lin'@'host'
- 算法学习-素数与合数小结
- 支付宝芝麻分701,花呗借呗额度提升明显,网友:三年没涨一分
- 计算机毕业设计android的云南旅游,美食攻略,产品预订app(源码+系统+mysql数据库+Lw文档)
- 硕盟HDMI转VGA适配器|HDMI口连接VGA显示器转接头
- table.on('tool(test) test值是什么
- Oracle索引技术pdf
热门文章
- Ubuntu 16.04.6 LTS 发布:紧急修复 APT 漏洞
- 使用@functools.wraps的理由
- centos5.4 安装配置oracle10g
- .net转换关键字:operator、explicit与implicit
- 自考总结--2020年10月份
- 传说中的CAFEBABE到底在哪儿?
- 微服务架构下,静态数据通用缓存机制!
- 绝了!Dataway让 SpringBoot 变得更强大!
- 一个线程池 bug 引发的 GC 思考!
- 咖啡馆的故事:FTP, RMI , XML-RPC, SOAP, REST一网打尽