java程序由编译器进行编译,产生一种中间代码,称为java字节码。
java的特征:简单性、面向对象、分布式特征。半编译、半解释、强壮性、安全性、体系结构中立、可移植性、高性能、多线程、动态。
final可修饰类、属性和方法。
接口是一种抽象类,接口中只能出现静态常量或抽象方法的定义。
java只在运行时动态装载必须的类。
类有两种基本成分,变量和方法与定义,构造方法不是类的方法
类的成员变量可以是基本类型的数据或数组,也可以是一个类的实例
方法与其他函数的区别:
(1)方法只能是类的成员,只能在类中定义。
(2)调用一个类的成员方法,实际上是进行对象之间或用户与对象之间的消息传递
类分为类声明和类体,类体部分包括类成员变量的声明、构造方法和成员方法的声明
类成员的访问权限有4种,public、protected、private、默认权限
方法调用的参数传递方式是传值
可变参数列表
类型…参数名
public:任何类都能够创建这个类的实例对象
protected:只有这个类的子类以及与该类在同一个包的类可以创建这个类的实例对象
private:没有其他类可以实例化该类
默认:只有与该类在同一个包中的类可以创建这个类的实例对象
构造方法的特点
构造方法的名称必须于类名相同
构造方法不能有返回值
用户不能直接调用构造方法,不许通过关键字new自动调用它
同一个类的不同对象之间可以访问对方的private成员变量和方法。因为访问控制是在类的级别上
内部类是在一个类的声明里声明的类,也称嵌套类
内部类可以作为外包类的一个成员使用,可以访问外包类的所有成员,包括带有static的静态成员变量和方法,以及private私有成员
内部类的访问权限与普通类和接口不同,可以定义为public,protected、default或private,而普通类只能定义public或default
object类是java类体系的根类,是所有java类的父类
子类不能继承父类的构造方法
带private修饰符的属性、方法子类是不能继承的
super关键字指向该关键字所在类的父类,用来引用父类中的成员变量或方法
调用父类的构造方法要在子类构造方法的第一行
一个子类对象的创建与初始化都用经过以下三步:
分配对象所需要的全部内存空间,并初始化为0值
按继承关系,自顶向下显示初始化
按继承关系,自顶向下调用构造方法。
子类中重写方法的返回值类型必须与父类中被重写方法的返回值类型相同
子类中重写方法的返回权限不能缩小
子类中重写方法不能抛出新的异常
将一种类型(子类)对象的引用转换成另一种类型(父类)对象引用,就称为上溯造型
通过父类变量发出的方法调用,可能执行的是该方法在父类中的实现,也可能是在某个子类中的实现,这只能在运行时刻根据改变量指向的具体对象类型确定,这就是运行时多态
将一个方法调用和一个方法体连接到一起,就称为联编
浅复制是指如果被复制对象的成员变量是一个引用型变量,则复制对象中将不包括该变量指向的对象
深复制是在上述情况下,将同时复制该变量所指的对象 在成员变量声明时使用static,则该变量称为类变量或静态变量
静态变量只在系统加载其所在类时分配空间并初始化,并且在创建该类的实例时将不再分配空间
子类不能重写父类的静态方法,子类不能把父类的非静态方法重写为静态的
main()方法是一个静态方法,因为它是程序的入口点,这可以使JVM不创建实例对象就可以运行该方法
在一个类中,不属于任何方法体并且以static关键字修饰的语句块,称为静态语句块
静态语句块在加载该类时执行且只执行一次
如果一个类中定义了多个静态语句块,则这些语句块将按在类中出现的次序运行
被定义成final的类不能再派生子类
如果类的final变量在声明时没有赋初值,则在所属类的每个构造方法中都必须对该变量赋值。如果未赋初值的final变量是局部变量,则可以在所属方法体的任何位置对其赋值,但只能赋一次值
只有声明而不提供方法的实现的方法称为抽象方法,而包含一个或多个抽象方法的类被称为抽象类
不能创建抽象类的实例,若抽象类的子类实现了抽象方法,则可以创建该子类的实例对象,否则该子类也是抽象类,不能创建实例
一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法
在接口中定义的常量默认具有public、final、static属性
在接口中声明的方法默认具有public和abstract属性
在子类的声明中,extends子句必须放在implements子句前面
接口与抽象类的区别:
接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法
一个类可以实现多个接口,但只能继承一个抽象方法
接口与实现它的类不构成类的继承体系,即接口不是类体系的一部分。因此,不相关的类也可以实现相同的接口,而抽象类是属于一个类的继承体系,并且一般位于类体系的顶层
包机制的好处:
程序猿容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类
每个包都创建一个新的命名空间,因此不同包中的类名不会冲突
同一个包中的类之间有比较宽松的访问控制
一个类只能属于一个包
package语句必须在程序的第一行,该行前可有空格及注释行
包名以.为分隔符
import语句必须在源程序所有类声明之前,在package语句之后
Collection接口是集合接口树的根,它定义了集合操作的通用API
Set为集合,不能包含重复元素
List是一个有序的集合,称为列表或序列
Queue是先进先出
Map实现键值到值的映射,不能包含重复的键值
SortedSet和SortedMap分别是具有排序性能的Set和Map
Set接口有三个实用的类:HashSet类、TreeSet类和LinkedHashSet类
HashSet类采用Hash表实现了Set接口,当集合数量较大时,其访问效率要比线性列表块
TreeSet类实现了SortedSet接口,对象中元素按照升序排序
LinkedHashSet类实现了Set接口,采用Hash表和链表相结合的结构存储集合的元素,元素具有固定的顺序,又具有较高的存取效率
List接口有3个实用类:ArrayList类、LinkedList类和Vector类
ArrayList类采用可变大小的数组实现了List接口,这个类是非同步的,如果有多个线程并发访问,必须通过synchronized关键字进行同步控制,可以把ArrayList看做是没有同步开销的Vector
LinkedList类采用链表结构实现List接口,可以实现堆栈、队列或双端队列,非同步
Vector类采用可变体积的数组实现List接口,该类像数组一样,可以通过索引序号对所包含的元素进行访问,同步的
枚举类型是特殊的类,枚举类型的一个常量,实际上就是枚举类型的一个实例
java提供Wrapper类即包装类用来把基本数据类型表示成类
自动装箱:当编译器发现程序在应该使用对象的地方使用了基本数据类型的数据,编译器将把该数据包装为该基本类型对应的包装类的对象
自动拆箱: 当编译器发现在应该使用基本类型数据的地方使用了包装类的对象,则会把对象拆箱,从中取出所包含的基本类型数据
java处理的异常可以大致分为3类:Error及其子类、RuntimeException及其他Exception类
异常处理具有两种方式:捕获并处理异常,将方法中产生的异常抛出
在Java中,流是从源到目的地的字节的有序序列,先进先出,流式I/O是一种顺序存取方式
java中有两种基本的流——输入流与输出流
类根据流相对于程序的另一个端点不同,分为节点流和过滤流
节点流:以特定源如磁盘文件、内存某区域或线程之间的管道为端点构造的输入输出流,是一种最基本的流
过滤流:以其他已经存在的流为端点构造的输入输出流,称为过滤流或处理流,它要对其相连的另一个流进行某种转换
根据流中的数据单位不同分为字节流和字符流
字节流:流中的数据以8位字节为单位进行读写,以InputStream和OutputStream为基础类
字符流:流中的数据以16位字符为单位进行读写,以Reader和Writer为基础类
主要差别是处理的数据类型不同。
进程是由代码、数据、内核状态和一组寄存器组成的,而线程是由表示程序运行状态的寄存器以及堆栈组成
java的特征:简单性、面向对象、分布式特征。半编译、半解释、强壮性、安全性、体系结构中立、可移植性、高性能、多线程、动态。
final可修饰类、属性和方法。
接口是一种抽象类,接口中只能出现静态常量或抽象方法的定义。
java只在运行时动态装载必须的类。
类有两种基本成分,变量和方法与定义,构造方法不是类的方法
类的成员变量可以是基本类型的数据或数组,也可以是一个类的实例
方法与其他函数的区别:
(1)方法只能是类的成员,只能在类中定义。
(2)调用一个类的成员方法,实际上是进行对象之间或用户与对象之间的消息传递
类分为类声明和类体,类体部分包括类成员变量的声明、构造方法和成员方法的声明
类成员的访问权限有4种,public、protected、private、默认权限
方法调用的参数传递方式是传值
可变参数列表
类型…参数名
public:任何类都能够创建这个类的实例对象
protected:只有这个类的子类以及与该类在同一个包的类可以创建这个类的实例对象
private:没有其他类可以实例化该类
默认:只有与该类在同一个包中的类可以创建这个类的实例对象
构造方法的特点
构造方法的名称必须于类名相同
构造方法不能有返回值
用户不能直接调用构造方法,不许通过关键字new自动调用它
同一个类的不同对象之间可以访问对方的private成员变量和方法。因为访问控制是在类的级别上
内部类是在一个类的声明里声明的类,也称嵌套类
内部类可以作为外包类的一个成员使用,可以访问外包类的所有成员,包括带有static的静态成员变量和方法,以及private私有成员
内部类的访问权限与普通类和接口不同,可以定义为public,protected、default或private,而普通类只能定义public或default
object类是java类体系的根类,是所有java类的父类
子类不能继承父类的构造方法
带private修饰符的属性、方法子类是不能继承的
super关键字指向该关键字所在类的父类,用来引用父类中的成员变量或方法
调用父类的构造方法要在子类构造方法的第一行
一个子类对象的创建与初始化都用经过以下三步:
分配对象所需要的全部内存空间,并初始化为0值
按继承关系,自顶向下显示初始化
按继承关系,自顶向下调用构造方法。
子类中重写方法的返回值类型必须与父类中被重写方法的返回值类型相同
子类中重写方法的返回权限不能缩小
子类中重写方法不能抛出新的异常
将一种类型(子类)对象的引用转换成另一种类型(父类)对象引用,就称为上溯造型
通过父类变量发出的方法调用,可能执行的是该方法在父类中的实现,也可能是在某个子类中的实现,这只能在运行时刻根据改变量指向的具体对象类型确定,这就是运行时多态
将一个方法调用和一个方法体连接到一起,就称为联编
浅复制是指如果被复制对象的成员变量是一个引用型变量,则复制对象中将不包括该变量指向的对象
深复制是在上述情况下,将同时复制该变量所指的对象 在成员变量声明时使用static,则该变量称为类变量或静态变量
静态变量只在系统加载其所在类时分配空间并初始化,并且在创建该类的实例时将不再分配空间
子类不能重写父类的静态方法,子类不能把父类的非静态方法重写为静态的
main()方法是一个静态方法,因为它是程序的入口点,这可以使JVM不创建实例对象就可以运行该方法
在一个类中,不属于任何方法体并且以static关键字修饰的语句块,称为静态语句块
静态语句块在加载该类时执行且只执行一次
如果一个类中定义了多个静态语句块,则这些语句块将按在类中出现的次序运行
被定义成final的类不能再派生子类
如果类的final变量在声明时没有赋初值,则在所属类的每个构造方法中都必须对该变量赋值。如果未赋初值的final变量是局部变量,则可以在所属方法体的任何位置对其赋值,但只能赋一次值
只有声明而不提供方法的实现的方法称为抽象方法,而包含一个或多个抽象方法的类被称为抽象类
不能创建抽象类的实例,若抽象类的子类实现了抽象方法,则可以创建该子类的实例对象,否则该子类也是抽象类,不能创建实例
一个接口可以有多个父接口,用逗号隔开,而一个类只能有一个父类。子接口继承父接口中所有的常量和方法
在接口中定义的常量默认具有public、final、static属性
在接口中声明的方法默认具有public和abstract属性
在子类的声明中,extends子句必须放在implements子句前面
接口与抽象类的区别:
接口中的所有方法都是抽象的,而抽象类可以定义带有方法体的不同方法
一个类可以实现多个接口,但只能继承一个抽象方法
接口与实现它的类不构成类的继承体系,即接口不是类体系的一部分。因此,不相关的类也可以实现相同的接口,而抽象类是属于一个类的继承体系,并且一般位于类体系的顶层
包机制的好处:
程序猿容易确定包中的类是相关的,并且容易根据所需的功能找到相应的类
每个包都创建一个新的命名空间,因此不同包中的类名不会冲突
同一个包中的类之间有比较宽松的访问控制
一个类只能属于一个包
package语句必须在程序的第一行,该行前可有空格及注释行
包名以.为分隔符
import语句必须在源程序所有类声明之前,在package语句之后
Collection接口是集合接口树的根,它定义了集合操作的通用API
Set为集合,不能包含重复元素
List是一个有序的集合,称为列表或序列
Queue是先进先出
Map实现键值到值的映射,不能包含重复的键值
SortedSet和SortedMap分别是具有排序性能的Set和Map
Set接口有三个实用的类:HashSet类、TreeSet类和LinkedHashSet类
HashSet类采用Hash表实现了Set接口,当集合数量较大时,其访问效率要比线性列表块
TreeSet类实现了SortedSet接口,对象中元素按照升序排序
LinkedHashSet类实现了Set接口,采用Hash表和链表相结合的结构存储集合的元素,元素具有固定的顺序,又具有较高的存取效率
List接口有3个实用类:ArrayList类、LinkedList类和Vector类
ArrayList类采用可变大小的数组实现了List接口,这个类是非同步的,如果有多个线程并发访问,必须通过synchronized关键字进行同步控制,可以把ArrayList看做是没有同步开销的Vector
LinkedList类采用链表结构实现List接口,可以实现堆栈、队列或双端队列,非同步
Vector类采用可变体积的数组实现List接口,该类像数组一样,可以通过索引序号对所包含的元素进行访问,同步的
枚举类型是特殊的类,枚举类型的一个常量,实际上就是枚举类型的一个实例
java提供Wrapper类即包装类用来把基本数据类型表示成类
自动装箱:当编译器发现程序在应该使用对象的地方使用了基本数据类型的数据,编译器将把该数据包装为该基本类型对应的包装类的对象
自动拆箱: 当编译器发现在应该使用基本类型数据的地方使用了包装类的对象,则会把对象拆箱,从中取出所包含的基本类型数据
java处理的异常可以大致分为3类:Error及其子类、RuntimeException及其他Exception类
异常处理具有两种方式:捕获并处理异常,将方法中产生的异常抛出
在Java中,流是从源到目的地的字节的有序序列,先进先出,流式I/O是一种顺序存取方式
java中有两种基本的流——输入流与输出流
类根据流相对于程序的另一个端点不同,分为节点流和过滤流
节点流:以特定源如磁盘文件、内存某区域或线程之间的管道为端点构造的输入输出流,是一种最基本的流
过滤流:以其他已经存在的流为端点构造的输入输出流,称为过滤流或处理流,它要对其相连的另一个流进行某种转换
根据流中的数据单位不同分为字节流和字符流
字节流:流中的数据以8位字节为单位进行读写,以InputStream和OutputStream为基础类
字符流:流中的数据以16位字符为单位进行读写,以Reader和Writer为基础类
主要差别是处理的数据类型不同。
进程是由代码、数据、内核状态和一组寄存器组成的,而线程是由表示程序运行状态的寄存器以及堆栈组成