❶基础
一、注释
-
单行注释 //
-
多行注释 /* */
-
文档注释 /** */ javadoc生成帮助文档
二、标识符和关键字
1.标识符:由字母、数字、下划线、$组成,并且首字符不能以数字开头。
2.关键字:由Java事先定义好的,有特殊含义的标识符。
三、Java的数据类型
强类型语言:要求变量使用严格符合规定,所有变量必须先定义后使用。
四、类型转换
-
因为Java是强类型语言,所以不同数据类型进行运算时,需要进行数据类型转换
-
运算中,不同类型的数据需要先转化为同一类型,然后进行计算
-
强制类型转换:由高到低转换;需要避免内存溢出
-
自动类型转换:由低到高转换
以下类型的优先级由低到高,小数的优先级要大于整数 byte,short,char-->int-->long-->float-->double
五、变量和常量
-
变量是可以变化的量
-
Java是一种强类型语言,每个变量都必须要声明其类型
-
Java变量是程序中最基本的存储单元,其要素包括变量名,变量类型,作用域 数据类型 变量名 = 值;// 可以使用逗号隔开来声明多个同类型变量
变量的命名规范
-
变量名、方法名、类名:见名知意
-
类变量:首字母小写和驼峰原则
-
局部变量:首字母小写和驼峰原则
-
类名:首字母大写和驼峰原则
-
方法名:首字母小写和驼峰原则
-
常量名:大写字母和下划线,MAX_VALUE
常量
-
常量初始化后不能再改变值
-
常量可以理解为一种特殊的变量,常量的值被设置后,在程序运行过程中不允许被改变
-
常量定义:final 常量类型 常量名 = 值;(定义常量时就要进行初始化赋值)
-
常量名一般使用大写字符
六、运算符
-
算术运算符:=,-,*,/,%(取余),++(自增),—(自减)
-
赋值运算符:=
-
关系运算符:>,<,**,!=,instanceof
-
逻辑运算符:&&(与),||(或),!(非)
-
位运算符:&(与),|(或),~(非),^(异或),>>(右移),<<(左移),>>>
-
条件运算符:?:(三元运算符)
-
扩展赋值运算符:+=,-=,*=,/=
七、包机制
-
为了更好的组织类,Java提供包机制,用于区别类名的命名空间;包语法用package
-
一般使用公司的域名倒置作为包名
-
在Java程序中导入包,用import语句
八、JavaDoc
-
javadoc命令是用来生成自己API文档
-
参数信息 @author:作者名 @version:版本号 @since:指明需要最早使用的jdk版本 @param:参数名 @return:返回值情况 @throws:异常抛出情况
❷流程控制
一、用户交互Scanner
-
基本语法Scanner s = new Scanner(System.in);
-
通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前可以使用hasNext()和hasNextLine()判断是否还有输入的数据。
二、顺序结构
-
Java的基本结构
三、选择结构
1. if选择结构
-
if单选择结构
if(flag){ }
-
if双选择结构
if(flag){ }else{ }
-
if多选择结构
if(flag01){ }else if(flag02){ }else if(flag03){ }else{ }
2. switch多选择结构
-
switch(expression){ case value: 语句 break;// 可选 case value: 语句 break;// 可选 default:// 可选 语句 }
三、循环结构
1. while循环
while(布尔表达式){
// 循环内容
}
2. do…while循环
do{
// 语句
}while(布尔表达式);
3. for循环
for(初始化;布尔表达式;迭代){
// 语句
}
// for循环的死循环写法
for(;;){
}
四、break,continue
1. break
-
break可以在任何循环语句的主体部门使用,用于控制循环的流程。
-
break用于强行退出循环,不执行循环中剩下的语句。(break语句也在switch语句中使用)。
2. continue
-
continue语句用在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。
❸方法
一、方法的定义
修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; }
二、方法的调用
-
调用方法:对象名.方法名(实参列表);
-
当方法返回一个值的时候,方法调用通常被当作一个值。
-
当方法的返回值是void时,方法调用一定是一条语句。
三、方法的重载
重载就是在同一个类中,有相同方法名称,但形式参数不同的方法。
1. 方法重载的规则
-
方法名称必须相同。
-
参数列表必须不同(参数个数不同,或参数类型不同,或参数排列顺序不同)
-
方法的返回类型可以相同也可以不同。
-
仅仅返回类型不同不能成为方法的重载。
四、递归
public class Test02 {
// 递归例子:阶乘 5!
public static void main(String[] args) {
int f = f(5);
System.out.println(f);
}
public static int f(int n) {
if (n == 1) {// 递归头
return 1;
} else {// 递归体
return n * f(n - 1);
}
}
}
❹数组
一、数组的概念
-
数组是相同类型数据的有序集合
二、数组的声明创建
-
首先必须声明数组变量,才能在程序中使用数组
// 声明数组变量的语法: dataType[] arrayRefVar;// 首选的方法 //或 dataType arrayRefVar[];// 效果相同,但并不首选
-
Java语言使用new操作符来创建数组
dataType[] arrayRefVar = new dataType[arraySize];
三、数组的三种初始化
-
静态初始化
int[] a = {1,2,3};
-
动态初始化
int[] a= new int[2]; a[0] = 1; a[1] = 2;
四、多维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
-
二位数组。
int a[][] = new int[2][5]
❺面向对象
一、类与对象
1. 类与对象的关系
-
类是一种抽象的概念,它是对某一类事物整体的描述/定义,但是它并不能代表某一个具体的事物
-
对象是抽象概念的具体实
2. 创建和初始化对象
-
使用new关键字创建对象时,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。
-
类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。
3. 构造器
特点
-
必须和类的名字相同
-
必须没有返回类型,也不能写void
作用
-
new的本质是在调用构造方法。(类默认会有一个隐式的无参构造)
-
初始化对象的值(可以定义有参构造初始化对象的属性值)。
二、Java三大特性
1. 封装
-
我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量得方法给外部使用。
2. 继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
-
extends的意思是扩展。子类是父类的扩展。
-
Java中类只有单继承,没有多继承,但是类可以多重继承。
-
继承是类与类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
子类和父类之间,从意义上讲应该有“is a”的关系。
-
子类继承父类就会拥有父类的全部方法。(私有方法除外)
Object类
-
object类是所有类的基类。
-
所有的类都默认直接或者间接继承Object类。
super关键字
-
super调用父类的构造方法,必须在构造方法的第一个。
-
super必须只能出现在子类的方法或者子类的构造方法中。
-
super和this不能同时调用构造方法,因为他们调用构造方法时都要求放在构造方法第一行。
-
new对象时,首先执行父类的构造方法。
super和this的比较
- this();调用本类的构造方法
- super();调用父类的构造方法
3. 多态
-
重写都是方法的重写,和属性无关。
-
需要有继承关系,子类重写父类的方法。
-
方法名必须相同; 参数列表也必须相同。
重写的作用
-
父类的功能,子类不一定需要,或者不一定满足。
方法重写的注意点
-
静态方法:方法的调用只和左边变量有关,和定义的数据类型无关。
// B是A的父类,A类和B类都有静态方法test(); B b = new A() b.test();// 调用父类的test()
-
非静态方法才是重写。
-
子类的对象指向父类的引用时,子类和父类都有同一个方法,则子类重写了父类的方法,则会调用子类的方法。
(对象能执行哪些方法,主要是看左边的类型,和右边的关系不大)
// B是A的父类,A类和B类都有方法test(); B b = new A();// 子类的对象指向父类的引用 b.test();// 子类重写父类的方法,则调用子类的test()。
-
子类A可以调用自己的或者继承父类的方法。
-
父类B可以指向子类,但是不能调用子类独有的方法。
-
父类B调用子类A独有的方法时可以进行对象强制类型转换。
三、抽象类
-
abstract关键字修饰的类是抽象类。
-
抽象方法必须放在抽象类中。
-
抽象类不能new,只能靠子类去实现。
-
抽象类的局限性是Java只能单继承。
-
❻异常处理
一、异常的体系结构
1.简单的分类
-
检查性异常:由用户错误等问题引起的异常,程序员无法预见。比如:打开一个不存在的文件,一个异常就发生了,这些异常不能在编译时被忽略。(在idea工具中会有红色标注的异常)
-
运行时异常:程序员可避免的异常。与检查性异常相反,可以在编译时被忽略。(运行时报错)
-
error是灾难性的致命错误,是程序无法控制和处理的。当出现这些错误时,程序一般会选择终止线程。
-
exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这类异常。
-
二、Java异常的处理机制
-
try:监控代码区域
-
catch:捕获异常
-
finally:处理善后工作,比如:关闭资源,关闭IO流。finally最终都会执行
-
throw:一般在方法中使用,主动抛出异常
-
throws:用在方法上,把异常向上抛出,抛给方法调用者去处理