说明:长期支持版本jdk8、jdk11、jdk17。
一、Java的编译阶段和运行阶段
- Java文件的编译阶段,使用jdk文件中bin目录的javac程序先给.java文件编译成.class文件(这一步的操作是检查java的语法格式),然后再使用bin文件中的java程序再运行这个.class文件,就能运行成功。
- 编译成Class字节码文件之后,就可以使用class文件在不同的操作系统上去执行,这样就实现了跨平台的功能。
- Jvm是jdk带的java虚拟机,这样是为了实现跨平台时在不同的操作系统上分离出一个虚拟的计算机。在不同的操作系统上使用不同的虚拟机。也就是在不同的系统上也就有不同的jdk。
- Java运行阶段过程:
*打开DOS命令窗口(javac是编译,java是执行)
*输入:java A(编译后的.Class字节码文件)
*java.exe命令回去启动jvm虚拟机,jvm会启动类加载器classLoader
*ClassLoder会去硬盘上搜索A.class文件,找到文件后则将字节码文件装载到JVM当中
*JVM将A.Class字节码文件解释成二进制101010101这样的数据
*然后操作系统执行二进制和底层硬件平台交互
二、JDK、JRE、JVM
Jdk、jre、jvm的关系:
JDK:开发工具包
JRE:Java运行时环境
Jvm:java虚拟机(java程序最终运行在jvm虚拟机上的)
关系:JDK包含JRE包含JVM。
说明:开发时需要安装JDK,程序开发完后只需要运行不需要开发的话就只装JRE运行时环境又包含jvm,因为程序最终是运行在jvm上的。
三、环境变量的原理
- 配置完成环境变量后,首先从当前的目录下去查找文件
- 当前文件查找不到就从配置的环境变量里面查找。
- 如果再查找不到就报错。
举例:配置jdk环境变量时,首先在系统变量中新建JAVA_HOME值为jdk路径,在path变量中置顶%JAVA_HOME%\bin
四、注释
什么是注释?注释的作用是什么?
- 出现在java的源程序文件中,
- 不会编译成字节码文件。
- 一个好的开发习惯应该是多编写注释,这样的程序可读性比较好
java注释怎么写?
-单行注释:
//单行注释,只注释当前行
-多行注释
/
/*
-javadoc注释:这个注释可以被bin目录中的javadoc命令运行后会产生这个软件的说明书。(比较专业)
/**
*
*
/**
五、Class
Public class和class的区别:
- 一个源头文件中可以定义多个class
- 一个java源文件当中public的class不是必须的
- 一个class会定义生成一个xxx.class字节码文件
- 一个java源文件当中定义公开的类的话,只能有一个并且该类的名称必须和源文件的名称一致。(迷惑点,现在解决了!!!只要用public修饰的类,必须和源文件名保持一致。)
- 每个class当中都可以编写main方法,都可以设定程序的入口,向执行 B.class文件。
注意:一个类中必须有主方法,要不然编译错误:在…类中找不到主方法,请将主方法定义为:public …main(String[] args){}
六、标识符
- 什么是标识符?
-在java源程序当中凡是程序员有权利自己命名的单子都是标识符
-标识符在高级的编译器中以黑色字体高亮显示
-标识符可以标识什么元素呢?- 类名
- 方法名
- 接口名
- 常量
- 标识符的命名规则?(不按照这个规则来,编译器就会报错,这是语法)
* 一个合法的标识符只能由”数字、字母、下划线_、美元$符号组成”,不能有其他符号
* 不能以数字开头
* 严格区分大小写
* 关键字不能做标识符 - 标识符的命名规范?知识一种规范,为了使下一个人阅读代码性比较强
* 最好见名知意
* 遵守驼峰命名方式
SystemService
UserService
* 类名、接口名:首字母大写,后面每个单词字母大写
* 变量名、方法名:首字母小写,后面每个单词首字母大写。
常量名:全部大写
七、变量
- 什么是变量?
- 内存的一个存储区域,该区域内的数据可以在同一类型范围内不断变化。
- 变量本质上来说就是内存中一块空间,这块空间有数据类型、有名字、有字面值
- 变量包含三部分:数据类型、名称、字面值[数据]
- 变量是用来存储和操作数据的存储单元之一。
- 数据类型的作用?
- 不同的数据有不同的类型,不同的数据类型底层会分配不同的大小空间。
- 数据类型是指导程序在运行阶段应该分配多大的内存空间。
- 变量要求:变量中存储的具体数据必须和变量数据类型一直,当不一致时会编译报错。
- 声明/定义变量的语法格式:
- 数据类型 变量名;
- 数据类型:
目前我们还没有学习数据类型,但是提前告诉大家有一种数据类型是整数型,int - 变量名:只要是合法的标识符就行。规范中要求:首字母小写,后面每个单词首字母大写。
- 变量名声明之后怎么赋值?
语法格式:
变量名=字面值;
要求:字面值的数据类型必须和变量的数据类型一致。
= 等号是一个运算符,叫做赋值运算符,赋值运算符先运算等号的表达式,表达式执行结束之后的结果赋值给左边的变量。 - 声明和赋值可以放到一起完成。Int a=10;
- 变量赋值之后,可以重新赋值,变量的值可变化。
int a=10//10
Int a=20//20 - 有了变量的概念之后,内存空间得到了重复使用。
Int i=10;
System.out.print(i);
…
System.out.print(i); - 通常访问一个变量包括两种访问形式:
- 第一种:读取变量中保存的具体数据 get/获取
- 第二种:修改变量中保存的具体数据 set/设置
i=20;//set
System.out.print(i);//get
- 变量在一行上可以声明多个。int a,b,c;只是声明,没有赋值。在一起赋值汇报异常。
- 自上而下执行,比如第二行的代码完整编译之后,才会编译第三行代码。
- int a=10;
a=20
这两块指向的是同一块内存空间。 - 作用域:
什么是作用域?
变量的作用域,其实描述的就是变量的有效范围。
在什么范围之内可以被访问的,只要除了这个范围该变量就无法访问了。
变量的作用域只要记住一句话:出了大括号就不认识了。出了{}变量被释放了。 - 成员变量、局部变量。
成员变量:方法体外,类之内声明的变量。
局部变量:在方法体内声明的变量。
注意:1. 在不同的作用域变量名是可以重名的。反之不可以。就近原则static关键字。
在类体中不能直接书写java语句,除了声明变量以外。2. 局部变量需要生命变量和赋值操作,否则编译异常未初始化变量。成员变量可以直接声明,但是需要创建对象后才能访问。
八、数据类型
- 数据类型的作用是什么?
程序当中的很多数据,每一个数据都有相关的数据类型,不同数据类型的数据占用空间的大小不同,数据类型的作用是知道JVM在运行时给该数据分配多大的内存空间。 - java中的数据类型包括两种:
基本数据类型
引用数据类型
-类
-接口
-数组… - 关于基本数据类型:
基本数据类型类型包括四大类八小种:
第一类:整数型
Byte、short、int、long
第二类:浮点型
Float、double
第三类:布尔型
False、true
第四类:字符型
Char
注意:字符串不属于基本数据类型,属于引用数据类型。字符数据基本数据类型。
- 八种基本数据类型各自占用空间大小是多少?
基本数据类型八种 占用空间大小【单位:字节】
- Byte = 1
- Short = 2
- Int = 4
- Long = 8
- Float = 4
- Double = 8
- Boolean = 1
- Char = 2
- 计算机在任何情况下都只能识别二进制,例如:只认识101010100010001110011010…
[现代的计算机底层采用交流电的方式,接通和断开就两张状态,计算机只识别1或0,其他不认识] - 什么是二进制?
例如:十进制:012345678910111213141516
例如二进制:010111001011101111000… - 字节:
- 1B(节字:bytes ) = 8b(比特:bit 位,人为规定的最小计量单位 )
- 1KB = 1024B
- 1MB(兆) = 1024KB
- 1GB = 1024MB
- 1TB = 1024GB
- 1PB = 1024TB
- 整数型当中的byte类型,占用1个字节,所以byte类型的数据占用8个比特位。那么byte类型的取值范围是什么?
- 关于java中的数据类型,数字都是有正负之分的,所以在数字的二进制当中有一个二进制位被称为符号位。并且这个符号位在所有二进制位的最左边。0表示正数,1表示负数。
- char类型,正好是2个字节可以存储一个中文。是存储字符的不是存储字符串的。
- 整数类型:byte、short、int、long。
- Java语言当中的整数型字面值被默认当做int类型来处理。Long类型来处理的话,需要在整数型字面值后面添加l/L建议使用大写的L。
- java语言当中的整数型字面值有三种表示方式:
* 第一种方式:是吧进制【是一种缺省默认的方式】
* 第二种方式:八进制【在编写八进制整数型字面值的时候需要以0开始】
* 第三种方式:十六进制【在编写十六进制整数型字面值的时候需要以0x开始。】
Int类型是小容量,long是大容量,小容量可以自动转换成大容量,称为自动类型转换机制。(提前是long声明,且=赋值后面没有L的前提下。)
大容量转换成小容量,需要进行强制类型转换,加强类型转换需要加上强制类型转换符,加上强制类型转换符就编译通过了,但是运阶段可能损失精度。所以强制类型转换谨慎使用,因为损失精度之后可能会造成损失很严重。
- 浮点型:float单精度【4个字节】、double【8个字节,精度较高】
Double的精度太低,不适合做财务软件。财务涉及到钱的问题,要求精度较高,所以sun在基础se类库当中为程序员准备了精确度更高的类型,只不过这种数据类型是一种引用类型,不属于基本数据类型,他是java.math.BigDecimal
其实java程序中SUN公司提供了一套庞大的类库,Java程序员是基于这套基础的类库来进行开发的。所以要知道java的se类库的字节码在哪,要知道javase类库的源码在哪?
SE类库字节码:jdk目录jre\lib\rt.jar
SE类库源码:jdk目录\src.zip
在java语言当中,所有的浮点字面值【3.0】,默认被当做double类型来处理,要想该字面值当做float类型来处理,需要在字面值后面添加F/f - 布尔型:true、false
在java语言当中布尔类型只有两个值,没有其他值。不像c语言0和1.在底层储存的时候boolean类型占用1个字节,因为实际存储的时候false底层0,true底层是1。布尔类型在实际开发中非常重要,经常使用在逻辑运算和条件控制语句当中。
九、转义字符
- 属于char类型,”/”属于转义字符换行符: “/n”。Tab符:”/t”。两个\相当于一个\。
- JDK中自带的native2ascil.exe命令,可以将文字转换成unicode编码形式。在命令行中输入这个命令去掉.exe。
继续更新中…