Java_01【基础】

写在最前面:复习了很久的Java 经过准备 现在开始 总结Java 中遇到的 有价值的 内容

01_Java基础知识

1.jdk jvm jre三者之间的关系

JDK(Java Development Kit)是针对Java开发员的产品,是整个Java的核心,包括了Java运行环境JRE、Java工具和Java基础类库。DK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。

Java Runtime Environment(JRE)是运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。包含了Java virtual machine(JVM),runtime class libraries和Java application launcher,这些是运行Java程序的必要组件。
JVM是Java Virtual Machine(Java虚拟机)的缩写,是整个java实现跨平台的最核心的部分,能够运行以Java语言写作的软件程序所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
在这里插入图片描述

2.Java 编译过程以及如何实现平台无关性

java编译器(编译)—虚拟机(编译执行)—解释器(翻译)—机器码

第一步 在运行 javac java文件会产生一个 .class 文件 保存在硬盘中
第二步 在一次运行 java java文件会被JRE类加载器从硬盘读取
第三步 然后执行引擎解释或者编译类文件,转化成特定CPU的机器码,CPU执行机器码,至此完成整个过程。
1.jvm(java虚拟机)在编译程序和机器组织将加入一层抽象的虚拟机器
特点 在任何平台上都能为编译程序提供一个共同接口

3堆 栈关系

Person p = new Person(“例子”,10);
在这里插入图片描述
堆 存放储存对象的实力数据
栈 存放数据的引用 存取速度快 数据大小与生存期必须确定 站数据可以共享
例如 int a=3; int b=3;
执行第一步是 编译器预处理 int a =3 会在栈中创建 a引用 然后在堆中寻找 3值 没有 则开辟空间存放3 将a指向3的地址
第二步 执行int b =3;时同样的在栈上为b创建一个引用 但是 会在堆上找到 3 为了节省空间 会将b的地址指向3 就会产生 数据共享机制
但是如果修改b或者a的值 并不会影响 因为还会在堆上寻找 无 则创建一个新的地址存放
在这里插入图片描述
String str = “abc”;
(1)先定义一个名为str的对String类的对象引用变量:String str;
 (2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
 (3)将str指向对象o的地址。
 #### 4。数据类型
 在这里插入图片描述
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0

short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0

int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0

long:长整型,在内存中占64位,即8个字节-263~263-1,默认值0L

float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0

double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0

char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空 null

boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
基本数据类型是分配在栈上
引用类型是分配在堆上

5 值传递 引用传递

值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,函数接收的是原始值的一个copy,此时内存中存在两个相等的基本类型,即实际参数和形式参数,后面方法中的操作都是对形参这个值的修改,不影响实际参数的值。

引用传递:
也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,函数接收的是原始值的内存地址;
在方法执行中,形参和实参内容相同,指向同一块内存地址,方法执行中对引用的操作将会影响到实际对象

(1)基本数据类型传值,对形参的修改不会影响实参;
(2)引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象;
(3)String, Integer, Double等immutable的类型特殊处理,可以理解为传值,最后的操作不会修改实参对象。

猜你喜欢

转载自blog.csdn.net/qq_36390039/article/details/88552741