Scanner
使用Scanner类可以获取用户的键盘输入,它可以从文件、输入流、字符串中解析出基本类型值和字符串值
hasNextXxx():是否还有下一个输入项
nextXxx():获取下一个输入项
package day5;
import java.util.Scanner;
public class ScannerKeyBoardTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.useDelimiter("\n"); // 只将回车作为分隔符
while (scanner.hasNext()) {
System.out.println(scanner.next());
}
scanner.close();
}
}
hello world
hello world
hello
hello
world
world
^D
Process finished with exit code 0
系统相关
Java程序在不同操作系统上运行时,可能需要取得平台相关的属性,或者调用平台命令来完成特定功能,可以使用System类和Runtime类来与程序运行的平台进行交互
System类
package day5;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
public class SystemTest {
public static void main(String[] args) {
// 获取系统所有的环境变量
Map<String, String> env = System.getenv();
for (Map.Entry<String, String> entry : env.entrySet()) {
System.out.println(entry.getKey() + " --> " + entry.getValue());
}
// 获取指定的环境变量
System.out.println(System.getenv("JAVA_HOME"));
// 获取所有的系统属性
Properties properties = System.getProperties();
// 将所有的系统属性保存到文件中
try {
properties.store(new FileOutputStream("properties.txt"), "System Properties");
} catch (IOException e) {
e.printStackTrace();
}
// 输出特定的系统属性
System.out.println(System.getProperty("os.name"));
}
}
configsetroot --> C:\Windows\ConfigSetRoot
USERDOMAIN_ROAMINGPROFILE --> LYH
LOCALAPPDATA --> C:\Users\Martin\AppData\Local
PROCESSOR_LEVEL --> 6
OCL_ROOT --> D:\OCL_SDK_Light
USERDOMAIN --> LYH
LOGONSERVER --> \\LYH
JAVA_HOME --> C:\Program Files\Java\jdk1.8.0_202
SESSIONNAME --> Console
ALLUSERSPROFILE --> C:\ProgramData
PROCESSOR_ARCHITECTURE --> AMD64
PSModulePath --> C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules
SystemDrive --> C:
OneDrive --> C:\Users\Martin\OneDrive
PYTHONCODE --> utf-8
APPDATA --> C:\Users\Martin\AppData\Roaming
USERNAME --> Martin
ProgramFiles(x86) --> C:\Program Files (x86)
VBOX_MSI_INSTALL_PATH --> D:\VirtualBox\
CommonProgramFiles --> C:\Program Files\Common Files
Path --> C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files\Java\jdk1.8.0_202\bin;D:\ProgramFiles\Xshell\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files\Intel\Intel(R) Management Engine Components\iCLS\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;D:\ProgramFiles\Vim\vim82;D:\ffmpeg\bin;D:\Go\bin;D:\Scala\bin;D:\MATLAB\R2018a\runtime\win64;D:\MATLAB\R2018a\bin;D:\nodejs\;D:\opencv\build\x64\vc15\lib;D:\opencv\build\x64\vc15\bin;D:\ProgramFiles\Git\cmd;D:\MinGW\bin;D:\opencv\mingw-build\install\x64\mingw\bin;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\Martin\AppData\Local\Microsoft\WindowsApps;C:\Program Files\Microsoft VS Code\bin;C:\Users\Martin\anaconda3\Scripts;D:\ProgramFiles\Fiddler;D:\opencv\build\x64\vc15\bin;C:\Users\Martin\go\bin;C:\Users\Martin\AppData\Roaming\npm
PATHEXT --> .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
DriverData --> C:\Windows\System32\Drivers\DriverData
OS --> Windows_NT
COMPUTERNAME --> LYH
GOPATH --> D:\Code\Go;
PROCESSOR_REVISION --> 8e0a
CommonProgramW6432 --> C:\Program Files\Common Files
ComSpec --> C:\Windows\system32\cmd.exe
GO111MODULE --> on
ProgramData --> C:\ProgramData
ProgramW6432 --> C:\Program Files
HOMEPATH --> \Users\Martin
SystemRoot --> C:\Windows
TEMP --> C:\Users\Martin\AppData\Local\Temp
HOMEDRIVE --> C:
PROCESSOR_IDENTIFIER --> Intel64 Family 6 Model 142 Stepping 10, GenuineIntel
USERPROFILE --> C:\Users\Martin
TMP --> C:\Users\Martin\AppData\Local\Temp
CommonProgramFiles(x86) --> C:\Program Files (x86)\Common Files
ProgramFiles --> C:\Program Files
PUBLIC --> C:\Users\Public
NUMBER_OF_PROCESSORS --> 8
VS160COMCOMNTOOLS --> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\
windir --> C:\Windows
=:: --> ::\
IDEA_INITIAL_DIRECTORY --> C:\Program Files\JetBrains\IntelliJ IDEA\bin
C:\Program Files\Java\jdk1.8.0_202
Windows 10
Process finished with exit code 0

