Java 期末复习提纲
Java 开发环境
Java 的特点
面向对象、跨平台、能把中小型程序写成大型程序
开发 Java 的流程
- 设计类
- 写代码
- 重构
Java 程序规范
- Javadoc 风格注释
- 接口以 able 结尾
- 接口、类使用 Pascal 风格命名
- 成员方法,成员变量使用 camel 风格命名
- 高内聚,低耦合
Java 基本语法
数据类型
| 基本类型 | 字节个数 | 默认初始值 | 取值范围 | 
|---|---|---|---|
| byte | 1 | 0 | -128~127 | 
| short | 2 | 0 | -32769~32767 | 
| int | 4 | 0 | -2,147,483,648(-231)~2,147,485,647(231 - 1) | 
| long | 8 | 0L | -9,223,372,036,854,775,808(-263)~9,223,372,036,854,775,807(263 -1) | 
| float | 4 | 0.0f | 符合IEEE 754标准的浮点数 | 
| double | 8 | 0.0d | 符合IEEE 754标准的浮点数 | 
| boolean | 1位 | false | true/false | 
| char | 2 | 必须手动初始化 | '\u0000'~'\uffff' | 
8进制与16进制表示
前缀0表示8进制,而前缀0x代表16进制。例如:
int octal = 0144;
int hexa =  0x64;
转义字符
| 符号 | 字符含义 | 
|---|---|
| \n | 换行 (0x0a) | 
| \r | 回车 (0x0d) | 
| \f | 换页符(0x0c) | 
| \b | 退格 (0x08) | 
| \t | 制表符 | 
| " | 双引号 | 
| ' | 单引号 | 
| \\ | 反斜杠 | 
| \ddd | 八进制字符 (ddd) | 
| \uxxxx | 16进制Unicode字符 (xxxx) | 
基本类型与引用类型的区别
- 从概念方面来说
 基本类型:变量名指向具体的数值
 引用类型:变量名指向存数据对象的内存地址
- 从内存构建方面来说
 基本类型:基本数据类型在被创建时,在栈上给其划分一块内存,将数值直接存储在栈上;
 引用类型:引用数据类型在被创建时,首先要在栈上给其引用(句柄)分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
- 从使用方面来说
 基本类型:使用时需要赋具体值,判断时使用“==”号
 引用类型:使用时可以赋null,判断时使用equals方法
