Javase | 字符编码、转义字符、方法执行过程中的 “内存分配”

字符编码

  • 为了让计算机可以表示现实世界中的文字,我们需要人为进行干涉,需要人负责提前制定文字” 和 “二进制” 之间的对照关系。这种对照关系被称为:字符编码
  • 字符编码就是人为干涉的一本字典 / 一张对照表,在这种对照表中很清楚的描述了 “文字”和“二进制‘之间的对照关系
  • 计算机 最初只支持英文最先出现字符编码是: ASCII码 。编码和解码的时候采用同一套字典/对比表,不会出现乱码。

  • 随着计算机的发展,后来出现了一种新的编码方式,是国际化标准组织ISO制定的,这边编码方式支持西欧语言。其会向上兼容ASCII码,仍然不支持中文。这种编码方式是 : ISO-8859-1 ,又被称为 latin-1

  • 随着计算机向亚洲发展,计算机开始支持中文、日文、韩文等国家文字,其中支持简体中文的编码方式:GB2312 < GBK < GB18030

    GB2312可表示的汉字最少GB2312可表示的汉字最多

  • 支持繁体中文 : 大五码 Big5

  • 后来出现了一种编码方式统一了全球所有文字,容量较大,这种编码方式叫做:unicode编码 (万国码)。

  • unicode编码方式有多种具体的实现:

    UTF-8
    UTF-16
    UTF-32

  • Java语言代码采用的是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方法中的ab变量sumInt( )方法。a b变量是局部变量在main内存中开辟两个空间存放。执行sumInt( )方法

  • ③执行 sumInt( )方法。开辟一个属于sumInt方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是

  • ④执行 divide( )方法。开辟一个属于divide方法的独立的 (栈内存) 内存空间。方法内的变量为局部变量。参数传递的是

  • ⑤ 最后一层一层return值

    在这里插入图片描述

  • ps :

    方法中进行参数传递时,传递的变量中保存的

    ②处于栈顶部的元素是活跃状态

猜你喜欢

转载自blog.csdn.net/m0_70720417/article/details/132700675
今日推荐