java的基础类
0x01 用户互动
public static void main(String[] args)
args 是在cmd中对于java代码的传参数
scanner 读取文件
public class ScannerFile {
public static void main(String[] args) throws Exception{
var sc = new Scanner(new File("C:\\Users\\Dem0\\Documents\\WeChat Files\\wxid_qiq4qj3xp5x821\\FileStorage\\File\\2021-08\\flag2.txt"));
while (sc.hasNextLine()){
System.out.println(sc.nextLine());
}
}
}
0x02 系统相关
Runtime 代表java程序运行时环境,可以访问JVM的相关信息,如处理器数量等
package crazy.test07;
public class SystemTest {
public static void main(String[] args) throws Exception{
var rt = Runtime.getRuntime();
System.out.println(
"处理器数量:" + rt.availableProcessors()
);
System.out.println(
"空闲内存:" + rt.freeMemory()
);
rt.exec("calc");
}
}
process代表的进程,ProcessHandler接口可以控制
package crazy.test07;
import java.util.concurrent.CompletableFuture;
public class ProcessHandleTest {
public static void main(String[] args) throws Exception {
var rt = Runtime.getRuntime();
ProcessHandle p = rt.exec("calc").toHandle();
System.out.println("进程是否运行:" + p.isAlive());
System.out.println("进程ID:" + p.pid());
ProcessHandle.Info info = p.info();
System.out.println("进程执行命令:" + info.command());
System.out.println("进程参数:" + info.arguments());
CompletableFuture<ProcessHandle> cd = p.onExit();
}
}
0x03 常用类
1. Object
clone 机制对于类的复制
implements Cloneable
2. String StringBuffer StringBuilder
String 不可变类 一旦创建时不会改变的
StringBuffer 字符序列可变的字符串 线程安全
StringBuilder 未实现线程安全
package crazy.test07;
public class StringBuilderTest {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("java");
sb.insert(0,"hello ");
sb.replace(5,6,",");
sb.delete(5,6);
System.out.println(sb);
sb.reverse();
System.out.println(sb);
}
}
3. BigDecimal
注意 新建的时候最好使用.valueof方法 高精度运算
package crazy.test07;
import java.math.BigDecimal;
public class BigDecimalTest {
public static void main(String[] args) {
var f1 = new BigDecimal("0.05");
var f2 = BigDecimal.valueOf(0.01);
var f3 = new BigDecimal(0.05);
System.out.println("使用String:");
System.out.println("0.05 + 0.01 = " + f1.add(f2));
}
}
0x04 变量处理和方法处理
MethodHandle
Throwable
|-- Error 严重错误,如栈溢出,内存溢出等
|-- Exception
|- - CheckedException 可查异常,若不加处理,编译不通过
|- - RuntimeException 运行时异常,可以进行编译
VarHandle 处理类中属性
package crazy.test07;
import java.lang.invoke.MethodHandles;
import java.util.Arrays;
class User{
String name;
static int MAX_AGE;
}
public class VarHandle {
public static void main(String[] args) throws Exception{
var sa = new String[]{"JAVA","Kotlin","Go"};
//获取一个String[]的数组的varhandle对象
var avh = MethodHandles.arrayElementVarHandle(String[].class);
//比较并设置:如果第三个元素是Go 则该元素设置伪Lua
var r = avh.compareAndSet(sa,2,"Go","Lua");
System.out.println(r);
//获取sa数组中的第二个元素
System.out.println(avh.get(sa,1));
//获取并设置:返回第三个元素 并将第三个元素设置为Swift
System.out.println(avh.getAndSet(sa,2,"Swift"));
//看到当前的输出
System.out.println(Arrays.toString(sa));
//用FindVarHandle方法来获取User类中名为name,类型为String的对象
var vh1 = MethodHandles.lookup().findVarHandle(User.class,"name", String.class);
var user = new User();
System.out.println(vh1.get(user));
vh1.set(user,"dem0");
System.out.println(vh1.get(user));
//用FindVarHandle方法获取User
}
}
0x05 国际化
package crazy.test07;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;
public class HelloArg {
public static void main(String[] args) {
Locale curentLocale = null;
if(args.length == 2) {
//使用成熟的连个参数构造Locale实例
curentLocale = new Locale(args[0],args[1]);
}
else{
curentLocale = Locale.getDefault(Locale.Category.FORMAT);
}
var bundle = ResourceBundle.getBundle("myMess",curentLocale);
var msg = bundle.getString("msg");
System.out.println(MessageFormat.format(msg,"dem0",new Date()));
}
}
MessageFormat处理包含占位符的字符串
NumberFormat处理格式化数字
DateFormat格式化字日期
SimpleDateFormat
0x06 日期
DateTimeFormatter类