流
java 语言没有标准输入输出语句 使用io程序包流 来实现
流 (stream)是一组有序的数据序列
类型
方向
输入流
有源地流向java程序的数据
输出流
java程序流向目标的数据
流的数据单位
- 字节 - 字节流 inputStream
- 字符 - 字符流 Reader
- 对象 - 对象流 ObjectInputStream
流
java 语言没有标准输入输出语句 使用io程序包流 来实现
流 (stream)是一组有序的数据序列
类型
方向
输入流
有源地流向java程序的数据
输出流
java程序流向目标的数据
流的数据单位
向量
数组的缺点
数组穿件就决定大小 且不能改变
向量 集合
可动态改变大小
可在序列中存储不同类型数据
集合 把相同性质的一类对象 汇聚成一个整体
java2中定义了很多 与集合相关的接口
集合框架
——对外接口
表示集合的 抽象数据类型 使集合的操作宇表示愤慨
——接口实现
指实现集合接口的 java类 可重用的数据结构
——集合运算
指执行运算的方法 如 在集合上查找 排序
——当前定义了 4个接口 4个抽象类 6个具体类
向量 Vector 特征
实现了 Collection接口的具体类
能存储任意对象 但通常 不同类型的对象都具有相同的 父类 或接口
不能存储基本类型数据 除非这些数据包裹在包裹类中
Vector 方法是同步的 线程安全
向量的创建
Vector()
默认容量是10
Vector(90)
指定存储容量
Vector(90,20 )
指定存储容量 ,增量
向量操作
添加元素
更改
删除
查找
多维数组(高维数组)数组的数组
二维数组定义
数据类型 数组名 [][]
int arr[][];
int [][] arr
int arr[][] = new int[2][3]
数组
相同数据类型元素按照一定顺序排序的计划
优点
在 java 提供的存储及随机访问对象序列的各种方法中 数组效率最高
数组知道其元素的 类型
编译时类型检查
不足
数组对象大小固定 在生存期间不能改变
基于维数
基于元素数据类型
一维数组
数据类型 数组名 []
eg—— int arr[];
—— int[] arr;
数据类型 - 数组元素的数据类型
对象数组
Date[] dateArr;
数组定义狗不能立即使用 初始化后才能使用
一维数组初始化
静态初始化
int arr[] = {}1,2,3,4}
动态初始化
int arr[] = new int [4]
数组元素默认初始值为0
Date dArr[] = new Date[4]
数组元素初始值为null
一维数组引用
arr[index]
数组
相同数据类型元素按照一定顺序排序的计划
优点
在 java 提供的存储及随机访问对象序列的各种方法中 数组效率最高
数组知道其元素的 类型
编译时类型检查
不足
数组对象大小固定 在生存期间不能改变
基于维数
基于元素数据类型
一维数组
数据类型 数组名 []
eg—— int arr[];
—— int[] arr;
数据类型 - 数组元素的数据类型
对象数组
Date[] dateArr;
数组定义狗不能立即使用 初始化后才能使用
常用程序包
java 基础类库 JFC
——java foundational class
根据功能关联 分别房子按不同程序包中
应用程序编程接口
——application programming interface
java.lang
java 核心类库
包含不必不可少系统类
基本数据类型 基本数据函数 字符串处理 县城 异常处理等 系统缺省加载
java.io
java 语言的输入输出类库 如基本输入输出流 文件输入输出流 。。。
java.util
提供一些使用方法 数据结构
java 提供的日期类 (Data) 日历类 (Calender) 来生产和获取其日及时间 提供随机数 (Random)
提供堆栈(stack) 向量(vector) 位集合(Bitset) 哈希表(Hashtable)等类来表示相应的数据结构 包含如处理时间的date类 处理变成数组的Vectot类 以及 stack和Hashtable类
java.awt.image包
处理和操作来自网上图片的java工具类库
java.awt包
构件图形用户界面的gui类库 低级绘图操作Graphics类
图形界面组件和布局管理checkbox类 Container类 LayoutManger接口等
界面用户交互控制和事件 如Event类
java.awt.peer包
很少在程序中直接用到 使得同意java程序在不同软硬件平台上运行
java.applet
用于执行小程序的类 如applet
java.net
实现网络功能的类库有Socket类 ServerSocket类
java.util.zip
实现文件压缩功能
——package ppkg1[pkg2[pkg3...]]
package 指明文件中定义的类所在的程序包
package 语句必须时源程序的第一条语句 只能有一条
若没有package语句 则使用默认程序包
java 编译器把程序包对应于文件系统的目录管理
导入
import
程序包
一个程序包 (package)被定义为一组互相联系的类型(类 接口 枚举等)集合 并为这些类提供访问保护和命名空间管理的功能
作用
把功能相关 相似的类或接口组织在同一包中 方便查找使用
避免名字冲突
类似目录 包也是树形目录的存储方式
同一包 类名不同 不同包雷鸣可以相同
铜焊丝调用两个不同包的相同类 应加报名以便区分
限定访问权限
又有包的访问权限的类 才能访问此包的类
程序包对类的访问权限
public 修饰的类——本包的其他类 和 其他程序包的类都可以使用
非public修饰的类(缺省修饰)类——只能被当前程序包的其它类使用
private -- class
缺省 -- class package
protected -- class package subclass
public -- class package subclass world
程序包的语法格式
——package ppkg1[pkg2[pkg3...]]
接口的实现
接口不能用new 故此必须利用其特性 设计新的类 在用心的类创建对象
利用接口设计类的过程 称为 接口的实现
使用 implements 关键字
实现接口所有方法的类 可实例化
实现部分 则只能为抽象类
来自接口的方法必须声明称 public
接口定义
与抽象类一样都是定义多个类的 共同属性 加强版 是一个纯抽象类 只提供一种形式 不提供实现 只有头部声明 没有方法体
可以包含 基本数据类型的 数据成员 都默认为 static final
接口的作用
吧类根据其实现的功能来分别代表 不必考虑他所在的类继承层次
实现不同类之间常量共享
接口定义
接口修饰符 interface 接口名称 【extends 父接口】 {
方法的原型声明或者 静态常量
}
接口的数据成员一定要给初值 并且这个值不能再更改 允许省略final 关键字
接口中的方法必须是抽象方法 不能有方法体 允许省略 public abstract 关键字
内部类
(外部类的 内部 在定义一个新的类)
是外部类的一个成员
特征
使用内部类的好处
内部内可以很好实现隐藏
一般类不允许有private protected 权限 但内部类 可以
内部类拥有外部类 所有元素访问权限
可实现多重继承
可避免修改接口而是先同一个类中 两种同名方法的调用 --?
种类
成员内部类
class out
方法内部类
匿名内部类(没有名字的内部类)
应用场合
限制
不能有构造方法
不能定义任何静态成员变量和成员方法
不能收public protected private static修饰
静态嵌套类
抽象类(代表一个抽象概念的类)
没有具体实例对象 不能用new 实例化
贾秀师傅 abstract
可包含常规类能包含的任何东西
可包含抽象方法 (只有方法声明 没有方法实现)
父类是抽象类 子类不是抽象类的话 则要补全父类所有的抽象方法体
abstract class 类名{
}
特征 :
抽象方法
优点
方法覆盖(override 方法重写)
子类方法覆盖 父类的方法
java多态性的另一种形式(动态多态)
子类预付类有相同的方法 但实现不同
方法覆盖的 规则
子类方法不能缩小弗雷方法的访问权限
子类不能抛出比父附类方法 更多的异常
父类的非静态方法 不能被子类覆盖为静态方法
不能被覆盖的方法 private final static修饰的方法
方法重载(overload)
java类中存在同名方法 但参数声明不同
是java多态性的最终形式(静态多态)
不同参数列表 不同方法实现
调用时通过传递的参数的个数、类型决定具体使用那个方法
super
变量作用范围(变量的有效范围)
--变量在程序代码中的作用区域
类的定义
构成 (类头 类体)
[public] [abstract|final]+ class + 类名
[extends 父类名称]
[implements 接口名称类表]
{
类体定义
}
声明一个类
public class sun extends father
sun从father派生而来
声明类要实现某些接口 接口的名字写在implements之后
头部修饰符
可以有多个 用来限定类的使用方式
不能互斥
public 公有类
abstract 抽象类(不能创建对象)与final互斥
final 终结类(不能派生子类)与abstract互斥
类体定义
变量成员声明及初始化(可以有多个)
方法声明及方法体(可以多个)
结构化程序设计
面向对象 程序设计
对象
现实中
万事万物接对象
都具有各自属性 对外界呈现各自行为
程序中
一切皆对象
都具有标识(identity)属性和行为(方法)
通过一个或者多个变量来保存其状态
通过方法(method)来实现其行为
类
特征
更符合人类认识现实世界的思维方式
已成为程序设计的主流方向
涉及的主要概念
抽象
忽略问题中与当前目标无关的方面 以便更充分的注意与当前目标有关的方面
软件开发中所使用的抽象 (过程抽象、数据抽象)
封装
是一种信息隐藏技术
利用抽象数据类型将数据和基于数据的操作封装在一起
用户只能看到对象封装界面信息 内部细节对用户隐蔽
封装的本身目的将对象的使用者和设计者分开使用者无需知道行为实现的细节 只需使用设计者提供的消息来访对象
继承
试着新的类获得已有类(称为超类、基类、父类)的属性和行为,称新类为已有类的派生类(子类)
在继承过程中派生类集成了基类的特性,包括方法和实例变量
派生类也可修改继承的方法好与偶增加新的方法,使之更适合特殊需要
有助于解决软件可重用性问题 降低编码维护的工作量
多态
一个程序中同名的不同方法共存
主要通过自雷对付类方法的覆盖来实现
不同类的对象可以影响同名方法 具体方法实现并不同
是语言具有灵活 抽象 行为给共享 代码共享的有事 解决了应用程序中方法同名的问题
break
终止循环语句
强行跳出
标号跳转
跳出标号标定的语句块
while 和 do while 的区别
do-while至少执行一次