Java
一种编程语言
一种开发环境
一种应用环境
一种部署环境
Java主要技术分支
JavaSE[J2SE]:Java标准版,主要用于桌面应用或者局域网应用开发
Java语言核心类:数据库连接,接口定义,输入/输出和网络编程
JavaEE[J2EE]:Java企业版,主要用于企业级电子商务应用开发
包含JavaSE所有类,并且包含用于开发区企业级应用的类,如EJB、Servelet、JSP、XML……J2EE 目前应成为开发电子商务应用的事实标准
JavaME[J2ME]:Java精简版,主要用于受限环境开发
Android所替代
Java的三种核心机制
Java虚拟机JVM
JVM创造了一个内部运行时系统(runtime system来执行Java代码,包括:加载.class字节码文件、管理内存、执行垃圾收集)
Java运行时环境JRE
Java不能直接操作内存,没有地址和指针的概念。但是提供了GC机制
Java程序并不是在本机操作系统上直接运行,而是通过Java虚拟机向本机操作系统进行解释来运行。这就是说,任何安装有Java虚拟机的计算机系统都可以运行Java程序,而不论最初开发应用程序的是何种计算机系统
Java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类
JDK包含JVM和其他工具,以及所有的API和相关文件
JDK:Java开发工具箱,例如Java解释器和javac编译器实际上都是Java开发工具
JVM:Java虚拟机,具体变成是按照虚拟机为目标进行编程,不在意具体软硬件平台的区别,这是Java跨平台的依据
JRE:Java运行时环境,提供系统支持
垃圾收集机制(Garbage Collection)
Java编程语言解除了程序员取消分配存储器的责任,它可提供一种系统级线程以跟踪每一存储器的分配情况。在Java虚拟机的空闲周期,垃圾手机线程检查并释放哪些可被释放的存储器
不再使用内存空间回收——垃圾回收
在C/C++等语言中,由程序员负责回收无用内存。Java语言消除了程序员回收无用内存空间的责任,它提供了一种系统级线程跟踪存储空间的分配情况,并在JVM的空闲时检查并释放那些可被释放的存储空间
垃圾收集在Java程序原型过程中自动运行,程序员无法精确控制和干预
其中参数配置实际上就是虚拟机优化的一个很重要的点
代码安全性检测(Code Security)
Java代码的目标运行环境在于网络,Java以牺牲执行性能为代价换取了高安全性
在运行时,执行机器只是将.class类文件通过交互后使用,一般情况下是看不到它的源代码.java,如果想要看到.java源程序,就要通过专用反编译工具才能看到。这就体现了Java在运行环境中相对其他语言来说,加强了代码的安全性
Java语言
一种面向对象的语言,编写程序的开始就是定义类的开始
一种平台无关的语言,必须程序运行的解释环境
一种健壮的语言,吸收了C/C++语言的优点,但是去掉了影响程序健壮性的部分,例如指针、内存的申请与释放等
典型的应用场景:互联网环境
Java是一种先编译后解释执行型的编程语言
javac Hello.java[源代码文件名称]编译,将源代码转换为虚拟机可以识别的中间性质语言ML,一般生成一个同名的后缀为class的文件(二进制文件、字节码文件),这里就是跨平台的原理
java Hello[类名称,就是源代码中class关键字后面所跟的名称]一般是解释执行字节码文件
Java 完全面向对象的编程语言,编写程序都是从类开始写起
①文件名必须与类名(public class,实际上一个文件可以定义无数多个class,但是只能由一个public class)取成一致,且二者的大小写要一致
②对于一个应用程序来说,必须且只能有一个main()方法。该方法标志着执行应用程序的起始点
③关键字public表明所有的类都可以调用该方法,
关键字static表明该方法是一个静态方法(可以通过“类名.方法名”的形式直接进行调用)
关键字void表示main()方法无返回值
④Java程序中的每条语句都要以分号“;”结束(包括以后程序中出现的类型说明等)
标识符
在Java编程语言中,标识符是赋予变量、类和方法的名称。
变量、函数、类和对象的名称都是标识符,程序员需要标识和使用的东西都需要标识符。
①标识符可由字母(Unicode编码字符集)、下划线_、美元符号$和数字组成,但数字不能做开头。
②标识符区分大小写,没有长度限制,可以为标识符取任意长度的名字,一般要求见名知意。例如:true、false、null为小写。
③标识符不允许使用保留字(goto const)和关键字(public class static……)
④Java语言中的保留字均用小写字母表示。
编码规范(建议性规则)
类名和接口(使用名词)首字母大写,大写字母分词
例如用户名称类应该命名为UserName
方法名称(使用动词)首字母小写,大写字母分词
例如干饭 ganFan
变量名称首字母小写,大写字母分词
例如考试成绩 examScore
包名称全小写,使用域名反转的方式定义,用点分开
例如给延大开发项目,可以定义包名称为edu.yanda,延大的网站域名为yanda.edu
常量全大写,以_分词
例如SEX_A
语法基础
Java是一种自由格式的语言,可以用任意个空格、制表符、换行符隔开每个词
System.
out.
println
( "Counted " + count + " chars." );
同时也允许将多行代码写在一行上,注意使用分号隔开。所有的语句末尾以分号“;”收尾
常见的编码错误
目前的要求:将所有的程序都必须写在方法内部,不能写在方法外
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210324171238482.png)
使用临时变量,Java要求必须是先定义后使用,必须是先赋初值后使用
变量
变量是Java程序中的基本存储单元,它的定义包括变量名、变量类型和作用域几个部分
例如int k=100; 其中int是数据类型,k是变量名 m
变量名称:在一个方法内部不允许出现多个同名称的变量
变量类型:Java属于强类型编程语言,变量类型一旦声明,则不能进行修改
常见问题:
Java是强类型语言
每个变量都有类型,每个表达式都有类型,而且每种类型都是严格定义的
Java编译器对所有的表达式和参数都要进行类型相容性的检查,以保证类型都是兼容的
任何类型的不匹配都将被报告为错误而不是警告。在编译器完成编译以前,错误必须被改正过来
Java语言数据类型可以分为:基本类型(原生类型)和引用类型
## 基本类型(原生类型)
基本类型是指不能再分解的数据类型,其数据在函数的调用中是以传值方式工作的
简单数据类型代表单值,而不是复杂的对象,所以简单类型上不能调用方法
Java是完全面向对象的,但简单数据类型不是。它类似于其他大多数非面向对象语言中的简单数据类型。这样做的原因是出于效率方面的考虑。在面向对象中引入简单数据类型不会对执行效率产生太多的影响
Java编程语言有八个原始数据类型,可分为4种整型、浮点数(两种)、字符型数据和布尔型数据,它们不会随着计算机类型而变化的,因为Java具有平台无关性,所以不论硬件平台是什么,1B都是8位
整数类型
**byte字节整、short短整、int整、long长整**
计算机中采用的是2进制数的方式存放整数。计算机一般提供了3种方式:原码、反码、补码
首先定义最高位为符号位,0正1负
Java中的数据采用的是补码的存储方式
byte:1B(8b):-128—127
short:2B:-32768到32767
int:4B:-2147483648到2147483647
long:8B:-9223372036854775808到9223372036854775807
十进制整数
如123、-456、0
八进制整数 以0开头
如0123表示十进制数83,-011表示十进制数-9
十六进制整数 以0x/0X开头
如0x123表示十进制291,-0X12表示十进制数-18
二进制整数 以0b/0B开头
例如0b10110010
整数类缺省为int类型,如在其后有一个字母“l/L”表示一个long值。例如:k=1234567867673L
数据溢出问题
浮点数类型
定义:
如果一个数包括小数点或指数部分,或者在数字后带有字母 F 或 f(float)、D 或 d(double),则该数为浮点数
分类:
float单精度、double双精度
float(4B)单精度浮点数 7-8位有效数据 1.4E-45 到 3.4028235E38
double(8B)双精度浮点数 15-16 有效数据 e308
表示方法:
十进制数形式:由数字和小数点组成,且必须有小数点,如 0.123, 1.23, 123.0
科学计数法形式:如:123e3 或 123E3,其中 e 或 E 之前必须有数字,且 e 或 E 后面的指数必须为整数
*在Java中浮点数无法准确存放,因此浮点数不能进行等值(==/!=)判断(除非使用BigDecimal)
BigDecimal[浮点数]和BigInteger[整数]是系统提供专供专门用于存放理论上无限位数数据的类型,但是一般不建议使用,因为计算时执行效率低下(金融系统中注意浮点数的使用问题)
如何进行浮点数的等值判断?
判断两个数据之间的差值小于某个定值时则认为相等,例如|a-b|<1e-6,其中的1e-6具体值取决于业务规则
常见错误:
float f1=12.34;
//语法报错的原因是12.34系统识别为double类型,将double类型赋值给float类型,需要进行窄化操作
字符类型char
Unicode:
Unicode 所定义的国际化字符集能表示迄今为止人类语言的所有字符集,它要求使用 16 位的宽度表示。 没有负数的 char
Unicode 字符的使用对于英语、德语、西班牙语或法语的语言是有些低效,因为这些语言能够被包含在 8 位内。但是为了程序的的可移植性和通用性,付出代价是很有必要的
Java中存放的字符型数据是16位(2B)无符号型数据,它采用的是Unicode编码字符集,不仅仅是ASCII集,其范围为0~65535
使用char类型可以表示单个字符,字符是用单引号括起来的一个字符 'a'
例如:char v1='d'; 不能使用双引号,双引号表示字符串,单引号才是字符。引号中只能有一个Unicode字符。
注意事项:
\u4e00-\u9fa5只匹配一个中文
布尔类型boolean
boolean数据类型有两种文字值:true(真)、false(假)
例如:boolean bb=true;
在Java编程语言中boolean类型只允许使用boolean值,在整数类型和boolean类型之间无转换计算