概念
关键字:具有特殊用途的单词。
保留字:未使用的关键字(goto const)。
直接量:不可用作标识符(ture false null)。
一、JAVA运行机制
Java程序的运行必须经过编写、编译、运行三个步骤。
编写是指在Java开发环境中进行程序代码的输入,最终形成后缀名为.java的Java源文件。
编译是指使用Java编译器(JDK中)对源文件进行错误排查的过程,编译后将生成后缀名为.class的字节码文件,这不像C语言那样最终生成可执行文件。
运行是指使用Java解释器将字节码文件翻译成机器代码,执行并显示结果。
字节码文件是一种和任何具体机器环境及操作系统环境无关的中间代码,它是一种二进制文件,是Java源文件由Java编译器编译后生成的目标代码文件。编程人员和计算机都无法直接读懂字节码文件,它必须由专用的Java解释器(JVM)来解释执行,因此Java是一种在编译基础上进行解释运行的语言。
二、SDK JDK JRE JVM
SDK(Software Development Kit)软件开发工具包
JDK(Java Development Kit) JAVA开发工具包
JRE(Java Runtime Environment) JAVA运行环境
JVM(Java Virtual Machine)虚拟机
JDK = JRE + javac.exe(编译工具)+jir.exe(打包工具)
JRE = JVM + 类库
JDK用于开发(编译、执行、打包),而JRE只用于执行。另外,由于Eclipse等IDE具有自己的编译器,所以只需要JRE就可以了。
Java提出的“一次编写,到处运行”是建立在JRE基础之上的;
Java的.class文件可以放到任何装有JRE的机器上运行;
开发java应用程序需要JDK,运行java程序需要JRE;
三、JAVA程序组织形式
Java程序是一个纯粹的面向对象的语言,因此Java程序必须以类(class)的形式存在。
类(class)是Java程序中的最小程序单位,Java程序不允许可执行语句,方法等成分独立存在,所有的程序部分都必须存放在类定义里。
一个Java源文件可以包含多个类定义,但最多只能包含一个public类定义。如果Java源文件里包含public类定义,则该源文件的文件名必须与这个public类的类名相同。
四、JAVA数据类型
引用数据类型还包括一种特殊的null类型。
自动类型转换:从小到大
强制类型转换:从大到小
数值类型和布尔类型不能进行类型转换,引用数据类型的转换只能再有继承关系的两个类型之间进行。
五、标识符
即用于命名的符号。由数字、字母、下划线、美元符组成,不可为关键字和保留字,不能包括空格,开头不可为数字。
六、final
- final修饰的变量不可被改变,final修饰的成员变量必须显式的指定初始值(否则没意义,默认初始化)。
- final定义并指定初始值的变量在编译阶段就确定下来,保存在常量池中,程序执行时直接进行宏替换。
- final修饰的方法不能被重写,比如Object类中的getClass()方法。
- final修饰的类不能被继承。
七、正则表达式
1,特殊的字符要求:
2,预定义的字符
3,方括号表达式:
4,边界匹配符
5,数量表示符
八、异常处理
抛出异常:异常对象提交到JVM。
捕获异常:JVM寻找合适的catch块,若找到则将异常对象交给该catch块处理。(找不到则退出)
异常处理方式
通过try、catch捕获异常
异常捕获要先小后大,try中变量为局部变量
//try中变量为局部变量
try{
// 程序代码
}catch(ExceptionName e1){
//Catch 块
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
通过throws抛出异常
定义一个方法的时候可以使用throws关键字声明。使用throws关键字声明的方法表示此方法不处理异常,而交给方法调用处进行处理。
此时无需使用try catch语句。
throw关键字抛出异常
throw关键字作用是抛出只有一个异常,抛出的时候是抛出的是一个异常类的实例化对象,在异常处理中,try语句要捕获的是一个异常对象,那么此异常对象也可以自己抛出。
知识点拓展
(1)Java9增强的自动关闭资源的try语句
try(FileInputStream fi=new FileInputStream(sc))
{
}
- 1
- 2
- 3
- 4
正常情况下try必须搭配catch或finally,但这种情况下相当于有一个隐式finally,可以不写。
(2)执行顺序
try{
return;
}catch(){
}finally{
}return;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
代码段首先进入try语句,因无异常抛出,代码将要return的内容保存在内存中,然后执行finally,因finally中无可执行内容,再转回try中执行return,整个代码段执行结束,而finally后面的return是不会执行的。
1、不管有没有出现异常,finally块中代码都会执行;但当执行System.exit(1)时退出虚拟机,finally不会执行。
2、程序会先执行finally块再执行try catch的return throw语句。
3、当try和catch中有return时,finally仍然会执行;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。
(3)子类抛出的异常必须小于或等于父类。
(4)异常链(责任链模式)、异常转译
九、==和equals方法
(1)==
基本数据类型:比较值
引用数据类型:比较地址
(2)equals
基本数据类型:不可用
引用数据类型:比较地址
重写(String):比较值
(3)常量池
String s1="1234";
String s2="12"+"34";
String s3="1"+"234";
- 1
- 2
- 3
JVM常量池保证相同的字符串常量只有一个,上面三个字符串引用同一对象。
十、JavaBean
作用:减轻其他代码复杂度,提高代码复用
定义(满足以下2点 )
a.是public 修饰的类 ,有public 无参构造
b.所有属性(如果有) 都是private,并且提供set/get (如果boolean 则get 可以替换成is)
使用层面
a.封装业务逻辑
封装业务逻辑的JavaBean 用于操作 一个封装数据的JavaBean
b.封装数据
封装数据的JavaBean 对应于数据库中的一张表 。
十一、变量
Java语言支持的变量类型有:
- 类变量:独立于方法之外的变量,用 static 修饰。
- 实例变量:独立于方法之外的变量,不过没有 static 修饰。
- 局部变量:类的方法中的变量。
(1)类变量(静态变量)
- 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。大多数静态变量声明为public类型。
- 静态变量在第一次被访问时创建,在程序结束时销毁。
- 类变量具有默认值,默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。
(2)实例变量
- 实例变量声明在一个类中,但在方法、构造方法和语句块之外;
- 实例变量在对象创建的时候创建,在对象被销毁的时候销毁;
- 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为private。通过使用访问修饰符可以使实例变量对子类可见;
- 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
(3)局部变量
- 局部变量声明在方法、构造方法或者语句块中;
- 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁;
- 访问修饰符不能用于局部变量;
- 局部变量是在栈上分配的。
- 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。