强制类型转换
(target_type)variable;
关键字
| 关键字 | 作用 | 
|---|---|
| break | 用来改变程序执行流程,立刻从当前语句的下一句开始执行从。如果后面跟有一个标签,则从标签对应的地方开始执行 | 
| case | 用来定义一组分支选择,如果某个值和switch中给出的值一样,就会从该分支开始执行 | 
| catch | 用来声明当try语句块中发生运行时错误或非运行时异常时运行的一个块 | 
| continue | 用来打断当前循环过程,从当前循环的最后重新开始执行,如果后面跟有一个标签,则从标签对应的地方开始执行 | 
| do | 用来声明一个循环,这个循环的结束条件可以通过while关键字设置 | 
| else | 如果if语句的条件不满足就会执行该语句 | 
| final | final 修饰的类不能被继承。final 修饰的方法不能被子类重写。final 修饰的变量(成员变量或局部变量)即成为常量,只能赋值一次。final 修饰的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有 一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。final 修饰的局部变量可以只声明不赋值,然后再进行一次性的赋值。 | 
| finally | 用来执行一段代码不管在前面定义的try语句中是否有异常或运行时错误发生 | 
| for | 用来声明一个循环。程序员可以指定要循环的语句,推出条件和初始化变量 | 
| if | 用来生成一个条件测试,如果条件为真,就执行if下的语句 | 
| implements | 在类的声明中是可选的,用来指明当前类实现的接口 | 
| import | 在源文件的开始部分指明后面将要引用的一个类或整个包,这样就不必在使用的时候加上包的名字 | 
| instanceof | 用来测试第一个参数的运行时类型是否和第二个参数兼容 | 
| interface | 用来定义一系列的方法和常量。它可以被类实现,通过 implements关键字 | 
| private | 用在方法或变量的声中。它表示这个方法或变量只能被这个类的其它元素所访问 | 
| protected | 在方法和变量的声明中使用,它表示这个方法或变量只能被同一个类中的,子类中的或者同一个包中的类中的元素所访问 | 
| public | 在方法和变量的声明中使用,它表示这个方法或变量能够被其它类中的元素访问 | 
| return | 用来结束一个方法的执行。它后面可以跟一个方法声明中要求的值 | 
| static | 用来定义一个变量为类变量。类只维护一个类变量的拷贝,不管该类当前有多少个实例。 static同样能够用来定义一个方法为类方法。类方法通过类名调用而不是特定的实例,并且只能操作类变量 | 
| this | 用来代表它出现的类的一个实例。this可以用来访问类变量和类方法 | 
| throw | 允许用户抛出一个exception对象或者任何实现throwable的对象 | 
| throws | 用在方法的声明中来说明哪些异常这个方法是不处理的,而是提交到程序的更高一层 | 
| try | 用来定义一个可能抛出异常语句块。如果一个异常被抛出,一个可选的catch语句块会处理try语句块中抛出的异常。同时,一个finally语句块会被执行,无论一个异常是否被抛出 | 
| void | 用在Java语言的方法声明中说明这个方法没有任何返回值。"void"也可以用来表示一句没有任何功能的语句 | 
| while | 用来定义一段反复执行的循环语句。循环的退出条件是while语句的一部分 | 
运算符优先级表
| 优先级 | 运算符 | 结合性 | 
|---|---|---|
| 1 | () [] . | 从左到右 | 
| 2 | ! +(正) -(负) ~ ++ -- | 从右向左 | 
| 3 | * / % | 从左向右 | 
| 4 | +(加) -(减) | 从左向右 | 
| 5 | << >> >>> | 从左向右 | 
| 6 | < <= > >= instanceof | 从左向右 | 
| 7 | == != | 从左向右 | 
| 8 | &(按位与) | 从左向右 | 
| 9 | ^ | 从左向右 | 
| 10 | | | 从左向右 | 
| 11 | && | 从左向右 | 
| 12 | || | 从左向右 | 
| 13 | ?: | 从右向左 | 
| 14 | = += -= *= /= %= &= |= ^= ~= <<= >>= >>>= | 从右向左 | 
说明:
- 该表中优先级按照从高到低的顺序书写,也就是优先级为1的优先级最高,优先级14的优先级最低。
- 结合性是指运算符结合的顺序,通常都是从左到右。从右向左的运算符最典型的就是负号,例如3+-4,则意义为3加-4,符号首先和运算符右侧的内容结合。
- instanceof作用是判断对象是否为某个类或接口类型
短路原则
- 
对于a && b,只有当a和b同时为true时,整个表达式才为true,在java中,首先运算表达式a,如果a为true,则继续运算表达式b,如果表达式a为false,那么整个表达式也肯定为false,所以表达式b不会被运算。 
- 
对于a || b,至少有一个为true,则表达式为true,如果a为false,整个表达式的值等于表达式b的值,因此继续运算表达式b,如果a为true,整个表达式的值为true,则没有必要再运算表达式b。 
数组和字符串
声明数组变量
double[] array;   // 首选的方法
//或
double array[];  // 效果相同,但不是首选方法
数组变量的声明,和创建数组可以用一条语句完成,如下所示:
    // 数组大小
    int size = 10;
    // 定义数组
    double[] myList = new double[size];
    
    //或者
    
    double[] myList = {1.9, 2.9, 3.4, 3.5};
