写在之前:
本系列文章内容仅仅是对yangchong相关文章内容的收藏与再备份,有需要查看作者原文的请点击此链接:技术博客笔记大汇总
一、Java语言概述
1、jdk工具部分exe解释
①jar.exe jar包
②javadoc.exe 文档生成器
③Java.exe 解释器
④Javac.exe 编辑器
2、开发与运行Java程序需经历的几个过程
①用工具编辑源程序,也就是写代码,保存,生成java文件;
②用Java编辑器工具javac.exe编译源程序文件,生成字节码.class文件;
③用Java解释器工具Java.exe解释运行生成.class文件;
3、Java虚拟机(JVM)与Java代码是如何实现跨平台运行的
※※ JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序;
※※ 而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了“一次编译,到处运行”的目的;
※※ JVM是一个“桥梁”,是一个“中间件”,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的;
※※ 编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行;不同平台下编译生成的字节码是一样的,但是JVM翻译成的机器码不一样;
※※ 运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持;
※※ 跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM
二、Java标识符相关
1、组成规则
①英文大小写字母
②数字字符
③$或_
2、注意事项
①不能以数字开头
②不能是Java中的关键字
③区分大小写
④不能有空格
3、命名规范(必须见名知意)
①下划线式命名;(例:my_name)
②驼峰式命名;(例:myName)
③类,接口命名:必须是大写字母开头;(例:PersonActivity)
④方法,变量【字符串】命名;(例:getData(),otherName)
⑤常量命名:一般全是大写;(例:MAX_VALUE)
三、Java中的常量与变量
1、概念
①常量:其值不可以改变
②变量:其值会发生变化
2、常量
①字符串常量:用双引号包括的 "hello world"
②整型常量:所有的整数 199
③小数常量:所有的小数 4.50
④字符常量:用单引号包括的 'a'
⑤布尔常量:true和false
⑥空常量:null
3、变量
用来描述值可以变化的量,比如室外温度,App活跃用户量...等
四、Java中的进制
1、进制有哪些
①二进制(前缀0b或者0B):由数字0和1组成;例:0B1001
②八进制(前缀0):由数字0-7组成;例:0103
③十进制(没有前缀):由数字0-9组成;例:103
④十六进制(前缀0x或者0X):由数字0-9 和字母 A-F组成;例:0X123
2、进制的转换
①其他进制转十进制:
②十进制转其他进制:除X取余倒排法(X表示进制)
3、原码、反码、补码相关知识
①概述:计算机中的有符号数有三种表示方法,即原码、反码和补码;三种表示方法均有符号位和数值位两部分;符号位都是用0表示“正”,用1表示“负”;而数值位,三种表示方法各不相同;
②模:是指一个计量系统的计数范围;例:8位二进制:其系统的模为;
③原码求反码:正数的反码和原码相同;负数的反码是对正数逐位取反,符号位为1;
④原码求补码:正数的补码和原码相同;负数的补码是它的反码加1;
五、Java中的字符编码
1、常见的字符编码
①ASCII码
②GBK码
③Unicode码(占2个字节)
六、Java运算符
1、运算符有哪些
①算术运算符
②赋值运算符
③关系运算符
④逻辑运算符
⑤三目运算符
⑥特殊运算符:位运算符
2、算术运算符
+、-、*、/、%、++、--
3、赋值运算符
=、+=、-=、 *=、/=、%=
4、关系运算符
== 、>、<、>=、<=、!=
5、逻辑运算符
&、^、|、&&、||、!
6、三目运算符
表达式:a == b ? c : d
格式:(条件表达式)?表达式1:表达式2
7、特殊运算符:位运算符
&、|、^、~、<<、>>、>>>
七、Java基本语句结构
1、语句结构有哪些
①顺序结构
②选择结构
③循环结构
2、顺序结构
即:从上到下依次执行
3、选择结构
①if、if...else...、if...[else if...]else...
②switch...case...;(支持byte,short,char,int,String)
4、循环结构
①for语句
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
②while语句
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
③do...while...语句
do{
循环体语句;
}while(判断条件语句)
八、Java方法
1、概述
①方法就是完成特定功能的代码块;
②系统方法:只需要会使用,不需要知道内部的结构;
③自定义方法:方法的内部实现需要我们来写;
④方法内部不能再嵌套方法,即方法不能嵌套定义;
2、格式
修饰符 返回值类型 方法名(参数类型 参数名, ……){
函数体
return 返回值(可省略,当返回值类型为void时,不需要return返回)
}
①修饰符:public/.../private、static这种修饰符;
②返回值类型:所有的数据类型,包括:基本类型:int ,char ,float, long, 引用类型:String;
③方法名:符合标识符命名规范;见名知意;
④参数类型:所有的数据类型;
⑤参数名:符合标识符命名规范;见名知意;
⑥返回值:要返回的结果值;结果值的类型需要与返回值类型一致;可不需要返回值;
九、Java中的数组
1、概述
※※ 数组是一个容器,可以存储多个变量,这些变量数据类型要一致;
※※ 数组既可以存储基本数据类型,也可以存储引用数据类型;
2、一维数组
①数组的定义格式
格式一:数据类型[ ] 数组名
格式二:数据类型 数组名[ ]
②数组的初始化:
Java中的数组必须先初始化,然后才能使用;
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值;
③数组初始化的几种方式:
动态初始化:只指定长度,由系统给出初始化值;例:int[] a=new int[5]
静态初始化:给出初始化值,由系统决定长度;例:int [] a={1,2,3};int[]=new int[]{1,2}
※※ 这两种初始化方式,只能使用一种,不能进行动静结合;
3、二维数组
①数组的定义格式:
数据类型[ ][ ] 变量名 = new 数据类型[m][n];
m表示这个二维数组有多少个一维数组;
n表示每一个一维数组的元素个数;
十、Java内存机制
1、JVM内存区域划分
①程序计数器:线程私有;指示当前线程所执行的字节码执行到了第几行;
②虚拟机栈:线程私有;描述 java 方法执行的内存模型;
③本地方法栈:线程私有;描述 native 方法执行的内存模型;
④堆区:线程共享;垃圾回收器管理的主要区域,唯一目的就是存放对象的实例;
⑤方法区:线程共享;存储已经被虚拟机加载的类信息、final常量、静态变量...等;
2、Java对象的访问方式
一个Java的引用访问涉及到3个内存区域:JVM栈,堆区,方法区;
以最简单的本地变量引用:Object obj = new Object()为例;
Object obj:表示一个本地引用(引用类型),存储在JVM栈的本地变量表中;
new Object():作为实例对象数据存储在堆中;
方法区中还记录了Object类的类型信息(接口、方法、field、对象类型等);
3、垃圾回收机制(GC机制)
后续详细介绍;
十一、使用switch和if-else区别
1、switch语句特点
※※ 使用switch语句时,要注意表达式必须是符合byte,char,short,int或枚举类型的表达式,而不能使用浮点类型或long类型;
※※ switch语句将表达式的值依次与每个case子语句中的常量值相比较。如果匹配成功,则执行该case语句中的语句,直到遇到break语句为止;
※※ default语句是可选的,当表达式的值与任何一个case语句都不匹配时,就执行default后的语句;
2、switch语句与if-else比较
※※ if-else只是单纯地一个接一个比较;if...else每个条件都计算一遍;
※※ 使用了Binary,Tree算法;绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。编译器编译switch与编译if...else...不同。不管有多少case,都直接跳转,不需逐个比较查询;switch只计算一次值,然后都是test , jmp……有很多else if的时候,用switch case比较清晰;
※※ switch...case与if...else,if的根本区别在于:switch...case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的;从而,switch...case不用像if...else那样遍历条件分支直到命中条件,只需访问对应索引号的表项从而到达定位分支的目的;