一、基本数据类型
1、 变量单元直接存放数据
2、 赋值和传参的方式:传值,即传递副本
3、 比较相等使用关系运算符“==”
二、 引用数据类型
1、 变量单元存放引用即对象地址,而数据(对象)在另一内存区域存放。
2、 赋值和传参的方式:传引用(传递对象的地址),即传递对象本身。
3、 使用关系运算符“==”比较两个引用类型变量,比较的是地址,如果比较结果为真,说明两个变量引用了同一对象。
4、 比较两个对象是否相等应使用equals方法
三、 Java是面向对象的语言,开发Java程序就是开发Java类,Java的变量定义、方法(函数)和语句都必须在类中书写,“无类即无Java”。
四、类的实例成员
属性(成员变量):直接定义在类体中的变量(注:在方法或语句块中定义的变量不是属性)
方法:直接定义在类体中的方法。
类成员:直接定义在类体中的内部类,即类成员。
注:对象的成员是从属于对象的,必须通过对象访问,在Java中不存在脱离对象和类而独立存在的属性和方法。
五、类、方法、语句三者的关系
类中包含方法,方法中包含语句;方法中不能嵌套方法;语句不能直接写在类体中。
六、 变量的作用域
1、 局部变量-方法的参数、方法体中定义的变量、语句块中定义的变量,仅在所定义的方法体或语句块中有效。
2、 属性-在整个类体中有效。
3、 公有的属性-其它类可以本类对象访问。
4、 私有的属性-仅限本类内访问
七、 局部变量(无论基本类型还是引用类型)在栈内存中,对象在堆内存中。注:引用类型的局部变量内存放是对象的引用(即地址),而对象在堆内存中。
八、 方法的重载-在同一类中多个方法同名的语法现象,方法重载应符合以下条件
1、 方法同名
2、 参数有所不同(即类型、个数和顺序三者至少有一个不同)
注:方法是否重载不考虑返回类型等其它方面。
九、 包和访问修饰符
1、 包-类的目录结构,主要用途是方便类的管理。
2、 类的简称:不含包名的类名
3、 类的全限定名称(类的全称):带包名的类名。
4、 访问修饰符
5、 private-仅限本类内访问
6、 public-任何类都能够访问
7、 默认-限本包的类访问
8、 protected--限本包的类访问和子类的访问
9、 类的成员(属性、方法和成员内部类)可以使用四种访问修饰符,顶级外部类仅能使用public和默认两种修饰符。
十、 数组
1、 基本类型的数组的元素放的是数据
2、 对象数据的元素放的是对象的引用
3、 二维数组实际上是一个维数组,而其每个元素又是一个一维数组。
十一、 构造方法-与类名同名并且无返回类型的方法
1、 构造方法的作用是创建对象,仅能通过new关键字调用。
2、 类中未显式定义构造方法时,类中会有默认的构造方法(即一个public、无参的构造方法);类中一旦定义显式定义构造方法,将不再产生默认的构造方法。
3、 构造方法可以重载
4、 构造方法只能可以使用四个访问修饰符,不可以使用其它修饰符(如static、final等)。
十二、this关键字
1、this表示本对象或对象自身的引用
2、通过this可以调用本类的成员方法和属性
3、通过this可以调用本类的构造方法,this调用构造方法的语句必须写在构造方法的第一句。
十三、 实例成员和静态成员
1、 类的成员(属性、方法和成员类)可划分为静态成员和实例成员。
2、 实例成员是属于对象的,随着对象的创建而存在,随着对象的销毁而销毁。
3、 静态成员是属于类的,随着类的加载而存在,随着类的销毁而销毁。
4、 使用static修饰的成员是静态成员,未使用static修饰的成员是实例成员。
5、 静态成员内不能使用this关键字。
6、 this表示当前对象的引用。
十四、 对象的初始化
1、 第一:实例属性赋默认值
2、 第二:实例属性赋初值
3、 第三:执行对象初始化块
4、 第四:执行构造方法
十五、 类的初始化
1、 第一:静态属性赋默认值
2、 第二:静态属性赋初值
3、 第三:执行静态块
十六、继承的基本概念
1、 Java仅支持单继承
2、 如果一个类没有显式继承任何类,则隐式继承java.lang.Object类
3、 子类拥有父类的一切,子类对象由两部分构成:父类对象部分和子类个性化的部分。
4、 子类并不能访问父类的一切:
5、 子类可以访问父类的public成员和protected成员
6、 子类不可以访问父类的private成员
7、 仅当子类与父类同在一包时,子类方可以访问父类的默认访问控制的成员。
十七、 继承与类和对象的初始化
1、 构造子类对象时,首先构造父类对象,其次构造子类个性化部分,两者共同构成完整的子类对象,即首先进行父类对象的初始化,在初始化子类对象(个性化)部分。
2、 子类构造方法的执行首先调用父类的构造方法。
3、 若在子类构造方法中无显式调用父类构造方法的语句,则系统默认调用父类中可访问的无参的构造方法,如果这时候父类中恰好没有这样的构造方法,则编译出错。
4、 在子类的构造方法中可以通过super关键字调用父类构造方法。这样的调用语句只能出现在子类构造方法的第一句。
5、 关于初始化的顺序
6、 初始化父类
7、 初始化子类
8、 初始化父类对象
9、 初始化子类对象
十八、 继承与类型转换
1、 子类型对象可以自动转型为父类型
2、 父类型引用某个子类型对象时,可以强制转化为这个具体的子类型
十九、 方法重写
1、 在继承的情况下,子类的实例方法与父类的实例方法的方法名称、参数、返回类型、throws声明完全一致,并且该子类方法的访问权限不低于父类方法的访问权限,即方法重写(子类方法重写了父类方法),也称方法覆盖。
2、 方法重写仅存在于父子类中的实例方法,静态方法没有重写的概念。
3、 当通过子类型对象执行重写方法时,将始终表现为子类的行为,而且无论引用对象的变量是父类型还是子类型,也无论是直接调用还是通过父类型其它方法间接调用,都将如此。
4、 final修饰的方法不可以被重写
5、 final修饰的类不可以被继承
二十、 隐藏成员变量
1、 如果子类和父类中定义了同名称的成员变量,则称子类隐藏了父类的成员变量
2、 通过父类方法访问隐藏的成员变量时,将获得父类成员变量
3、 通过子类方法访问隐藏的成员变量时,将获得子类成员变量
4、 通过父类型的引用直接访问隐藏的成员变量时,将获得父类成员变量
5、 通过子类型的引用直接访问隐藏的成员变量时,将获得子类成员变量
二十一、 super关键字
1、 super仅能用于子类中表示本对象的父对象部分
2、 super可以调用父类型的构造方法
3、 Super可以调用父类的成员
4、 Super不可以使用在静态上下文中
5、 Super不可以做为参数传递,不可以做为返回值返回。
6、 当方法重写时,或父类成员变量被隐藏时,子类中只能通过super访问父类方法和父类成员变量
二十二、 final关键字
1、用于变量,表示变量的值不可改变
2、用于类,表示类不可被继承
3、用于方法,表示方法不可以被重写
4、关于final变量的初始化时机
5、局部变量:声明的时候初始化
6、实例成员变量:声明、对象初始化块和构造方法三处之一
7、静态成员变量:声明、静态块两处之一
二十三、 抽象类
1、 抽象类可以包含抽象方法,也可以不包含抽象方法
2、 含有抽象方法的类必须定义为抽象类
3、 抽象类有构造方法
4、 抽象类不能够实例化
5、 通过抽象类可以调用其静态成员
6、 抽象类是需要由子类继承的,因此抽象类不允许是final类
二十四、抽象方法
1、 抽象方法没有方法体,包括一对空的大括号也不允许有
2、 抽象方法必须是实例方法,抽象方法不允许是final的
二十五、 抽象类与继承
1、 抽象类可以被继承
2、 若抽象类的子类是非抽象类,则该子类必须实现(重写)其父类的所有抽象方法
3、 若抽象类的子类也是抽象类,则该子类可以不实现(重写)其父类的全部或部分抽象方法。
二十六、 接口
1、 接口也是数据类型,可以将其理解为“纯”抽象类
2、 接口不是类,也没有构造方法,不能够实例化
3、 接口中的属性一律是public、static、final的,并可以省略这三个关键字
4、 接口的方法一律是public、abstract的,并且可以省略这两个关键字
5、 接口中可以不包含任何属性和方法
二十七、接口与实现
1、 接口不是类,因此接口与类的关系不是“继承”关系,而是“实现”关系,我们可以将实现理解为继承(尽管这并不恰当)
2、 如果接口的实现类是抽象类,则该实现类可以不实现接口的全部或部分方法
3、 如果接口的实现类是非抽象类,则该实现类必须实现接口的全部方法
4、 一个类可以实现多个接口
二十八、 接口与继承
1、 接口之间可以相互继承
2、 一个接口可以继承多个接口
二十九、 接口与类型转换
1、 接口的的子类型对象可以自动向上转型为接口类型
2、 接口的子类型指:是接口的实现类或者接口的子接口
3、 如果变量引用的对象实际是某个接口的实现类对象,而变量的类型不是这个接口的子类型,那么则可以强制转换为这个接口类型。
三十、 异常的类层次结构
1、 Throwable - 异常根类
2、 Error - 错误类,表示不可恢复的致命错误
3、 Exception - 异常类,表示可以处理的错误,开发者此应当仔细考虑和处理
4、 RuntimeException - 运行时异常,此类异常可以不做显式处理
5、非运行时异常 - 此类异常必须做显式处理,否则无法编译通过
三十一、 异常的处理方式
1、 捕获 try - catch
2、 声明抛出 在方法头通过throws声明可能抛出的异常类型
三十二、 异常机制的五个关键字
1、 try catch finally throw throws
2、 如何使用
3、 try-catch
4、 try-catch-finally 注:只要try执行,其对应的finally块才必然执行
5、 try-finally 注:只要try执行,其对应的finally块才必然执行
6、 throw 主动抛出一个异常
7、 throws 用在方法声明头部,声明方法可能抛出异常
8、 finally代码块多用于书写资源回收代码
三十三、 垃圾回收机制
1、 Java语言中,内存回收的任务由Java虚拟机来担当,而不是由Java程序来负责。在程序的运行时环境中,Java虚拟机提供了一个系统级的垃圾回收器线程,它负责自动回收那些无用对象所占用的内存,这种内存回收的过程被称为垃圾回收(Garbage Collection)。
2、 垃圾回收具有以下优点:
01、 把程序员从复杂的内存追踪、监测和释放等工作中解放出来,减轻程序员进行内存管理的负担。
02、防止系统内存被非法释放,从而使系统更加健壮和稳定
当垃圾回收器将要回收无用对象的内存时,先调用该对象的finalize()方法,该方法有可能使对象复活,导致垃圾回收器取消回收该对象的内存。
三十四、 Java集合类(集合框架)
1、 Collection接口
2、 List接口 允许重复元素,元素有索引序号,并按放入元素的次序编号
3、 ArrayList 线性表结构,查找快,增删慢
4、 LinkedList 链表结构,查找慢,增删快
5、 Vector 同步,查找、增删性能都不高。
6、 Set接口 不允许重复元素,元素无索引编号
7、 HashSet 元素散列存放
8、 TreeSet 元素按自然顺序排序(即从小到大排序)
9、 Map接口
10、 HashMap
11、 允许null值和null键
12、 不同步
13、 Hashtable <-- Properties
14、 不允许null值和null键
15、 同步
三十五、 内部类
1、 静态内部类只能访问外部类的静态成员,创建静态内部类对象不需要先创建外部类对象
成员内部类拥有对外部类成员的访问权限,创建成员内部类对象的时候必须先有外部类对象,后创建内部类对象,非静态成员内部类中不能定义静态成员
2、 方法内部类不能访问本方法的普通成员,只能访问本方法的final型成员 方法内部类的修饰符只能使用final或者abstract,其它的访问修饰符或者非访问修饰符都不能使用
匿名内部类,匿名内部类没有名字,但是有实现的接口或者继承的父类的名字,只能使用它创建一次对象