一、 Java变量
- 局部变量:存储在方法的栈内存中
- 形参
- 方法内的局部变量
- 代码块的局部变量
- 无法用static修饰
- 类变量(静态变量):用static修饰的变量,调用时使用类名.变量名(static可以修饰方法名)
- 成员变量(非静态变量)
1 | public class RightDef { |
二、Java访问控制权限
private | default | protected | public | |
---|---|---|---|---|
同一类 | y | y | y | y |
同一包内的类 | y | y | y | |
子类 | y | y | ||
其他包内的类 | 需要继承 | y |
三、Java源程序与编译型运行区别
四、程序控制
4.1 循环
1 | // 第一种 |
4.2 条件
1 | if(){ |
4.3 选择
1 | switch(expression){ |
五、数组
5.1 概念
- 数组属于引用数据类型
- 包含:数组名、下标、元素
5.2 特点
- 数组是有序排列的
- 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
- 创建数组对象会在内存中开辟一整块连续的空间
- 数组的长度一旦确定,就不能修改
5.3 操作
1 | int[] ids; //数组声明 |
5.4 数组元素的默认初始化值
- 整型:0
- 浮点型:0
- char:0或’\u0000’,而非’0’
- boolean:false
- 数组元素是引用数据类型时:null
5.5 多维数组
1 | // 二维数组静态初始化 |
5.5.1 多维数组的默认初始值
1 | int[][] arr = new int[4][3]; |
5.6 数组的遍历
1 | // foreach方式 |
5.7 Array类
5.7.1 常用方法
- java.util.Array类的所有方法均为静态方法
- boolean equals(int[] a,int[] b):判断两个数组是否相等
- String toString(int[] a):输出数组信息
- void fill(int[] a,int val):将指定值填充到数组中
- void sort(int[] a):对数组进行排序(快速排序)
- int binarySearch(int[] a,int key):对排序后的数进行二分法检索指定的值
5.8 数组常见异常
- 空指针:NullPointerException
- 数组下标越界:ArrayIndexOutOfBoundsException
六、类和对象
6.1 类
6.1.1 构造器
- 一个在创建对象时被自动调用的特殊方法
- 名称必须要和类名相同
- 构造器调用顺序是客->主
- 每个类都有构造方法,没有显示的为类定义构造方法,Java编译器会提供一个默认的构造方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14class Rock2{
Rock(int i){
System.out.print("Rock"+i+" ");
}
}
public class SimpleConstructor2(){
public static void main(String args[]){
for(int i=0;i<8;i++)
new Rock2(i);
}
}
// Rock 0 Rock 1 Rock 2 Rock 3 Rock 4 Rock 5 Rock 6 Rock 7
6.1.2 类的定义
1 | public class Dog{ |
6.1.3 类中的变量类型
- 局部变量
- 成员变量
- 类变量
6.2 对象
- 声明:声明一个对象,包括对象名和对象类型
- 实例化:使用new来创建一个对象
- 初始化:new创建对象时,会调用构造函数
1 | public class Puppy{ |
七、面向对象特性
7.1 封装
- 创建类以实现现实中抽象事物属性以及方法的封装
7.2 继承
7.2.1 继承的实现
1 | class father{ |
7.2.2 继承的特性
- 子类拥有父类非private的属性、方法
- 所有的类都继承于java.lang.Object
7.2.3 Super关键字
- 在子类的成员方法中,访问父类的成员变量。
- 在子类的成员方法中,访问父类的成员方法。
- 在子类的构造方法中,访问父类的构造方法。
7.3 多态
7.3.1 多态实现的必要条件
- 继承
- 重写
- 父类引用指向子类对象
7.3.2 多态的实现方式
- 重写
- 接口
- 抽象类和抽象方法
八、抽象类和抽象方法
8.1 抽象类
- 抽象类用来描述一种类型应该具备的基本特征与功能,具体如何去完成这些行为由子类通过方法重写来完成
- 抽象方法指只有功能声明,没有功能主体实现的方法
- 有抽象方法的类一定是抽象类
- 抽象类无法直接创建对象,只能被子类继承后,创建子类对象
- 抽象方法必须被子类重写
1 | public abstract class Employee |
8.3 抽象方法
- 抽象方法没有方法体,子类继承后必须重写该方法
1
2
3
4
5
6
7
8
9
10public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();
//其余代码
}
九、Java接口
9.1 接口与类的区别
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口中的成员变量只能是 public static final 类型。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承
9.2 接口的实现
当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。
类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。
1 | interface Animal { |
9.4 接口的特性
- 接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。
- 接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。
- 接口中的方法都是公有的。
9.5 接口的继承
- 一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
1 | public interface Sports |
- Hockey接口自己声明了四个方法,从Sports接口继承了两个方法,这样,实现Hockey接口的类需要实现六个方法。
- 相似的,实现Football接口的类需要实现五个方法,其中两个来自于Sports接口。
9.6 接口的多继承
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
1
public interface Hockey extends Sports, Event
十、Java枚举
10.1 枚举的实现
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16enum Color
{
RED, GREEN, BLUE;
}
public class Test
{
// 执行输出结果
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
// 结果为RED
10.2 迭代枚举元素
1 | enum Color |
10.3 枚举中的方法
- values() 返回枚举类中所有的值。
- ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
- valueOf()方法返回指定字符串值的枚举常量。
1 | enum Color |
10.4 枚举的作用
- 封装一组常量
- 对传入的参数进行约束和限制
十一、Java异常
11.1 异常分类
- 检查性异常: 不处理编译不能通过
- 非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台
- 运行时异常: 就是非检查性异常
- 非运行时异常: 就是检查性异常
所有的异常类是从 java.lang.Exception 类继承的子类
11.2 异常捕获
1 | // 单捕获 |
11.3 异常抛出
11.3.1 throws关键字
- 用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,需要由方法的调用者进行异常处理
- 用在方法声明后面,跟的是异常类名
- 可以跟多个异常类名,用逗号隔开
- 表示抛出异常,由该方法的调用者来处理
- throws表示出现异常的一种可能性,并不一定会发生这些异常
11.3.2 throw关键字
用来抛出一个具体的异常类型。
用在方法体内,跟的是异常对象名
- 只能抛出一个异常对象名
- 表示抛出异常,由方法体内的语句处理
- throw则是抛出了异常,执行throw则一定抛出了某种异常
- 如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译报错
- 执行到 throw 语句则后面的语句块不再执行
1 |
|
11.4 自定义异常类
- 所有异常都必须是 Throwable 的子类。
- 如果希望写一个检查性异常类,则需要继承 Exception 类。
- 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
1 | // 文件名InsufficientFundsException.java |
十二、Java内部类
12.1 非静态内部类
- 非静态内部类在类中地位等同于成员变量
- 非静态内部类实例的创建必须依赖外部类对象
- 非静态内部类可以访问到外部类的成员变量和成员方法
1 | public class OuterClass { |
12.2 静态内部类
- 静态内部类使用static对内部类进行标注
- 静态内部类无法访问外部类的成员变量和成员方法,但可以访问静态成员变量
- 静态内部类实例无需通过外部类实例进行创建
1 | public class OuterClass { |
12.3 匿名内部类
- 不显示声明类继承接口进行方法重写后调用
- 通过接口引用+匿名内部类在”{}”中重写方法,完成对象实例的创建
1 | public interface MyInterface { |
12.4 使用内部类的原因
- 内部类提升封装性,隐藏部分操作,代码结构更合理