常用属性
length , 获取数组的长度
常用数组方法(在 Arrays 类中 )
| 方法 | 说明 | 
|---|---|
| public static int binarySearch(Object[] a, Object key) | 用二分查找算法在给定数组中搜索给定值的对象(Byte,Int,double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。 | 
| public static boolean equals(long[] a, long[] a2) | 如果两个指定的 long型数组彼此相等,则返回true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,short,int等)。 | 
| public static void fill(int[] a, int val) | 将指定的 int值分配给指定int型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(byte,short,int等)。 | 
| public static void sort(Object[] a) | 对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型( byte,short,int等)。 | 
遍历数组
for (double item:arrays)
{
    //do something here
}
String类的常用方法
| 方法 | 作用 | 
|---|---|
| int length() | 返回字符串对象包含的字符数 | 
| String format() | 创建格式化字符串 | 
| int charAt(int index) | 返回指定索引处的 char 值 | 
| int compareTo(String anotherString) | 按字典顺序比较两个字符串 | 
| int compareToIgnoreCase(String str) | 按字典顺序比较两个字符串,不考虑大小写 | 
| boolean endsWith(String suffix) | 测试此字符串是否以指定的后缀结束 | 
| boolean equalsIgnoreCase(String anotherString) | 将此 String 与另一个 String 比较,不考虑大小写 | 
| boolean equals(String anotherString) | 将此 String 与另一个 String 比较 | 
| String replace(char oldChar, char newChar) | 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的 | 
| boolean startsWith(String prefix) | 测试此字符串是否以指定的前缀开始 | 
| String toLowerCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为小写 | 
| String toUpperCase() | 使用默认语言环境的规则将此 String 中的所有字符都转换为大写 | 
| String trim() | 返回字符串的副本,忽略前导空白和尾部空白 | 
String 类的 == 判断的是变量是否引用的同一个实例,而不是他们所引用的实例的内容是否相等
Java 面向对象基础
基本概念:
- 成员变量
- 成员方法
- 创建对象的关键字 new
- 构造函数的定义:无返回值,与类同名
- this表示当前实例,- super表示父类- 当使用 super(someargs)来继承父类的构造函数的时候,这句话必须放在最前面
- this(someargs)表示调用此类中与参数相符的构造函数重载,也必须放在构造函数的最前面
- 上面两个语句不能出现在同一个构造函数中
- 本质上来说,this是一个指向当前对象的指针,super是一个关键字
 
- 当使用 
- static关键字修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
- final关键字有一下几种含义:- 一个编译时恒定不变的常量
- 一个在运行时初始化,而你不希望它被改变的变量
- 参数列表中的参数以声明的方式声指明为final,这意味着你无法改变参数所指向的对象
- 把方法锁定,以防止任何继承它的类修改它的含义
 
类的继承
// A.java
public class A {
    private int i;
    protected int j;
 
    public void func() {
 
    }
}
 
// B.java
public class B extends A {
}
- 类只能有一个爸爸(父类),但可以实现多个接口
- 子类可以继承父类所有的方法和属性,但是无法使用 private(私有) 的方法和属性
- 通过使用instanceof操作符,能够确定对象是否是一个类或者其子类的实例
- 继承基本类和抽象类用extends关键字,实现接口类的继承用implements关键字。
重写与重载
重写
重写是子类对父类的允许访问的方法的实现过程进行重新编写!返回值和形参都不能改变。即外壳不变,核心重写!
方法的重写规则
- 参数列表必须完全与被重写方法的相同;
- 返回类型必须完全与被重写方法的返回类型相同;
- 访问权限不能比父类中被重写的方法的访问权限更高。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
- 父类的成员方法只能被它的子类重写。
- 声明为final的方法不能被重写。
- 声明为static的方法不能被重写,但是能够被再次声明。
- 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
- 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
- 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
- 构造方法不能被重写。
- 如果不能继承一个方法,则不能重写这个方法。
重载
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。
重载规则
- 被重载的方法必须改变参数列表;
- 被重载的方法可以改变返回类型;
- 被重载的方法可以改变访问修饰符;
- 被重载的方法可以声明新的或更广的检查异常;
- 方法能够在同一个类中或者在一个子类中被重载。
重写与重载的区别
| 区别点 | 重载方法 | 重写方法 | 
|---|---|---|
| 参数列表 | 必须修改 | 一定不能修改 | 
| 返回类型 | 可以修改 | 一定不能修改 | 
| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 | 
| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) | 
多态性
多态是同一个行为具有多个不同表现形式或形态的能力。
多态存在的三个必要条件:
- 继承
- 重写
- 父类引用指向子类对象
Java 包(package)
包的作用
- 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
- 如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。
- 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。
默认导入的包是java.lang
抽象方法:
public abstract <returnType> <methodName>(...);
仅有方法头,而没有方法体和操作实现,具体实现由当前类的不同子类在它们各自的类声明中完成,抽象类可以包含抽象方法
注意
- 一个抽象类的子类如果不是抽象类,则它必须为父类中的所有抽象方法书写方法体,即重写父类中的所有抽象方法
- 只有抽象类才能具有抽象方法,即如果一个类中含有抽象方法,则必须将这个类声明为抽象类
- 除了抽象方法,抽象类中还可以包括非抽象方法
抽象类
abstract class Number 
{
    //. . .
}
- 没有具体实例对象的类,不能使用new方法进行实例化
- 类前需加修饰符abstract
- 可包含常规类能够包含的任何东西,例如构造方法,非抽象方法
- 也可包含抽象方法,这种方法只有方法的声明,而没有方法的实现
集合类
Set
- 集合中的对象不按特定的方式排序,并且没有重复对象。
- 实现:
- HashSet: HashSet类按照哈希算法来存取集合中的对象,存取速度比较快
- TreeSet :TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序
 
