Java简介
什么是Java语言
Java是与1995年由Sun公司推出的面向对象的程序设计语言,Java之父詹姆斯·高斯林。
Java最初的名字是OAK,1995年被重命名为Java,正式发布。
Java是一种通过解释方式来执行的语言,Java是一种跨平台的程序设计语言。实现了“一次编写,到处运行”。
Java语言编写的程序即是解释型,又是编译型。代码经过编译后转换成字节码文件,Java虚拟机(JVM)将对字节码文件进行解释执行。编译只进行一次,而解释在每次运行程序时都会进行。
Java的应用领域
- l 桌面应用程序
- l 嵌入式系统
- l 电子商务
- l 企业应用
- l 分布式
- l Web应用
Java开发环境搭建
安装JDK
在Oracle官网下载系统对应版本的JDK进行安装
配置环境变量
配置JAVA_HOME环境变量
配置Path环境变量
在命令行中执行javac进行测试
Java语言基础
Java主类结构
Java程序的基本组成单元是类,类中有包括属性和方法两部分。每一个应用程序都包含一个main()方法,含有main()方法的类称之为主类。
注意:Java是严格区分大小写的,并且所有的标点符号都是英文的。
基本数据类型
Java有8种基本数据类型
整数类型
整数类型用来存储整数数值,整数类型有3重表示形式,分别是十进制、八进制和十六进制。
十进制:由1、2、3、4、5、6、7、8、9组成,逢十进一。
八进制:以0开头,由1、2、3、4、5、6、7组成,逢八进一。
十六进制:以0x开头,由0~9和A、B、C、D、E、F组成,逢十六进一
进制之间的转换
十进制转换二进制
方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
二进制转十进制
方法为:把二进制数权展开,相加即得十进制数。
二进制转八进制
方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
八进制转换二进制
方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
二进制转十六进制
方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
十六进制转二进制
方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
十进制转八进制或者十六进制有两种方法
第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。
第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。
八进制或者十六进制转成十进制
方法为:把八进制、十六进制数按权展开、相加即得十进制数。
原码、反码和补码
计算机内,有符号数由3种表示法:原码、反码和补码,所有数据的运算都是采用补码进行的。
正数的原码、反码和补码都相同。
负数的原码:就是二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数字的大小。
反码:负数的反码就是对其原码取反,但符号位除外。
补码:负数的补码是在其反码的末位加1。
浮点类型
浮点类型表示有小数部分的数字。浮点类型分为单精度浮点类型(float)和双精度浮点类型(double),取值范围不同。
关键字 | 位数 |
---|---|
float | 32位 |
double | 64位 |
默认情况下,小数都被看作double型,若使用float型,须在小数后面添加F或f来声明。
注意:如果声明float型时不加后缀,默认是double型。
字符类型
1. char型
字符型(char)用于存储单个字符占用16位(两个字节)的存储空间。
注意:char型用单引号声明,双引号声明的是字符串。
Java可以把字符作为整数对待。由于unicode编码采用无符号编码,可以存储65536个字符(0x0000~0xffff),所以Java 中的字符几乎可以处理所有国家的语言文字。若要得到0~65536之间的数代表的unicode表中相应位置上的字符,必须使用char型显示转换。
2. 转义字符
转义字符是一个特殊的字符变量,它以反斜杠“\“开头,后跟一个或多个字符。
将转义字符赋值给字符变量时,与字符常量一样需要使用单引号。
转义字符 | 含义 |
\ddd | 1~3位八进制数据表示的字符,如\123 |
\uxxxx | 4位十六进制数据所表示的字符,如\u0052 |
\’ | 单引号字符 |
\\ | 反斜杠字符 |
\t | 垂直制表符,将光标移到下一个制表符的位置 |
\r | 回车 |
\n | 换行 |
\b | 退格 |
\f | 换页 |
布尔类型
布尔类型又称逻辑类型,通过boolean来定义布尔类型变量,只有ture和false两个值。布尔值不能与整数类型进行转换。通常被用在流程控制中作为判断条件。
变量与常量
在程序执行过程中,其值不能被改变的量称为常量,其值能被改变的量称为变量。
标识符和关键字
1. 标识符
标识符可以简单的理解为一个名字,用来标识类名、变量名、方法名、数组名文件名的有效字符序列。
标识符由字母、数字、下划线(_)、美元符($)组成,其中数字不能开头。标识符不能是Java关键字和保留字。标识符严格区分大小写。
2. 关键字
关键字是Java赋予特定含义的一些单词。
声明变量
声明变量时可以不赋值,也可以直接赋值。
声明常量
在程序运行时一直不会改变的量称为常量,也成为“final变量“,常量在整个程序中只能被赋值一次。
常量名通常使用大写字母,但这并不是必须的。(约定成俗)
当定义的常量属于“成员变量”时,必须在定义时就设定它的初的值。
变量的有效范围
变量的有效范围是指程序代码能够访问该变量的区域,若超出该区域,则在编译时会出现错误。
在程序中,一般根据变量的“有效范围”将变量分为“成员变量”和“局部变量”。
1、 成员变量
在类中定义的变量称为成员变量,成员变量的作用域是整个类。类的成员变量又分为两种,即静态变量和实例变量。
int x = 45;
static int y = 90;
在成员变量的前面加上static,这样的成员变量称为静态变量。静态变量的有效范围可以跨类,甚至可达到整个应用程序之内。除了可以直接在类内存取,还能直接以“类名.静态变量”的方式在其他类中使用。
2、 局部变量
在类的方法体中定义的变量(方法内部定义,“{”与“}”之间的代码中声明的变量),称为局部变量。
在类的方法中声明的变量,包括方法的参数,都属于局部变量。局部变量只在当前的方法中有效。局部变量的生命周期取决于方法,当方法被调用时,JVM为方法中的局部变量分配内存空间,当该方法的调用结束后,则会释放方法中局部变量占用的内存空间,局部变量也将被销毁。
局部变量可与成员变量的名字相同,此时成员变量将被隐藏,即这个成员变量在这个方法中暂时失效。
static int times = 3;
public static void main(String[] args){
int times = 4;
System.out.print("times的值为:"+times);
}
运算符
运算符是一些特殊的符号,主要用于数学函数、赋值和逻辑比较方面。Java中提供了丰富的运算符。
赋值运算符
赋值运算符以“=”表示,它是一个二级运算符(对两个操作数做处理)。
int a = 100;
左边的操作数必须是一个变量,而右边操作数则可以是任何表达式。
int a = 10;
int b = 5;
int c = a + b;
遵循赋值运算符的运算规则,先计算后赋值。如果含有两个以上的“=”,后从最有方开始处理。
算术运算符
Java中的算数运算符主要有加(+)、减(-)、乘(*)、除(/)、取余(%),它们都是二元运算符。
注意:在进行运算时,0不能作为除数。
自增自减运算符
自增自减运算符是单目运算符,可以放在操作元之前,或之后。操作元必须是一个最终整型或浮点型变量。
++a;(--a)//表示在使用a之前,加一
a++;(a--)//表示在使用a之后,加一
比较运算符
比较运算符属于二元运算符,用于程序中的变量间或其他类型间的比较。比较运算符的结果都是boolean型。
运算符 | 作用 | 操作数据 |
> | 比较左方是否大于右方 | 整型、浮点型 、字符型 |
< | 比较左方是否小于右方 | 整型、浮点型 、字符型 |
== | 比较左方是否等于右方 | 基本数据类型、引用数据类型 |
>= | 比较左方是否大于等于右方 | 整型、浮点型 、字符型 |
<= | 比较左方是否小于等于右方 | 整型、浮点型 、字符型 |
!= | 比较左方是否不等于右方 | 基本数据类型、引用数据类型 |
逻辑运算符
返回类型为boolean值的表达式,如比较运算符。逻辑运算符的操作元必须是boolean型数据。
运算符 | 含义 |
&&、& | 逻辑与 |
|| | 逻辑或 |
! | 逻辑非 |
除了“!”是一元运算符之外,其他都是二元运算符。
“&&”与“&”都表示逻辑与,那么有什么区别?
“&&”是逻辑与,又称为短路与,表示当左边的的表达式结果为true时,计算右边的表达式结果,当左边的表达式为false时,右边的表达式不进行计算。
“&”是逻辑与,又称为非短路与,表示左边的表达式不管为true还是false右边的表达式都进行计算。
位运算符
在Java中存在着这样一类操作符,是针对二进制进行操作的。它们各自是&、|、^、~、>>、<<、>>>几个位操作符。不管是初始值是依照何种进制,都会换算成二进制进行位操作。位运算符除了“按位与”和“按位或”运算符外,其他只能用于处理整数。(位运算的实质都是先将十进制数转化为二进制在进行位运算)。
java中使用补码来表示二进制数,在补码表示中,最高位是符号位:0-正数,1-负数,补码规则为:正数最高位是0,其余的各位表示其数值本身;负数是该数值的绝对值的补码安慰取反+1所得。
eg:1
对应二进制为:
0000 0000 0000 0000 0000 0000 0000 0001
按位取反为:
1111 1111 1111 1111 1111 1111 1111 1110
+1后为:
1111 1111 1111 1111 1111 1111 1111 1111
所以-1 的二进制为:1111 1111 1111 11111111 1111 1111
1111
同理,5的二进制为:
0000 0000 0000 0000 0000 0000 0000 0101
按位取反为:
1111 1111
1111 1111 11111111 1111 1010
+1后为:
1111 1111
1111 1111 11111111 1111 1011
所以-5的二进制为:1111
1111 1111 11111111 1111 1111 1011
在java中,int类型占32位,有正负之分,正数转化为二进制后,最高位是0.负数转化为二进制后最高位是1,所以,当右移时,高位的补位遵守“正数补0,负数补1”,而无符号右移的话,不论正负,均用0补齐。之所以没有无符号左移,是因为低位都用0补齐。
1. 左移(<<),eg:
5<<2
首先将5转化为二进制:
0000
0000 0000 00000000 0000 0000 0101
然后左移两位,低位用0补齐:
0000
0000 0000 00000000 0000 0001 0100
转化为十进制数:20
。 所以, 5<<2 = 20。
2. 右移(>>), eg: 5>>2(原理同左移一样,之一高位的符号位补齐方法)
首先将5转化为二进制:
0000 0000 0000 0000 0000 0000 0000 0101
然后右移两位,高位用0补齐:
0000 0000
0000 0000 00000000 0000 0001
转化为十进制数:1 。 所以5>>2
= 1。
3. 无符号右移(>>>),eg: 5>>3,-5>>3,-5>>>3
5的二进制:
0000
0000 0000 00000000 0000 0000 0101
右移三位:
0000
0000 0000 00000000 0000 0000 0000 (值位0)
-5的二进制:
1111
1111 1111 11111111 1111 1111 1011
右移三位:
1111
1111 1111 11111111 1111 1111 1111 (负数,高位用1补齐,值为-1)
无符号右移三位:
0001
1111 1111 11111111 1111 1111 1111 (高位用1补齐,值为536870911)
4. 位与(&)、位或(|)、位异或(^)、位非(~):
都是先转化为二进制,然后二进制按位进行与、或、异或、非运算。
a. 位与:按位进行与运算(同1为1,否则为0),eg:5&3
5的二进制:
0000 0000 0000 0000 0000 0000 0000 0101
3的二进制:
00000000 0000
0000 0000 00000000 0011
------------------------------------------------------
按位与运算:
0000 0000 0000 0000 0000 0000 0000 0001 (值为1)
所以,5&3
= 1
b. 位或:按位进行或运算(同0为0,否则为1),eg: 5|3
5的二进制:
0000 0000 0000 0000 0000 0000 0000 0101
3的二进制:
00000000 0000 0000 0000 0000 0000 0011
------------------------------------------------------
按位或运算:
0000 0000 0000 0000 0000 0000 0000 0111 (值为7)
所以,5|3
= 7
c.
位异或:按位异或(同位相同为0,相反为1),eg:5^3
5的二进制:
0000 0000 0000 0000 0000 0000 0000 0101
3的二进制:
00000000
0000 0000 00000000 0000 0011
------------------------------------------------------
按位异或运算:
0000 0000 0000 0000 0000 0000 0000 0110
(值为6)
所以,5^3
= 6
d.
位非:按位进行非运算,即按位取反,一元操作符。
5的二进制:
0000 0000 0000 0000 0000 0000 0000 0101
位非:
1111 1111 1111 1111 1111 1111 1111 1010 (值为-6)
所以,~5 = -6。
3的二进制:
00000000 0000 0000 0000 0000 0000 0011
位非:
1111 1111 1111 1111 1111 1111 1111 1100 (值为-4)
所以,~3 = -4。
三元运算符
三元运算符又称三目运算符,一般用于逻辑判断。
三元运算符的格式为:
条件式?值1:值2
三元运算符的规则为:若条件式的值为true,则取值1,否则取值2。
boolean b = 20 < 45 ? true : false;
运算符的优先级
Java中的表达式就是使用运算符连接起来的符合Java规则的式子。运算符的优先级决定了表达式中运算执行的先后顺序。
- l 增量和减量运算
- l 算术运算
- l 比较运算
- l 逻辑运算
- l 赋值运算
优先级 | 描述 | 运算符 |
1 | 括号 | ()、[] |
2 | 正负号 | +、- |
3 | 自增自减,非 | ++、--、! |
4 | 乘除,取余 | *、/、% |
5 | 加减 | +、- |
6 | 移位运算 | <<、>>、>>> |
7 | 大小关系 | >、>=、<、<= |
8 | 相等关系 | ==、!= |
9 | 按位与 | & |
10 | 按位异或 | ^ |
11 | 按位或 | | |
12 | 逻辑与 | && |
13 | 逻辑或 | || |
14 | 条件运算 | ?: |
15 | 赋值运算 | =、+=、-=、*=、/=、%= |
16 | 位赋值运算 | &=、|=、<<=、>>=、>>>= |
注意:在编写程序时尽量使用括号运算符来限定运算次序,以免产生错误的运算顺序。
数据类型转换
类型转换是将一个值从一个类型更改为另一个类型的过程。如果从低精度数据类型向高精度数据类型转换,则不会溢出;而把高精度数据类型向低精度类型转换则必然会丢失精度。
数据类型转换有两种方式,即隐式类型与显式类型。
隐式类型转换
从低级类型向高级类型的转换,系统将自动执行。这种类型的转换称为隐式类型转换。基本数据类型会涉及数据的转换,不包括逻辑类型和字符类型。按精度从低到高排序:byte<short<int<long<float<double。
显式类型转换
把高精度变量的值赋给低精度的变量时,必须使用显式类型转换(又称强制类型转换)。
语法:(类型名)要转换的值
注意:显式类型转换时可能会出现精度的丢失。
参考文献《Java从入门到精通》
参考文献:https://blog.csdn.net/set_one_name/article/details/76902050