【Java复习巩固 Day5】基础类库

本文详细介绍了Java编程语言的基础知识,包括如何使用Scanner类从用户获取键盘输入,如何利用System类和Runtime类进行系统交互,字符串操作,随机数生成,以及日期和时间的处理。通过实例演示了各种方法的应用。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值