0727日志
今天学习了什么
String类的方法
- split(String s):对字符串以s进行分割,返回的是一个字符串数组,分割符为最后一个字符时,该方法会省略末尾字符后的空字符。
- split(String s,int limit):与上个方法类似,但是limit可以设定分割成多少个数组元素,负数代表无数个,该方法不会忽略末尾后的空字符。
- join(String s,String…s1):第一个字符s是用来连接字符的,后面的可变参数可以输入任意的需要连接的字符串。
- concat(String s):连接字符串。
- valueOf():八个基本类型转字符串,也可在基本类型后+””。
- contains(String s):判断字符串中是否包含s。
- toCharArray():将字符串转为字符数组
- intern():将字符串放入常量池中,jdk6及以前是将字符串放入,jdk7及以后是将引用地址放入常量池。
- isEmpty():判断字符是否为空,不能判断空格字符。
- isBlank():判断字符是否为空,可以判断空格字符。
StringBuilder
构造器
StringBuilder():创建了一个空StringBuilder对象,本质上是初始化了底层数组。根据不同的字符编码,长度为16或者32。
StringBuilder是创建了一个StringBuilder对象,通过传入的字符串来判断是ISO-8856-1还是UTF16编码,字符串中有中文是是UTF16编码,对象长度为(参数长度+16)<<1;字符串中只存在字母和数字时,使用ISO-8856-1编码,对象长度为参数长度+16。
StringBuilder(String str):根据传入的字符串创建一个StringBuilder对象,该方法内完成两件事情:
- 参数长度+16,或者(参数长度+16)<<1作为底层数组的初始长度。
- 将参数放置到数组中
StringBuilder(Charsequence str):同上
StringBuilder(int capacity):指定底层数组初始容量。
StringBuilder的方法
- append(String s):在字符串末尾添加字符串。
- delete(int start,int end):删除start和end区间的字符。
- deleteCharAt(int index):删除index索引处的字符。
- replace(int start,int end,String s):在start和end区间的字符都替换为s。
- subString(int start,int end):截取start到end的字符,end也可省略,默认截取到最末尾字符。
- insert(int a,String s):在索引a处插入字符串s。
- reverse():将字符串序列反转。
- toString():对象转成字符串,String类型对象可以不用加上该方法。
String,StringBuilder和StringBuffer的区别
同:
- 都是Charsquence接口的子类。
- 都是final修饰的,不能被继承,没有子类。
异:
- String是不可变类,字符串序列不能被修改,而StringBuffer和StringBuilder是可变类,可以修改字符序列。
- StringBuffer是线程安全的,synchronized修饰,StringBuilder是非线程安全的,非线程安全的效率更高。不考虑线程安全或者单线程的情况下优先考虑StringBuiler。
Math工具类
- sqrt():求平方根,负数会返回NAN。
- pow(x,a):x的a次方。
- floor(a),ceil(a):a为小数时,floor向下取整,ceil向上取整。
- floorMod(x,y):x%y取余。
- toDegree(),toRadians():弧度转角度,角度转弧度。
- sin(),cos(),tan():正弦,余弦,正切。
- abs():绝对值。
- max(),min():两数求最大值,最小值。
- random():产生0.0000000000000000到1.0000000000000000的随机数。
System类
System类代表当前运行Java程序的平台。System为开发者提供了获取系统环境变量,系统属性等方法。下面通过示例来使用System类访问操作系统的环境变量和系统属性。
- Map<String,String> getenv():获取系统所有的环境变量,保存在map集合中。
- String getenv(String name):获取指定的环境变量
- Properties getProperties():获取系统的属性。
public static void main(String[] args) {
//获取所有的环境变量
Map<String,String> map = System.getenv();
//遍历map
for(String s : map.keySet()) {
System.out.println(s+"======"+map.get(s));
}
//获取指定名称的环境变量值,如果环境变量的名称不存在则返回null
System.out.println(System.getenv("JAVA_HOME"));
//获取系统参数
Properties properties = System.getProperties();
Set<Entry<Object, Object>> entry = properties.entrySet();
for (Entry<Object, Object> e : entry) {
System.out.println(e.getKey()+"============="+e.getValue());
}
}
- long currentTimeMillis():获取当前时间的毫秒数,返回当前时间与UTC 1970年1月1日 00:00:00的时间差,以毫秒为单位
- int identityHashCode(Object x):获取指定对象的精确hashCode值。
public static void main(String[] args) {
//获取当前时间的毫秒数
System.out.println(System.currentTimeMillis());
System.out.print(System.identityHashCode("Hello"));
}
- void arraycopy(Object src, int srcPos, int destPos, int length):该方法的作用是复制数组,第一个src是指被复制的数组,srcPos是指定复制的起始位置,dest则是指将元素粘贴到哪个数组,destPos是指目标数组粘贴的起始位置,length则可以理解为复制元素的个数。
- void exit(int status):退出虚拟机。
public class CopyArray {
public static void main(String[] args) {
int[] a = {5,9,1,4,3};
int[] b = new int[10];
//复制数组a元素粘贴的b数组
System.arraycopy(a, 0, b, 3, 5);
System.out.println(Arrays.toString(b));
}
}
Runtime类
Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应Runtime实例。可以访问JVM相关信息,处理器数量,内存信息等
- int availableProcessors():获取处理器数量
- long freeMemory():获取jvm空闲内存
- long totalMemory():获取最大内存
- long maxMemory():获取虚拟机可以用最大内存
public class RuntimeDemo {
public static void main(String[] args) {
Runtime runtime = Runtime.getRuntime();
System.out.println("处理器数量:"+runtime.availableProcessors());
System.out.println("总内寸数:"+runtime.totalMemory()/Math.pow(1024,2)+"MB");
System.out.println("JVM空闲内存:"+runtime.freeMemory()/Math.pow(1024, 2)+"MB");
System.out.println("可用最大内存:"+runtime.maxMemory()/Math.pow(1024, 3)+"GB");
}
}
- Runtime还提供了exec()方法,用于启动一个进程来运行操作系统的命令。
runtime.exec("notepad.exe");
运行示例中的代码可以打开记事本,其他命令可以自行查找。
今天没学会什么
System类和Runtime类不太会用
学习心得
System类和Runtime类还是第一次学,这些类还是挺有趣的,可以使用Runtime类获取JVM的处理器数量,获取的内存等等。用Runtime对象的exec方法打开画图软件,用while循环让他循环了1000次,直接让电脑卡死了。