diff --git a/java_note/Java.md b/java_note/Java.md index 21e6ce0677e5e93c114845bdbc38ada3cdd636c8..cc86eaad855541fcc53ae213a79e00b7938afcb1 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) @@ -27,9 +53,11 @@ ````java int[] num; - num = new int[3]; + 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,29 @@ 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,6 +216,7 @@ public static void main(String[] args) { #### 2.3.2 StringBuilder + - 可更改字符串,线程不安全 - 构造方法 @@ -171,8 +229,7 @@ public static void main(String[] args) { ```` - 方法 - 1. reverse - + 1. reverse 2. append ## 3. 集合 @@ -336,7 +393,6 @@ public static void main(String[] args) { - ## 4. I/O操作 - #### 4.1 创建目录 1. public boolean mkdir(); @@ -472,8 +528,7 @@ public static void writetest(){ } ```` - - + ## 6. 网络编程 @@ -505,5 +560,4 @@ public static void writetest(){ - 位:数据存储的最小单位 - 字节: 8位 -- 字符: utf-8 3字节 gbk 2字节 - +- 字符: utf-8 3字节 gbk 2字节 \ No newline at end of file