Java学习—随笔
Java基本程序的构成
Java源代码通过编译器
生成字节码
,字节码
通过JVM(Java虚拟机)运行
数据类型
整型
在Java中,所有的数值类型所占据的字节数与平台无关,且Java没有任何无符号(unsigned)的 int、long、short、byte。
长整型数值有一个后缀 L或l(如:400000000000L);十六进制数值有一个前缀 0x 或 0X(如:0xCAFE);八进制数值有一个前缀 0(如:010对应十进制的8);二进制数值有一个前缀: 0b 或 0B(如:0b1001)。
浮点数
在Java中有两个浮点数类型:float 和 double,float 类型的数值有一个后缀 F或f(如:3.14F),没有后缀的浮点数总是默认为 double 类型。
字符串
- 字符串的长度:
length()
; - 取出字符串中的一个字符:
charAt()
; - 去除左右多余的空格:
trim()
; - 在一个字符串中查找某个字符串的位置:
indexOf()
,返回该字符串第一次出现的位置; - 字符串拼接:
substring()
,两种调用方法:一是substring(开始索引,结束索引)
,左闭右开;二是substring(开始索引)
,从开始索引的位置直到最后; - 字符串开始和结束内容判断:
startsWith()/endsWith()
,返回布尔值; - 字符串替换或者删除:
replaceAll("要替换的值","新值")
,返回一个新的字符串,不会修改原来的字符串; - 字符串分割:
split("分割字符串")
,以分割字符串为分割点将字符串分割并返回一个数组,特殊的:.
、|
、*
这三个做分割字符时需要在他们前面加上\\
; - 大小写转化:
toUpperCase()/toLowerCase()
; - 字符串比较:
equals()
,与==
不同,后者有可能会出错; - 转化字符串为数字:
Integer.parseInt(str)
,返回一个数字; - 数字转化为字符串:
public static void main(String[] args) {
String str = "Java是一种广泛使用的计算机编程语言,于1995年5月以Java的名称正式发布。";
int index = str.indexOf("Java");
//查找某个字符串第二次出现的位置,传入第二个参数,从该参数位置开始查找
index = str.indexOf("Java", index + 4);
System.out.println("第二次匹配到了Java,索引位置是" + index);
}
public static void main(String[] args) {
String fileName = "报告.doc";
if(fileName.endsWith(".doc")){
System.out.println("是word文档");
}
}
public static void main(String[] args) {
String str = "Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。";
String newStr = str.replaceAll("Java","Python");
System.out.println(newStr);
System.out.println(str);
}
接口
接口是代表集合的抽象数据类型,有些类似C语言中的数据结构,例如:Collection、List、Map、Set 等等。而实现类是集合接口的具体实现,从本质上讲,他们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
在 Java 中接口是不能被直接实例化的,所以如果想得到一个接口类型的变量,需要new
实现类得到:
// 创建一个字符串集合,用于存储多个字符串
List<String> strings = new ArrayList<>();
// 创建一个用户集合,用于存储多个用户信息,用户类是自定义的 class
List<User> users = new ArrayList<>();
异常
异常发生的原因主要有以下三点:
- 用户输入了非法数据;
- 要打开的文件不存在;
- 网络通信时链接中断,或者JVM内存溢出。
捕获异常
List<String> strs = new ArrayList<>();
strs.add("a");
strs.add("b");
try {
//IndexOutOfBoundsException
System.out.println(strs.get(2));
} catch (Exception e) {
//java.lang.IndexOutOfBoundsException: Index 2 out of bounds for length 2
System.out.println(e);
} finally {
System.out.println("Finally is always printed!");
}
System.out.println("Catching the exception could keep code going.");
时间
时间对象的类型:yyyy-MM-ddTHH:mm:ss:SSS
,获取当前时间对象:LocalDateTime now = LocalDateTime.now();
,getMonth()和getDayOfWeek()
方法返回的是一个对象,所以需要ge'tValue()
获取具体的值,而其他的方法不用。
//以某种格式转换时间对象为字符串类型
DateTimeFormatter dft = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String nowDft = dft.format(now);
//将某种格式的时间字符串转换为时间对象
String str1 = "2022/01/12 21:54:00";
LocalDateTime time1 = LocalDateTime.parse(str, dft);
//若字符串满足格式: yyyy-MM-ddTHH:mm:ss 则不需要使用 formatter
String str2 = "2022-01-12T21:54:00";
LocalDateTime time2 = LocalDateTime.parse(str);
文件
导入import org.apache.commons.io.FileUtils;
,使用 commons.io 更方便的读写文件
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) {
File file = new File("./data/users.txt");
String content = null;
List<String> lines = null;
try {
//将全部数据读取并返回一个字符串
content = FileUtils.readFileToString(file,"utf-8");
//按行读取数据
lines = FileUtils.readLines(file, "utf-8");
} catch (IOException e) {
e.printStackTrace();
}
//将字符串以某个特定字符划分为若干个字符串并存入数组中
for(String line : lines)
String[] strings = line.split(" ");
System.out.println(content);
}
}
JSON 数据
序列化:将Java对象转化为Json字符串;
如果需要将LocalDateTime
转化为JSON字符串,需要在声明变量前加入注解:
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime gmtCreated;
ObjectMapper mapper = new ObjectMapper();
for (User user : users) {
try {
//将user对象转化为JSON字符串
String string = mapper.writeValueAsString(user);
System.out.println(string);
} catch (Exception e) {
e.printStackTrace();
}
}