目录:
- 字符编码
- 转义字符:
- 转义字符
- 在控制台上输出 “反斜杠字符”
- 在控制台上输出 “单引号字符”
- 方法执行过程中的 “内存分配”
字符编码
- 为了让计算机可以表示现实世界中的文字,我们需要人为进行干涉,需要人负责提前制定 “文字” 和 “二进制” 之间的对照关系。这种对照关系被称为:字符编码。
- 字符编码就是人为干涉的一本字典 / 一张对照表,在这种对照表中很清楚的描述了 “文字”和“二进制‘之间的对照关系。
计算机 最初只支持英文,最先出现的字符编码是: ASCII码 。编码和解码的时候采用同一套字典/对比表,不会出现乱码。
随着计算机的发展,后来出现了一种新的编码方式,是国际化标准组织ISO制定的,这边编码方式支持西欧语言。其会向上兼容ASCII码,仍然不支持中文。这种编码方式是 : ISO-8859-1 ,又被称为 latin-1
随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:GB2312 < GBK < GB18030
(GB2312 :可表示的汉字最少; GB2312 :可表示的汉字最多)
支持繁体中文 : 大五码 Big5
后来出现了一种编码方式统一了全球所有文字,容量较大,这种编码方式叫做:unicode编码 (万国码)。
unicode编码方式有多种具体的实现:
UTF-8
UTF-16
UTF-32Java语言代码采用的是unicode编码,所以“标识符”可以识别中文。
转义字符:
转义字符
在 字符常量中,反斜杠号( \ )具有转义功能,是 转义字符,且是不能单独出现。
“转义字符” 结合 “特定的字符” 能形成一个“新的字符”。
转义字符的作用是转义后面的一个字符
(转义字符出现在特殊字符之前会将特殊字符转义成普通字符)
如:
char c1 = ‘n’; //字符n 和 字符 t 是一个普通字符
char c2 = ‘t’;
此时 反斜杠号 (\) 是转义字符。两者相结合能转义成一个新的字符。\+n —-> \n : 表示换行符 (表示的是一个字符)
\+t —–> \t : 表示制表符 (表示的是一个字符)
例子如:
//字符n 和 字符t 是一个普通字符 char c1 = 'n'; char c2 = 't'; /* * “转义字符” 结合 “特定的字符”能形成一个“新的字符”。 * * n : 普通字符 * \ : 转义字符 * \n : 转义成一个新的字符 : 换行符 */ /* * t : 普通字符 * \ : 转义字符 * \t : 转义成一个新的字符: 制表符 */
有一个问题:
既然反斜杠号 (\) 是转义字符,且不能单独出现 (”转义字符“ 配合 “特定的字符” 一起使用),那如果我们想要输出,或说就要输出 (普通含义/ 键盘含义上的) 反斜杠号本身,那咋办呢?
好办,那就让 “转义字符”是它,“特定的字符”也是它。即 反斜杠号 (\) + 反斜杠号 (\) , 两个结合的含义就是普通含义的 反斜杠号字符 (\)
如 : \\ —> \(第一个“转义字符“ 有转义功能,它会把后面那个有也有转义功能、也有特殊含义的“转义字符” 转换成不具备特殊含义的普通斜杠字符)
结论:
在java中两个反斜杠(转义字符) 代表一个普通的反斜杠字符。
转义字符出现在特殊字符之前会将特殊字符转义成普通字符
\n : 换行符
\r : 回车符
\t : 制表符
\’ : 普通的单引号
\" : 普通的双引号
在控制台上输出 “反斜杠字符”
有一个问题:
既然反斜杠号 (\) 是转义字符,且不能单独出现 (”转义字符“ 配合 “特定的字符” 一起使用),那如果我们想要输出,或说就要输出 (普通含义/ 键盘含义上的) 反斜杠字符本身,那咋办呢?
好办,那就让 “转义字符”是它,“特定的字符”也是它。即 反斜杠号 (\) + 反斜杠号 (\) , 两个结合的含义就是普通含义的 反斜杠号 (\)
如 : \\ —> \
(第一个“转义字符“ 有转义功能,它会把后面那个有也有转义功能、也有特殊含义的“转义字符” 转换/转义 成不具备特殊含义的普通斜杠字符)
结论:
在java中两个反斜杠(转义字符) 代表一个普通的反斜杠字符。
在控制台上输出 “单引号字符”
反斜杠具有转义功能,
反斜杠 + 一个单引号 字符 : 将有特殊含义的单引号转义成 普通 的单引号。即可 (在控制台) 输出 “单引号字符”。
(转义字符将有特殊含义的单引号转义成普通的单引号)
/* * 在控制台上输出一个普通的单引号字符 : * 用转义字符,将有配对功能的"单引号" 转义成: 普通的 "单引号" */ //反斜杠具有转义功能,将第二个单引号转换/转义为: 普通的单引号字符 //第一个单引号和最后一个单引号配对。 char c3 = '\''; System.out.println(c3);
//在控制台上输出一个普通的单引号字符 char c = 'a'; //正常输出字符a //java中不允许这样编写程序,会编译报错 char c1 =''; //以下编译报错: 第一个单引号和第二个单引号配对,最后的单引号找不到最后一半。 char c2 ='''; /** * 在控制台上输出一个普通的单引号字符 : * 用转义字符,将有配对功能的"单引号" 转义成: 普通的"单引号" */ //反斜杠具有转义功能,将第二个单引号转换/转义为: 普通的单引号字符 //第一个单引号和最后一个单引号配对。 char c3 = '\''; System.out.println(c3);
方法执行过程中的 “内存分配”
- 分析下面类中方法执行过程中的 “内存分配”
```java public class MethodTest { public static void main(String[] args) { int a =10; int b =20; int resultValue = sumInt(a,b); System.out.println(resultValue); } private static int sumInt(int i, int j) { int result =i + j; int num =3; int resultValue = divide(result, num); return resultValue; } private static int divide(int x, int y) { int z = x / y; return z; } } ```
① 类加载。把MethodTest类、String类、System类加载到 JVM中。
②执行main方法 。开辟一个属于main方法的独立的 (栈内存) 内存空间。
依次执行main方法中的a、b变量 和 sumInt( )方法。a b变量是局部变量在main内存中开辟两个空间存放。执行sumInt( )方法。③执行 sumInt( )方法。开辟一个属于sumInt方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是值。
④执行 divide( )方法。开辟一个属于divide方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是值。
⑤ 最后一层一层return值。
ps :
①方法中进行参数传递时,传递的变量中保存的值。
②处于栈顶部的元素是活跃状态。