Runtime类
package day5;
public class RuntimeTest {
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
System.out.println("处理器的数量:" + runtime.availableProcessors());
System.out.println("空闲内存数:" + runtime.freeMemory());
System.out.println("总内存数:" + runtime.totalMemory());
System.out.println("可用最大内存数:" + runtime.maxMemory());
}
}
处理器的数量:8
空闲内存数:310252632
总内存数:313524224
可用最大内存数:4639948800
Process finished with exit code 0
package day5;
import java.io.IOException;
public class ExecTest {
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
// 运行计算器程序
try {
runtime.exec("calc.exe");
} catch (IOException e) {
e.printStackTrace();
}
}
}
字符串相关
String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个字符对象被销毁
StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建后,可以通过StringBuffer提供的相应方法来改变字符序列
StringBuilder和StringBuffer基本类似,不同的是StringBuffer是线程安全的,而StringBuilder则没有线程安全的功能,所以性能略高
随机数
Random类专门用来生成一个伪随机数,它有两个构造器:
一个构造器使用默认的种子(以当前时间作为种子)
另一个构造器需要人为指定一个long型整数种子
package day5;
import java.util.Arrays;
import java.util.Random;
public class RandomTest {
public static void main(String[] args) {
Random random = new Random();
System.out.println(random.nextBoolean());
byte[] buffer = new byte[16];
random.nextBytes(buffer);
System.out.println(Arrays.toString(buffer));
// 生成0.0到1.0之间的伪随机double数
System.out.println(random.nextDouble());
// 生成0.0到1.0之间的伪随机float数
System.out.println(random.nextFloat());
// 生成平均值是0.0,标准差是1.0伪高斯数
System.out.println(random.nextGaussian());
// 生成一个处于int整数取值范围的伪随机数
System.out.println(random.nextInt());
// 生成0~26之间的伪随机数
System.out.println(random.nextInt(26));
// 生成一个处于long整数取值范围的伪随机数
System.out.println(random.nextLong());
}
}
false
[23, 105, -78, 115, -24, 52, 101, -87, -66, -89, -59, -45, 30, -50, 120, 56]
0.345092697493636
0.10628295
-1.5464831062644895
2023499833
1
6569642781304825379
Process finished with exit code 0
时间和日期
Date类在设计上存在一些缺陷,所以Java提供了Calendar类来更好的处理时间和日期
package day5;
import java.util.Calendar;
public class CalendarTest {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
// 年
System.out.println(calendar.get(Calendar.YEAR));
// 月
System.out.println(calendar.get(Calendar.MONTH));
// 日
System.out.println(calendar.get(Calendar.DATE));
// 设置年、月、日、小时、分钟、秒
calendar.set(2020, Calendar.NOVEMBER, 1,23, 12, 23);
System.out.println(calendar.getTime());
// 前推一年
calendar.add(Calendar.YEAR, -1);
// 前推8个月
calendar.roll(Calendar.MONTH, -8);
System.out.println(calendar.getTime());
}
}
2020
7
2
Sun Nov 01 23:12:23 CST 2020
Fri Mar 01 23:12:23 CST 2019
Process finished with exit code 0
本文详细介绍了Java编程语言的基础知识,包括如何使用Scanner类从用户获取键盘输入,如何利用System类和Runtime类进行系统交互,字符串操作,随机数生成,以及日期和时间的处理。通过实例演示了各种方法的应用。
1034

被折叠的 条评论
为什么被折叠?



