From c8ab844ea017fc59e0b1085f2cc1893049247ee8 Mon Sep 17 00:00:00 2001 From: my76572 Date: Thu, 24 Jun 2021 22:25:33 +0800 Subject: [PATCH 1/2] jvm --- java_note/Java.md | 126 +++++++++++++++++++++++++++------------------- 1 file changed, 75 insertions(+), 51 deletions(-) diff --git a/java_note/Java.md b/java_note/Java.md index d342a77..f2c0f37 100644 --- a/java_note/Java.md +++ b/java_note/Java.md @@ -1,4 +1,4 @@ -# Java +# Java ## 1. java基础 @@ -9,9 +9,35 @@ 1. boolean 2. char 3. byte 、short、int、long - 4. float 、 double + 4. float 、 double + ``` +#### 1.1.2 名词解释 + +- JRE:(java run environment) java程序运行环境,包含jvm和所需的核心类库。 + +- JDK:(java Development kit) java程序开发工具包,包括JRE和开发人员使用的工具(javac.exe编译工具)和(java.exe开发工具) + +- JVM:保证java程序的跨平台运行 + + ```` + JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method) + + 堆区: + 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) + 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 + 栈区: + 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 + 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 + 3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 + 方法区: + 1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 + 2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。 + ```` + + + ### 1.2 String类型 ​ [点击跳转深入String](#深入String) @@ -29,7 +55,9 @@ num = new int[3]; - num[数组key值]; + num[数组key值]; + + int data[] = {1, 2, 4, 545, 11, 32, 13131, 4444}; ```` 3. 匿名数组 @@ -46,13 +74,36 @@ ## 2. 深入String -### 2.1 ==和equals +### 2.1 字符串特点和比较 + +- String 字符串创建后不可修改,但可共享【在字符串池中共享】 +- 字符串效果上相当于字符数组(char[]),底层是字节数组( byte[] ) +- ==比较的是堆内存中的地址 + +- equals比较的是,字符串内容是否一样 + +### 2.2 String的构造方法和成员方法 + +- 构造方法 + + 1. public String() 【不论字符是否相同,JVM都会重新创建】 + + 2. public String(char[] chs) 根据字符数组内容,创建字符串对象【不论字符是否相同,JVM都会重新创建】 + + ````java + char[] chs = {'a','b','c'} + String s = new String(chs); + ```` -> ==比较的是堆内存中的地址 -> -> equals比较的是常量池中,字符串内容是否一样 + 3. public Sring(Byte[] bys) 根据字节数组内容,创建字符串对象 【不论字符是否相同,JVM都会重新创建】 -### 2.2 String方法 + ````java + byte[] bys = {97, 98, 99}; + String s = new Sring(bys); + System.out.orintln(s); // abc + ```` + + 4. String s = "abc"; 直接复制创建对象 【如果字符相同,则JVM只会**创建一次**,并在字符串池中进行维护】 #### 2.2.1 compareTo @@ -83,7 +134,7 @@ public static void main(String[] args) { 4. charAt - > 获取指定索引的位置的字符 + > `charAt(int index)` 返回指定索引处的 `char`值。 5. substring @@ -111,23 +162,26 @@ public static void main(String[] args) { 10. toUpperCase() +13. 遍历 + + ````java + String s = "终于肯向中国低头?华盛顿传出重大消息,美国将撤销对华两大禁令"; + for (int i=0; i < s.length(); i++ ){ + System.out.print(s.charAt(i)); + } + ```` + + + ### 2.3 buffer and builder - 和String类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 -- StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:**StringBuffer是线程安全的**,而StringBuilder则没有实现线程安全功能,所以性能略高。 -- ![string是不可改变的](./images/17cf6c28ad820bab7121da244c3eaf3.png) -- ![stringBuffer是可改变的](./images/4300ef8b8ec3f655e0428df15db1260.png) + #### 2.3.1 StringBuffer 1. 线程安全 -2. 构造方法: - - ````java - - ```` - -3. 举例 +2. 举例 ````java /** @@ -159,21 +213,8 @@ public static void main(String[] args) { #### 2.3.2 StringBuilder -- 可更改字符串,线程不安全 - -- 构造方法 - - ````java - //初始化空白字符 - StringBuilder sb = new StringBuilder(); - //初始化特定字符 - StringBuilder sb1 = new StringBuilder("hello"); - ```` - -- 方法 - 1. reverse - - 2. append + 1. 线程不安全 + 2. ## 3. 集合 @@ -339,17 +380,6 @@ public static void main(String[] args) { #### 4.1 创建目录 -1. public boolean mkdir(); -2. public boolean mkdirs(); 创建父目录和子目录 -3. File.separator 路径分隔符 -4. createNewFile() 创建文件 -5. exists(); -6. canRead() canWrite() isHidden() -7. public String[] list() 得到数组 -8. public File[] listFiles() 得到文件对象 -9. isDirextory() -10. delete() - ````java public static void mkdirtest(){ File mydir = new File("./src/main/java/com/ssmtest/mkdirtest"); @@ -439,13 +469,7 @@ public static void writetest(){ ````java ```` -#### 4.7 流式I/O -- 字节流相关的类分别集成 抽象类 InputStream OutStream -- 字节数组输入/输出流 ByteArrayInputStream ByteArrayOutStream -- 文件输入/输出流 FileInputStream FileOutStream -- 过滤流 FilterInputStream() FilterOutStream() -- -- Gitee From a46608fec962e60b44744e299835f32563abce46 Mon Sep 17 00:00:00 2001 From: my76572 Date: Thu, 24 Jun 2021 22:51:14 +0800 Subject: [PATCH 2/2] all --- java_note/Java.md | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/java_note/Java.md b/java_note/Java.md index f2c0f37..c590391 100644 --- a/java_note/Java.md +++ b/java_note/Java.md @@ -176,6 +176,9 @@ public static void main(String[] args) { ### 2.3 buffer and builder - 和String类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。 +- StringBuilder类也代表可变字符串对象。实际上,StringBuilder和StringBuffer基本相似,两个类的构造器和方法也基本相同。不同的是:**StringBuffer是线程安全的**,而StringBuilder则没有实现线程安全功能,所以性能略高。 +- ![string是不可改变的](./images/17cf6c28ad820bab7121da244c3eaf3.png) +- ![stringBuffer是可改变的](./images/4300ef8b8ec3f655e0428df15db1260.png) #### 2.3.1 StringBuffer @@ -213,8 +216,21 @@ public static void main(String[] args) { #### 2.3.2 StringBuilder - 1. 线程不安全 - 2. + +- 可更改字符串,线程不安全 + +- 构造方法 + + ````java + //初始化空白字符 + StringBuilder sb = new StringBuilder(); + //初始化特定字符 + StringBuilder sb1 = new StringBuilder("hello"); + ```` + +- 方法 + 1. reverse + 2. append ## 3. 集合 @@ -377,9 +393,19 @@ public static void main(String[] args) { - ## 4. I/O操作 - #### 4.1 创建目录 +1. public boolean mkdir(); +2. public boolean mkdirs(); 创建父目录和子目录 +3. File.separator 路径分隔符 +4. createNewFile() 创建文件 +5. exists(); +6. canRead() canWrite() isHidden() +7. public String[] list() 得到数组 +8. public File[] listFiles() 得到文件对象 +9. isDirextory() +10. delete() + ````java public static void mkdirtest(){ File mydir = new File("./src/main/java/com/ssmtest/mkdirtest"); @@ -469,7 +495,13 @@ public static void writetest(){ ````java ```` +#### 4.7 流式I/O +- 字节流相关的类分别集成 抽象类 InputStream OutStream +- 字节数组输入/输出流 ByteArrayInputStream ByteArrayOutStream +- 文件输入/输出流 FileInputStream FileOutStream +- 过滤流 FilterInputStream() FilterOutStream() +- -- Gitee