多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Java编程基础:从数据类型到内存原理的完整指南

Java编程基础:从数据类型到内存原理的完整指南 前言本文旨在为Java初学者和有一定编程基础但希望系统巩固Java核心概念的开发者提供一份全面的学习指南。随着Java语言的持续演进许多新特性如switch表达式、类型推断等已经改变了传统的编程模式而底层的内存管理机制又是理解Java程序运行的关键。本文将系统性地讲解Java编程的基础要素从最基础的字面量和数据类型开始逐步深入到语法结构、运算规则最后剖析Java程序的运行机制和内存管理原理。目标读者Java编程初学者、需要复习Java基础知识的开发者、准备面试的技术人员。无论你是刚开始学习Java还是希望深入理解Java底层原理本文都将为你提供清晰的解释和实用的示例。主要内容概览本文将分为五个核心章节。首先介绍Java的基本数据表示方式字面量和变量然后详细讲解八种基本数据类型及其运算规则。接着探讨Java的核心语法结构包括选择语句、循环、数组和方法。最后深入Java程序的运行机制和内存管理模型帮助你建立从代码编写到程序执行的完整认知体系。每个章节都配有代码示例和关键注意事项确保理论知识与实践应用相结合。文章大纲第一章Java基础数据表示1.1 字面量类型六种基本数据表示方式1.2 变量数据的容器与声明语法1.3 存储规则二进制表示与内存分配基础第二章基本数据类型详解2.1 整数类型byte、short、int、long的区别与使用2.2 小数类型float与double的精度与内存差异2.3 字符类型char的编码与存储2.4 布尔类型boolean的逻辑表示2.5 数字计算类型转换与运算规则2.6 字符运算ASCII编码与字符转换第三章核心语法结构3.1 选择语句switch表达式的新特性与yield关键字3.2 循环结构for循环的基本语法与应用3.3 数组同类型数据的集合存储3.4 方法函数的定义、调用与返回值第四章程序运行机制4.1 编译与执行从.java到.class再到JVM4.2 跨平台原理Java虚拟机的核心作用第五章内存管理模型5.1 内存基础概念地址、空间与分配5.2 Java内存区域划分五大核心区域5.3 栈内存方法调用与线程隔离5.4 堆内存对象存储与共享5.5 方法区字节码信息与元数据存储5.6 其他内存区域本地方法栈与程序计数器1、字面量类型字面量数据类型有六种1.整数类型直接写 举例18-182.小数类型直接写到小数 举例1.93-5.213.字符串类型双引号 举例字符串测试4.字符类型单引号 举例男,A,05.布尔类型真假 举例true,false6.空类型空值 举例null变量程序中专门用来存储单个数据的容器数据类型 变量名 变量值;int a 10;整数类型 int小数类型浮点数 double字符串类型 String存储规则二进制中一个字节 8个bit位1 – 0000 00012 – 0000 0010变量声明 int是4个字节 – 32bit位int a 10;相当于00000000 00000000 00000000 00001010基本数据类型8个基本数据类型其中经常使用int double Boolean 字符一般使用引用类型String–字符串1、 整数整数取值范围内存byte-128 ~ 1271 bit位 00000000short-32768 ~ 327672 bit位 00000000 00000000int经常-2147483648(10位) ~ 21474836474 bit位 …long-9223372036854775808 ~ 922337203685477580719位8 bit位 1字节…byteb10;System.out.println(b);shortc32678;System.out.println(c);intd2147483647;System.out.println(d);longe9223372036854775807L;System.out.println(e);【注意】long声明的时候值的末尾加个L2、 小数类型浮点数float 内存 4字节【注意】float声明的时候值的末尾加个f或者Ffloatf3.14f;System.out.println(f);doubleg3.141592653589793;System.out.println(g);double经常使用 内存 8字节3、 字符char内存两个字节charha;System.out.println(h);4、 布尔Boolean内存1字节booleanitrue;System.out.println(i);数字计算类型不一样不能运算需要转成同类型的才能计算【隐式转换规则】java自动实现无需代码如有byte short类型的数据先提升为int类型把取值范围小的升为取值范围大的再进行计算byteshortintlongfloatdouble【强制转换 】需要手动书写代码inta10;byteb(byte)a;bytea10;byteb20;bytec(byte)(ab);字符运算大写字母32小写字符charnumA;charresult(char)(num32);//a2、语法2.1 switch 选择语句【新特性】intnum1;switch(num){case1,2-{System.out.println(A);}case3,4-{System.out.println(B);}default-{System.out.println(C);}}如果大括号里面的预聚体只有一行可以简写为intnum1;switch(num){case1,2-System.out.println(A);case3,4-System.out.println(B);default-System.out.println(C);}如果想要使用switch的语句的结果inta10;intb20;Stringoperator1;intresult1switch(operator1){case-{yieldab;}case--{yielda-b;}case*-{yielda*b;}case/-{yielda/b;}default-{yield0;}};System.out.println(result1);同样的如果大括号里面的语句体是一行可以简化为inta10;intb20;Stringoperator1;intresult1switch(operator1){case-ab;case--a-b;case*-a*b;case/-a/b;default-0;};System.out.println(result1);2.2 for 循环【新特性】for(初始化语句;条件判断语句;条件控制语句){}for(inti1;i10;i){System.out.println(i);}2.3 数组用来存储【同种数据类型】 的多个值完整格式intarr[]newint[]{1,2,3,4,5};简写格式intarr1[]{1,2,3,4,5};2.4 方法示例publicstaticintgetSum(inta,intb){intsumab;returnsum;}没有返回值的时候使用 void关键字有的时候按照返回值的类型进行声明3、原理3.1 运行机制HelloWorld.java -- 编译 -- HelloWorld.class(字节码文件) -- 运行 -- jvm安装jdk的时候其中就包括jvm虚拟机虚拟机可以实现跨平台一套代码多端运行下面是运行机制的流程图编译运行跨平台HelloWorld.javaHelloWorld.class 字节码文件JVM 虚拟机一套代码多端运行3.2 内存【内存】软件在运行的时用来临时储存的数据这个时候还不是硬盘储存不保存关闭再打开就没有了 【内存地址】 相当于给每个内存空间的格子定义的编号一个格子就是一个字节方便快速定位给查找内存中的储存值【内存地址编号的规则】 32位操作系统内存地址以32位的二进制表示64位操作系统内存地址以64位的二进制表示 二进制比较长转为16进制【java中的内存分配】栈内存堆内存方法区本地方法栈程序计数器3.2.1 栈内存每个线程都有自己独立的栈目前只要考虑一个即可方法被调用进栈执行执行完毕出栈【方法】程序的主入口main方法开始执行时会进栈代码执行完毕会出栈3.2.2 堆内存所有线程共享存储对象、数组、字符串常量池【new关键字】new关键字在堆内存中开辟并产生地址3.2.3 方法区JDK7永久性实现JDK8元空间实现从虚拟机内部移到本地内存。储存字节信息、常量、静态变量【字节码信息】主要用于存储.class文件程序在执行的 时候会先把字节码文件放在方法区中比如main方法一开始也是放在方法区中当开始执行的时候才开四加载到栈中执行【只存储不运行】3.2.4 本地方法栈调用本地native方法平时用不到不需要记3.2.5 程序计数器每个线程是独立的、记录当前线程执行的字节码指令地址行号代码执行到了第几行给cpu使用平时用不到不需要记
返回列表