1.1 java历史
Java诞生于SUN(Stanford University Network),09年被Oracle(甲骨文)收购。
Java之父是詹姆斯.高斯林(James Gosling)。
1996年发布JDK1.0版
1.2 Java语言的主要特点
特点一:面向对象
两个基本概念:类和对象
三大特征:封装、继承、多态【抽象】
特点二:健壮性
吸收了C/C++语言的优点,丢弃了其影响健壮性的部分(指针、内存的申请与释放等),提供了一个相对安全的内存管理和访问机制
特点三:跨平台性
通过Java语言编写的运用程序在不同的系统平台上都可以运行,‘一次编译,到处运行’。
实现跨平台的原理:Java程序是通过JVM在操作系统上运行的,只要安装了相对应的JVM,该系统就可以运行JAVA程序,通过源文件(.java)---->编译(.class)字节码文件---->解释----->操作系统
JVM的作用:将字节码(.class)解释成对应的系统平台机器码并执行;
1.3 Java环境的搭建
Java开发人员需要安装JDK。如果只是运行Java程序那么只需要安装JRE就可以了。
JDK(Java Developement kits):Java开发工具包
JRE(Java Runtime Environment):Java运行环境
JVM (Java Virtual Machine):Java虚拟机
JDK = JRE + 开发工具(javac.exe,java.exe,javadoc.exe等)
JRE = JVM + Java核心类库(常用类:String(字符串),Date(日期时间),Math(数字),IO(输入输出流),net(网络),集合,多线程等)
1.3.2 Java的环境搭建
1、安装JDK
2、配置JDK的开发工具集(bin)目录到path环境变量中
例如:D:ApacheSoftwareFoundationJavajdk1.8.0_221;(注意:以自己的安装目录为准)
3、如何配置环境变量:【计算机】右键【属性】,选择【高级系统设置】,选择【高级】,选择【环境变量】
4、配置path系统变量的作用:%PATH%代表可执行文件的搜索路径,默认为 Windows 目录和系统目录,配置后可以直接打开可执行文件
5、为什么要配置环境变量:希望在命令行使用javac.exe等工具时,任意目录文件都可以找到这个工具所在的目录。
1.4 第一个Java应用程序
class HelloWorld{
public static void main(String[] args){
System.out.println("Hello world!");
}
}
1.4.1 Java程序的开发步骤
1、编写:编写.java文件
2、编译:通过javac.exe编译成.class字节码文件(因为JVM只认识字节码)
javac 源文件名称.java
3、运行:通过java.exe文件运行
Javac 类名.java
java 字节码文件
1.4.3 Java程序的入口
Java程序的入口是main方法
public void void main(String[] args){
}
1.4.4 Java注释
1、单行注释
//注释内容
2、多行注释
3、文档注释
1.5 编写Java程序时应该注意的问题
1、字符编码格式问题
使用cmd命令行的字符编码格式与源文件.java的字符编码不一致如何解决(原因:大部分cmd命令行默认的字符编码格式和系统相同为"GBK",而.java文件的编码格式为其他,通过命令行的方式去解码不为"GBK"编码的文件时,就会导致乱码)
2、大小写问题:Java语言严格区分大小写
(1)源文件名称不区分大小写(建议区分);
(2)字节码文件、类名、代码中都区分大小写;
3、源文件名称和类名一致问题
(1)如果这个类不是public修饰的,源文件名称可以和类名不同;
(2)一个文件中可以存在多个非public修饰的类;
(3)如果这个类是public修饰的,源文件名称必须和public修饰的类名相同;
(4)一个文件中最多只能存在一个public修饰的类(不包括内部类);
建议:不管是不是public修饰的类,都与源文件的名称相同,且一个源文件只写一个类(原因:好维护);
(5)main方法必须在public修饰的类中?
可以在其他类中,由于代码习惯,基本上写在public修饰的类中。
第二章 Java的基本语法
2.1 标识符
凡是可以自己命名的地方都可以称作标识符
例如:类名,变量名,方法名等
1、标识符的命名规则
(1)Java中的标识符由26个英文字母大小写,数字0-9,美元符号&和下划线_组成;
(2)不可以使用Java的关键字,特殊值和保留字;
(3)不可以以数字开头;
(4)不可以包含空格;
(5)严格区分大小写;
2、标识符的命名规范
(1)见名知意;
(2)类名,接口名等:采用大驼峰命名法也就是单词首字母大写(XxxYyyZzz);
(3)变量名,方法名等:采用小驼峰命名法也就是第二个单词的首字母开始大写(xxxYyyZzz);
(4)包名:全部字母小写,单词之间使用.隔开(xxx.yyy.zzz);
(5)常量名:全部字母大写,单词之间使用_隔开(XXX_YYY_ZZZ);
2.2 变量
2.2.1 概念
变量的作用:用来存储数据,代表内存中的一块存储空间,变量中的值是可以改变的
2.2.2 变量使用的三要素
(1)类型名称
(2)变量名
(3)变量值
2.2.3 变量使用的注意事项
(1)先声明后使用
(2)变量名有作用域
(3)同一个作用域下不能重名
(4)使用前必须先初始化
2.2.4 变量的声明赋值的语法格式
声明:数据类型 变量名 = 变量值;
例如:int num = 10;
2.3 数据类型
2.3.1 数据类型的分类
1、基本数据类型(8种):byte,short,char,int,long,float,double,boolean;
2、引用数据类型:String、enum、数组、接口等;
2.3.2 基本数据类型
1、整数系列
(1)byte(字节型):1个字节(取值范围:-27~27-1)
(2)short(短整型):2个字节(取值范围:-215~215-1)
(3)int(整型):4个字节(取值范围-231~231-1)
(4)long(长整型):8个字节(取值范围-263~263-1)
注意:如果要表示某个常量数字它是long类型,那么需要在数字后面加L或l
2、浮点系列
(1)float(单精度浮点):4个字节(精度:科学记数法的小数点后6~7位)
注意:如果要表示某个常量数字是float类型,那么需要在数字后面加F或f
(2)double(双精度浮点):8个字节(精度:科学记数法的小数点后15~16位)
3、字符类型:char(字符):2个字节
(1)Java中使用的字符集:Unicode编码集
(2)字符的三种使用方式
(1)表示单个字符
例如 :‘A’;
(2)转义字符
例如:t,n等;
Unicode的十六进制表示
x4E2D代表’中’;
4、布尔类型:boolean:只能存储true或false
2.3.3 进制
(1)进制类型:
二进制:逢二进一,由数字0-1组成
八进制:逢八进一,由数字0-7组成
十进制:逢十进一,由数字0-9组成
十六进制:逢十六进一,由数字0-9,A-F组成
(2)为什么byte的取值范围是-128~127?
1个字节:8bit
0000 0001 ~ 0111 1111 ===> 1 ~ 127;
1000 0001 ~ 1111 1111 ===> -127 ~ -1;
0000 0000 = 0;
1000 0000 = -128;(特殊规定)
计算机中的数据存储
计算机数据的存储使用二进制补码形式存储,并且最高位是符号位,1是负
数,0是正数。
规定:正数的补码与反码、原码一样,称为三码合一;负数的补码与反码、原码不一样:
(1)负数的原码:把十进制转为二进制,然后最高位设置为1
(2)负数的反码:在原码的基础上,最高位不变,其余位取反(0变1,1变0)
(3) 负数的补码:反码+1
例如:byte类型(1个字节,8位)
25 ==> 原码 0001 1001 ==> 反码 0001 1001 ==> 补码 0001 1001
-25 ==> 原码 1001 1001 ==> 反码 1110 0110 ==> 补码 1110 0111
底层使用加法代替减法:-128 ==> -127 - 1 ==> -127 + (-1) ==> 1111 1111 + 1000 0001 ==> 1000 0000 ==> -128
(3)为什么float(4个字节)的存储范围比long(8个字节)的存储范围大
因为float、double底层也是二进制,先把小数转为二进制,然后把二进制表示为科学记数法,然后只保存:
浮点类型的存储由符号位、指数、尾数部分组成
格式
float:SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
double:SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
S:符号位
E:指数,十进制指数加上127后的值得二进制数据
M:底数
③尾数部分:尾数部分
任何一个数都的科学计数法表示都为1.xxxx*2n。尾数部分就可以表示为xxxx,第一位都是1,可以省略
float的存储是科学计数法(指数的增长为2n),而long存储是普通的二进制
(4)为什么double(8个字节)比float(4个字节)精度范围大?
float 可以保证十进制科学计数法小数点后6位有效精度和第7位的部分精度
double 可以保证十进制科学计数法小数点后15位有效精度和第16位的部分精度。
2.3.4 基本数据类型的转换
1、自动类型转换
(1)当把存储范围小的值(常量值,变量值,表达式中的计算结果)赋值给存储范围大的变量时会发生自动类型转换
byte -> short -> int -> long ->float ->double
char ->
(2)当存储范围小的数据类型和存储范围大的数据类型进行混合运算时,会按照其中最大的类型运算
(3)当byte,short,char数据类型进行算术运行时会按照intl类型处理
2、强制类型转换
(1)当把存储范围大的值(常量值,变量值,表达式中的计算结果)赋值给存储范围小的变量时,需要进行强制类型转换(注意:可能会损失精度或者溢出)
dounble -> float -> long -> int -> short -> byte
-> char
(2)当某个值想要提升数据类型时也可以使用强制类型转换
(3)boolean类型不参与
2.3.5 特殊的数据类型转换
1、任意数据类型的数据和String类型进行"+"运算时,结果一定是String类型
2、String类型不可以通过强制类型转换,转为其他类型
2.4 运算符
1、按照操作符的个数分类:
(1)一元运算符:操作数只有一个
例如:正号(+),负号(-),自增(++),自减(–),逻辑非(!),按位取反(~)
(2)二元操作符:操作数有两个
例如:加(+),减(-),乘(),除(/),取模(%),大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=)
赋值(=,+=,-=,=,/=,%=,>>=,<<=)
逻辑与(&),逻辑或(|),逻辑异或(^),短路与(&&),短路或(||)
左移(<<),右移(>>),无符号右移(>>>),按位与(&),按位或(|),按位异或(^)
(3)三元运算符:操作数三个
例如: ? :
2、Java基本数据类型的运算符:
2.4.1 算术运算符
说明:数字和单个字符可以使用算术运算符。其中+,当用于字符串时,表示拼接。
加法:+
减法:-
乘法:*
除法:/
注意:整数与整数相除,只保留整数部分
取模:% 取余
注意:取模结果的正负号只看被模数
正号:+
负号:-
自增:++
自减:–
原则:自增与自减
++/–在前的,就先自增/自减,后取值
++/–在后的,就先取值,后自增/自减
整个表达式的扫描,是从左往右扫描,如果后面的先计算的,那么前面的就暂时先放到“操作数栈”中
2.4.2 赋值运算符
说明:右边的常量值、表达式的值、变量的值的类型必须与左边的变量一致或兼容(可以实现自动类型转换)或使用强制类型转换可以成功。
基本赋值运算符:=
扩展赋值运算符:+=,-=,*=,/=,%=…
注意:
所有的赋值运算符的=左边一定是一个变量
扩展赋值运算符=右边的计算结果的类型如果比左边的大的话会强制类型转换,所以结果可能有风险。
扩展赋值运算符的计算:
(1)赋值最后算
(2)加载数据的顺序是把左边的变量的值先加载,再去与右边的表达式进行计算
2.4.3 比较运算符
说明:其他的比较运算符都是只能用于8种基本数据类型。其中的==和!=可以用于引用数据类型的比较,用于比较对象的地址
大于:>
小于:<
大于等于:>=
小于等于:<=
等于:== 注意区分赋值运算符的=
不等于:!=
注意:
比较表达式的运算结果一定只有true/false
比较表达式可以作为(1)条件(2)逻辑运算符的操作数
2.4.4 逻辑运算符
说明:逻辑运算符的操作数必须是布尔值,结果也是布尔值
逻辑与:&
运算规则:只有左右两边都为true,结果才为true。
例如:true & true 结果为true
false & true 结果为false
true & false 结果为false
false & false 结果为false
逻辑或:|
运算规则:只要左右两边有一个为true,结果就为true。
例如:true | true 结果为true
false | true 结果为true
true | false 结果为true
false | false 结果为false
逻辑异或:^
运算规则:只有左右两边不同,结果才为true。
例如:true ^ true 结果为false
false ^ true 结果为true
true ^ false 结果为true
false ^ false 结果为false
逻辑非:!
运算规则:布尔值取反
例如:!true 为false
!false 为true
短路与:&&
运算规则:只有左右两边都为true,结果才为true。
例如:true & true 结果为true
true & false 结果为false
false & ? 结果就为false
它和逻辑与不同的是当&&左边为false时,右边就不看了。
短路或:||
运算规则:只要左右两边有一个为true,结果就为true。
例如:true | ? 结果为treu
false | true 结果为true
false | false 结果为false
它和逻辑或不同的是当||左边为true时,右边就不看了。
2.4.5 条件运算符
? :
?前面必须是条件,必须是boolean值
语法:
条件表达式 ? 结果表达式1 : 结果表达式2(结果表达式1和结果表达式2要保持类型一致或兼容)
运算规则:整个表达式的结果:当条件表达式为true时,就取结果表达式1的值,否则就取结果表达式2的值
2.4.6 位运算符
说明:一般用于整数系列
左移:<<
运算规则:左移几位就相当于乘以2的几次方
右移:>>
运算规则:右移几位就相当于除以2的几次方
无符号右移:>>>
运算规则:往右移动后,左边空出来的位直接补0,不看符号位
按位与:&
运算规则:
1 & 1 结果为1
1 & 0 结果为0
0 & 1 结果为0
0 & 0 结果为0
按位或:|
运算规则:
1 | 1 结果为1
1 | 0 结果为1
0 | 1 结果为1
0 & 0 结果为0
按位异或:^
运算规则:
1 ^ 1 结果为0
1 ^ 0 结果为1
0 ^ 1 结果为1
0 ^ 0 结果为0
按位取反:~
运算规则:
~0就是1
~1就是0
如何区分&,|,^是逻辑运算符还是位运算符?
如果操作数是boolean类型,就是逻辑运算符,如果操作数是整数,那么就位运算符。