List
- 元素以线性方式存储,集合中可以存放重复对象。
- 实现:
- ArrayList : 代表长度可以改变的数组。可以对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢
- LinkedList : 在实现中采用链表数据结构。插入和删除速度快,访问速度慢。
 
Map
一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象
常用操作:
Object put(Object key, Object value)    //向集合中加入元素   
Object remove(Object key)               //删除与KEY相关的元素   
void putAll(Map t)                      //将来自特定映像的所有元素添加给该映像   
void clear()                            //从映像中删除所有映射   
Object get(Object key)                  //获得与关键字key相关的值
put(Object key, Object value)           //添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)
数组、List相互转换
//List to array
Employee[] employees = employeeList.toArray(new Employee[employeeList.size()]);
//Array to list
employeeList = Arrays.asList(employees);
常用集合操作
//遍历
employeeList
    .stream()
    .forEach(employee -> 
    {
        //Do something here
    }));
    
//去重
employeeList = employeeList
        .stream()
        .distinct()  //使用 equals()方法 
        .collect(Collectors.toList());
        
//字符串列表转小写并去重
list = list
        .stream()
        .map(s->s.toLowerCase()+"或者你也可以在这里加上自己喜欢的话")
        .distinct()
        .collect(Collectors.toList()); //list 必须是 List 接口类型变量
        
//或者我们还可以排个序
list.sort((s1,s2)->
        {
            //或者在这里写你自己的比较方法
            //返回类型是 int
            return s1.compareTo(s2);
        });
//最后我们还可以删库跑路
list.clear();
IO 操作
常用的读写文件的操作
//从控制台读入
//先背一波类名
BufferedReader brConsole = new BufferedReader(new InputStreamReader(System.in));
        try
        {
        //读取文件
            BufferedWriter bwFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("worldcup.txt",true)));
            String line = null;
            while((line=brConsole.readLine())!=null)
            {
                if ("Done".equalsIgnoreCase(line))
                {
                    break;
                }
                else
                {
                    bwFile.write(line);
                    bwFile.newLine();
                }
            }
            bwFile.flush();
            
//好烦啊,其他的都差不多了,不写了
自定义异常
声明一个异常
class MyException extends Exception
{
}
捕获异常
try
{
   // 程序代码
}
catch(ExceptionName e1)
{
   //Catch 块
}
捕获多重异常
 try
 {
    // 程序代码
 }
 catch(异常类型1 异常的变量名1)
 {
    // 程序代码
 }
 catch(异常类型2 异常的变量名2)
 {
    // 程序代码
 }
 catch(异常类型3 异常的变量名3)
 {
    // 程序代码
 }
 
 //或者
 
  try
 {
    // 程序代码
 }
 catch(异常类型1 | 异常类型2 | 异常类型3 异常的变量名)
 {
    // 程序代码
 }
参考:
Java 教程 | 菜鸟教程:http://www.runoob.com/java/java-tutorial.html
    test2
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号