Java基础之常用类

image-20210602145457173

基础捡起来,以前学校里面学的现在重新认识下。

String 、StringBuffer和 StringBuilder

参考链接:String、StringBuffer与StringBuilder之间区别

三者相同之处:都是处理字符串

区别:

String StringBuffer StringBuilder
描述 String类是常量,一旦创建无法改变。String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间 StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量 可变类,速度更快
可变性 不可变 可变 可变
安全性 线程安全 线程不安全
性能 多线程操作字符串 单线程操作字符串

1、String是字符串常量,一旦创建无法改变。

Strings="hello";s=s+" world";内存变化:

image-20210602154215273

2、StringBuffer和StringBuilder

StringBuffer s = new StringBuffer("hello");s.append(" world");跟上面内存不同之处在于,字符串的变化都在同一个地址,不会造成浪费。

3、equals三者用法不同,String.equals可以比较字符串的值因为其重写了该方法,而其它两个类没有重写,比较的话是比较object。

4、三者常用方法:

1
2
String:length()、equals()、charAt()、indexOf()、toUpperCase()、startsWith()、endsWith()、contains()等
StringBuffer、StringBuilder:length()、append()、insert()、delete()、deleteCharAt()、replace()等

System类与Runtime类

System

System类代表当前Java程序的运行平台,程序不能创建System类的对象,System类提供了一些类变量和类方法,允许直接通过System类来调用这些类变量和类方法。它不能被实例化

System类提供的System包括

  1. 标准输入System.in、标准输出System.out和错误输出流System.err;
  2. 访问外部定义的属性getenv和环境变量getProperties;
  3. 一种加载文件和库的方法loadLibrary;
  4. 用于快速复制阵列的一部分的实用方法arraycopy。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
public void SystemTest() {
//标准输入流和输出流
System.out.println("请输入信息:");
Scanner scanner = new Scanner(System.in);
System.out.println(scanner.nextLine());

//获取系统信息
System.out.println(System.getenv());
System.out.println(System.getenv("LOCALAPPDATA"));

//获取Java环境信息
System.out.println(System.getProperties());
System.out.println(System.getProperty("java.vm.version"));

//获取当前时间
System.out.println(System.currentTimeMillis());
System.out.println(System.nanoTime());

// 将指定源数组中的数组从指定位置复制到目标数组的指定位置
int[] src = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] dest = new int[10];
System.arraycopy(src, 2, dest, 1, 4);
for (int i : dest) {
System.out.print(dest[i] + "-"); //0-0-0-0-0-0-4-5-6-0-
}

//加载库
System.out.println(" Process of Library Loading ");
Runtime.getRuntime().loadLibrary("C:/Windows/system/FP30TXT.dll");
System.out.println("Process of Library Loading completion");

//运行垃圾回收器
System.gc();

//终止虚拟机运行
System.exit(0);
}
Runtime

Runtime类代表Java程序的运行时环境,可以访问JVM的相关信息,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public void RuntimeTest() throws IOException {

//获取当前程序的环境
Runtime runtime = Runtime.getRuntime();

//返回处理器个数
System.out.println(runtime.availableProcessors());

//执行命令
String[] cmd = new String[]{"ipconfig","/a"};
Process process = runtime.exec(cmd);
//取得命令结果的输出流,然后用一个读输出流类去读
InputStreamReader isr=new InputStreamReader(process.getInputStream());
//用缓冲器读行
BufferedReader br=new BufferedReader(isr);
String line;
//直到读完为止
while((line=br.readLine())!=null)
{
System.out.println(line);
}

//获取JVM可用内存
System.out.println(runtime.freeMemory());
//获取JVM尝试使用的最大内存
System.out.println(runtime.maxMemory());
//获取JVM内存总量
System.out.println(runtime.totalMemory());
}

Math类和Random类

Math:提供常用数学方法
1
2
3
4
5
6
7
8
9
绝对值:ads()
取整:ceil()、floor()
四舍五入:round()
随机数:random()
最大最小值:max()、min()
三角函数:sin()、cos()、tan()
指数:exp()、power()
对数:log()、ln()
...
Random

除了Math类可以生成随机数之外,还有更加专业的Random类可以使用,Random有两种构造方法,分别是无参构造函数,以long为参数的构造方法。即:

1
2
Random r1=new Random();
Random r2=new Random(long seed);

除了Character、Short、Byte之外,所有类型都可以使用Random类产生:

1
2
3
4
5
6
nextInt()      //产生一个随机整数
nextInt(int n) //产生一个大于等于0小于n的整数
nextFloat() //产生一个浮点数
nextDouble() //
nextLong() //产生一个长整数
nextBoolean() //产生一个布尔值

UUID(Universally Unique Identifier):通用唯一识别码,是一种软件建构的标准

包装类(Boolean,Character,Byte,Short,Integer,Long,Float,Double)

包装类 将基本数据类型的值包装为引用数据类型的对象。

基本类型 包装类
boolean Boolean
char Character
byte Byte
short Short
int Integer
long Long
float Float
double Double

装箱:将基本数据类型的值转为引用数据类型.

1
2
int a = 1;
Integer i = a;//自动装箱

拆箱:将引用数据类型的值转为基本数据类型.

1
2
Integer i = new Integer(1);
int a = i;//自动拆箱

Date类,Calendar类和DateForm类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public void DateTest(){
Date date = new Date();
System.out.println(date);

// Full格式的日期格式器对象
DateFormat fullFormat =
DateFormat.getDateInstance(DateFormat.FULL);
// Long格式的日期格式器对象
DateFormat longFormat =
DateFormat.getDateInstance(DateFormat.LONG);
// MEDIUM格式的日期/时间 格式器对象
DateFormat mediumFormat = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.MEDIUM);
// SHORT格式的日期/时间格式器对象
DateFormat shortFormat = DateFormat.getDateTimeInstance(
DateFormat.SHORT, DateFormat.SHORT);
// 下面打印格式化后的日期或者日期/时间
System.out.println("当前日期的完整格式为:"
+ fullFormat.format(date));
System.out.println("当前日期的长格式为:"
+ longFormat.format(date));
System.out.println("当前日期的普通格式为:"
+ mediumFormat.format(date));
System.out.println("当前日期的短格式为:"
+ shortFormat.format(date));

// 获取表示当前时间的Calendar对象
Calendar calendar = Calendar.getInstance();
// 设置指定日期,将MONTH设为13
//默认lenient模式,月份可以设置为13,加一年
calendar.set(Calendar.MONTH, 13);
System.out.println(calendar.getTime());
// 开启non-lenient模式
calendar.setLenient(false);
calendar.set(Calendar.MONTH, 13);

}


//输出结果
Wed Jun 02 17:30:27 CST 2021
当前日期的完整格式为:2021年6月2日 星期三
当前日期的长格式为:2021年6月2日
当前日期的普通格式为:2021-6-2 17:30:27
当前日期的短格式为:21-6-2 下午5:30
Wed Feb 02 17:30:27 CST 2022

参考链接:

String、StringBuffer与StringBuilder之间区别

狂神说–javase08–常用类学习

https://blog.csdn.net/weixin_43915808/article/details/91474659

Java System与Runtime类常用方法

https://www.cnblogs.com/lbrs/p/11067221.html