Java基础
1. Java三大版本
-
JavaSE:标准版(桌面程序,控制台开发)
JavaME:嵌入式开发(手机,小家电)
JavaEE:E企业级开发(web客户端,服务器开发…) -
JDK:Java Development Kit
JDK是Java Development Kite的缩写,意思是Java语言的软件开发工具包。它是一种用于构建在Java平台上发布的应用程序、applet和组件的开发环境;它是一种最基本的工具。JDK是整个java开发的核心。它不提供具体的开发软件,它提供的是无论你用何种开发软件写Java程序都必须用到的类库和Java语言规范。
-
JRE:Java Runtime Environment
JRE是Java Runtime Environment的缩写,指Java运行环境,是Sun的产品。运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。JRE是用java编写的程序运行时所必须的一些文件,没有它们java程序就不能运行。
-
JVM:Java Virtual Machine(Java 虚拟机)
Java虚拟机,是一个虚构出来的计算机,本质上是一个程序。任何平台上只要装有针对于该平台的Java虚拟机,字节码文件就可以在该平台上运行。Java语言的可移值性正是建立在Java虚拟机的基础上。
-
JDK和JRE的关系
JDK > JRE,也就是说JDK已经包含了JRE,安装JDK时候如果没有JRE,会自动安 上。JDK是java开发套件,是提供给开发人员的。JRE是java运行环境,是提供给使用者的,使用者只关心这个程序能不能用,而不关心他是怎么运行的。所以提供的JRE是供使用者下载的。
2. Java的包
是用来封装一组类、子包和接口的,相当于文件系统中的文件夹。
3. 注释
- 单行注释://注释文字
- 多行注释:/*注释文字 */
- 文档注释:/**注释文字 */
4. 基本数据类型
在Java中,一共有8种基本数据类型,其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符类型char和1种用于表示真值的boolean类型。
数据类型 | 描述 | 占用字节 |
---|---|---|
int | 整型,用于存储整数 | 4 |
byte | Java中最小的数据类型 | 1 |
short | 短整型 | 2 |
long | 长整型 | 8 |
float | 浮点型,用于存储带小数点的数字 | 4 |
double | 双精度浮点型,用于存储带有小数点的数字 | 8 |
char | 字符型,用于存储单个字符 | 2 |
boolean | 布尔类型,用于判断真或假 | 1 |
5. 常量
在程序执行过程中,其值不会发生改变的量。
字面值常量
- 字符串常量(双引号):“abc”
- 字符常量(单引号): ‘a’,‘0’
- 整型常量: 12,34
- 小数常量: 1.2
- 布尔常量: true和false
- 空常量: null
6. 变量
- 含义:在程序执行过程中,其值可以在某个范围内发生改变的量。
- 变量的本质是内存中的一小块区域。
- 变量的定义格式:数据类型 变量名 = 初始化值
- 变量的作用域:只在它(定义的位置)所属的代码块内有效。(代码块:一对大括号范围内的代码,称为一个代码块。)
- 注意事项:
变量未赋值,不能使用。
一行上可以定义多个变量,但不建议这样使用。
7. 关键字
特点:
- 组成关键字的字母全都小写。
- 常见的代码编辑器对关键字有特殊的颜色标记。
常见关键字
- 用于定义流程控制的关键字:if、else、switch、case、default、for、while、do、break、continue、return
- 用于定义访问权限的关键字:public、protected、private
- 用于定义类、函数、变量修饰符的关键字:abstract、final、static、synchronized
- 用于定义类与类之间关系的关键字:extends、implements
- 用于定义建立实例、引用实例、判断实例的关键字:new、this、super、instanceof
- 用于处理异常的关键字:try、catch、finally、throw、throws
- 用于包的关键字:package、import
- 其它关键字:native、strictfp、transient、volatile、assert
8. Java语言编码规范
- 大括号成对,对齐写(左大括号在最后,右大括号与首字母对齐)
- 左大括号前有空格
- 代码缩进(例如:第一行后面有大括号,第二行前面有缩进)
- 方法和程序块之间空行
- 并排语句加空格
- 运算符两侧加空格
9. 标识符
标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
Java标识符的命名规则:
(1).Java标识符是由数字、字母、下划线、美元符号($)或人民币符号(¥)组成的。
(2).首字母不能是数字。
(3).不能把关键字和保留字作为标识符。(保留字指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。)
(4).标识符对大小写敏感。
Java标识符的命名规范
-
类和接口:首字母大写,如果有多个单词,每个单词的首字母大写:HelloWorld
-
变量和方法:首字母小写,如果有多个单词,从第二个单词开始首字母大写:getName
-
常量名(自定义常量):所有字母都大写,多个单词用下划线隔开,MAX_VALUE
-
包名:全部小写,如果有多级,用点号(.)隔开,遵循域名反写的格式:cn.itcast.demo
10. 数据类型转换
-
类型转换的分类
自动类型转换: 小类型转换为大类型,自动提升为大类型,运算结果是大类型
强制类型转换:手动将大类型转换成小类型,运算结果是小类型 -
转换格式:小类型 变量名 = (小类型)大类型数据;
目标类型 变量名 = (目标类型)要转换的值 -
数据类型的范围从小到大:byte、short、char——>int(默认的整型)——>long——>float——>double(默认的浮点类型)
boolean类型不参与比较
11. 标识符
标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。
Java标识符的命名规则:
- Java标识符是由数字、字母、下划线、美元符号($)或人民币符号(¥)组成的。
- 首字母不能是数字。
- 不能把关键字和保留字作为标识符。(保留字指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。)
- 标识符对大小写敏感。
Java标识符的命名规范 :
-
类和接口:首字母大写,如果有多个单词,每个单词的首字母大写:HelloWorld
-
变量和方法:首字母小写,如果有多个单词,从第二个单词开始首字母大写:getName
-
常量名(自定义常量):所有字母都大写,多个单词用下划线隔开,MAX_VALUE
-
包名:全部小写,如果有多级,用点号(.)隔开,遵循域名反写的格式:cn.itcast.demo
12. 运算符
-
运算符的定义:对常量和变量进行运算操作的符号。
-
自增和自减运算符:++自增1;–自减1
单独使用放在前后结果一样
参与运算时:在变量前,先自增(自减),再进行其它运算;在变量后,先以原值进行其它运算,再自增(自减) -
常见的运算符包括算数运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符。
a.算数运算符包括+、-、* 、/、%、++、–
b.赋值运算符即用于给变量赋值的运算符
常见的赋值运算符包括基本赋值运算符(=)和扩展赋值运算符(+=、-=、/=、*=、%=)
c.关系运算符是用来描述两个变量之间的关系
关系运算符包括==、!=、>、>=、<、<=
d.逻辑运算符包括:&&(与)、||(或)和!(非)(注意偶数个逻辑非,不变)
e.三元运算符(条件运算符):(关系表达式)?表达式1:表达式2 -
位运算符:位运算符对整数的二进制形式逐位进行逻辑运算,得到一个整数。
位运算符包括:&(与):如果相对应位都是1,则结果为1,否则为0。
|(或):如果相对应位都是0,则结果为0,否则为1。
^(异或):如果相对应位值相同,则结果为0,否则为1。
~(非):按位取反,即0变成1,1变成0。
<<(右移):按位左移运算符,左操作数按位左移右操作数指定的位数。正数在高位补0,负数在高位补1。 >>(左移):按位右移运算符,左操作数按位右移右操作数指定的位数。 >>>(无符号右移):无论正负,最高位都补0。13. equals与==的区别
-
==是一个比较运算符,用于比较基本类型的值是否相同或者引用类型的内存地址是否相同。
-
equals是一个方法,只能比较引用数据类型,用于判断两个变量是否是对同一个对象的引用。如果没有重写equals方法比较的是两个对象的地址值。如果重写equals方法后我们往往比较的是对象中的属性的内容。
-
" == “比"equals"运行速度快,因为” == "只是比较引用。
14. 一维数组
-
一维数组是由数字组成的以单纯的排序结构排列的结构单一的数组。一维数组是计算机程序中最基本的数组。
-
定义格式
类型标识符 数组名【常量表达式】 (常量表达式表示数组元素的个数。可以是常量或符号常量,不能为变量。)
-
通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用数组中的任意一个元素。
-
例如:int a[10]:
其中,a是一维数组的数组名,该数组有10个元素,依次表示为a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]。需要注意的是,a[10]不属于这一个数组的空间范围中。当在说明部分定义了一个数组变量后,编译程序会在内存空间中开辟一串连续的存储单元。对于数组而言,程序的执行部分使用的是数组变量而不是数组类型。需要注意的是:在引用时,下标可以是整型变量或整型表达式。如果使用表达式,会先计算表达式以确定下标。程序只能逐个应用数组中的元素而不能一次引用整个数组。如:int a[100],b[100]; a=b;//这是非法的 -
初始化
数组的初始化可以在定义时一并完成。格式如下:int a[5]={1,2,3,4,5};特别地,若要把数组中所有元素全部初始化为0,可以简记为:{0}。
-
定义一个数组的两种格式
数据类型 数组名[常量表达式]
数据类型 [常量表达式]数组名
type arrayName[];
type[] arrayName; (推荐这种)
-
数组length的含义
length代表的是长度,作为数组的一个属性,就是里面元素的个数
-
数组是否可以用一个变量定义大小
使用new的时候可以。
-
对Java多维数组的理解
Java的多维数组可以看作数组的数组,就是n维数组是n-1维数组的数组
三维数组[2][3][4]就是有两个二维数组,每个二维数组有3个一维数组,每个一维数组有4个元素。
15. 二维数组
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。
格式:类型说明符 数组名[常量表达式]。
例如:float a[3][4],b[5][10];
定义a为3 * 4(3行4列)的数组,b为5*10(5行10列)的数组。注意,不能写成float a[3,4],b[5,10];
行序号和列序号的下标都是从 0 开始的。元素 a[i] [j] 表示第 i+1 行、第 j+1 列的元素。数组 int a[m] [n] 最大范围处的元素是 a[m–1] [n–1]。所以在引用数组元素时应该注意,下标值应在定义的数组大小的范围内。
可以用下面的方法对二维数组进行初始化。
-
分行给二维数组赋初值,比如上面程序的赋值方法:
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
这种赋初值的方法比较直观,将第一个花括号内的数据赋给第一行的元素、第二个花括号内的数据赋给第二行的元素……即每行看作一个元素,按行赋初值。
-
也可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。比如:
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
效果与第 1 种是一样的。但第1种方法更好,一行对一行,界限清楚。第 2 种方法如果数据多,写成一大片,容易遗漏,也不易检查。
-
也可以只对部分元素赋初值。比如:
int a[3][4] = {{1, 2}, {5}, {9}};
它的作用是对第一行的前两个元素赋值、第二行和第三行的第一个元素赋值。其余元素自动为 0。
-
如果在定义数组时就对全部元素赋初值,即完全初始化,则第一维的长度可以不指定,但第二维的长度不能省。比如:
int a[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
等价于:
int a[][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
系统会根据数据总数和第二维的长度算出第一维的长度。但这种省略的写法几乎不用,因为可读性差。
- int a[3][4]={0};
二维数组“清零”,里面每一个元素都是零。
16. 数组的遍历
方法一:
使用for循环进行遍历通常遍历数组都是使用for循环来实现的。
遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。
方法二:
使用foreach对数组进行遍历这种循环遍历数组和集合更加简洁。使用foreach循环遍历数组时,无须获得数组和集合长度,无须根据索引来访问数组元素,foreach循环自动遍历数组和集合的每一个元素。
注意:使用foreach循环迭代数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量赋值。
方法三:
Arrays工具类中toString静态方法遍历利用Arrays工具类中的toString静态方法可以将一维数组转化为字符串形式并输出
17. 作用域
Java作用域public、private、protected及不写的区别
1.public(公有的):可以被该类的和非该类的任何成员访问。
2.private(私有的):仅仅可以被该类的成员访问,任何非该类的成员一概不能访问。
3.protected(保护的):仅仅可以被子类和类本身还有同一个包里的访问。
4.不写(默认):在这种情况下,只能在同一个包内访问。
18. API
API是用来负责一个程序和其它软件进行沟通的编程接口。