Java快速入门-03-小知识汇总篇(全)
Java快速入门-03-小知识汇总篇(全)
前两篇介绍了JAVA入门的一系小知识,本篇介绍一些比较偏的,说不定什么时候会用到,有用记得 Mark 一下
快键键
- 常用快捷键(熟记)
快捷键 | 快捷键作用 |
---|---|
Ctrl + Shfit + O | 引入及管理 import 语句 |
Ctrl + Shfit + F4/Ctrl + W | 挂你比打开的窗口 |
Ctrl + Shfit + F | 自动调整所选代码格式化 |
Ctrl + / | 注释本行 |
Ctrl + E | 打开编辑器 / 切换窗口 |
Ctrl + D | 删除本行 |
Alt + Shfit + R | 注释本行 |
Alt + Shfit + L | (常用)抽取本地变量 |
Alt + Shfit + M | 抽取方法 |
Ctrl + Alt + 上(下) | 向上或向下复制文本 |
Alt + 上(下) | 向上或向下移动文本 |
- 更多快捷键:MyEclipse 快捷键大全
基本数据类型
- 1.八种基本类型(没有 String)
byte | short | int | long |
float | double | boolean | char |
- 2.计算时:float a = 1.0-0.9
a=0.09999999999999998 而不是 0.1
那怎么让它等于 0.1?
答:输出时格式化输出结果,保留小数点后一位,例如:System.out.printf("%.1f",1.0-0.9);
(jdk1.5以后,才有 System.out.printf() ) - 3.常用类型的数值范围
注意:最大值和最小值绝对值是不相等的
数值类型 | 最小值 | 最大值 |
---|---|---|
byte | -128(-2^7) | 127(2^7-1) |
short | -32768(-2^15) | 32767(2^15 - 1) |
int | -2,147,483,648(-2^31) | 2,147,483,647(2^31 - 1) |
long | -9,223,372,036,854,775,808(-2^63) | 9,223,372,036,854,775,807(2^63 -1) |
char 16位Unicode | \u0000(即为0) | \uffff(即为65,535) |
-
4.数据类型级别(涉及自动转换)
当两个类型不同的运算对象进行二元运算时,java自动把精度较低的类型转换为另一个精度较高的类型,如果不进行类型转换不能将高精度类型的值赋给低精度类型的变量低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double -
5.格式化输出内容
占位符总也记不住
占位符 | 说明 |
---|---|
%d | 按照 10 进制输出整数 |
%f | 按照 10 进制输出小数 |
%e、%E | 按照 科学计数法 输出小数 |
%o | 按照 8 进制输出整数 |
%x、%X | 按照 16 进制输出整数 |
%s、%S | 按照字符串方式输出 |
%c、%C | 按照字符符号输出 |
%n | 按照特定操作系统输出换行符 |
Java 修饰符
- 1.四种访问控制修饰符
修饰符 | 说明 |
---|---|
default | (即缺省,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法 |
private | 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类) |
public | 对所有类可见。使用对象:类、接口、变量、方法 |
protected | 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类) |
其他小常识
1.java具有三大平台:J2ME(嵌入式平台)、J2SE(标准平台)、J2EE(企业级平台)
2.java即是编译性有是解释性,它采用了基于国际标准的数据类型,java的数据类型仔任何机器上的都是一致的,不支持特定于具体硬件环境的数据类型,编译器所产生的可执行代码并不基于任何具体的硬件平台,而时基于一种抽象的机器——JVM虚拟机
3.java语言的运行机制是源程序编译成为字节码文件解释运行成为可执行文件
4.java 平台=java应用编程接口(API)+java虚拟机(JVM),java软件开发工具箱JDK,然后JDK和JVM合起来是java平台
5.java 程序分为两类一类是应用程序 Application 这是一个独立程序能够在任何具有 java解释器的计算机上运行,另一种是小程序 Applet 可以兼容的运行在 java 的 web 浏览器上
6.java的标志符由字母,数字,下划线,美元符组成,不能以数字开头,不能与关键字保留字同名,另外java区分大小写
7.Java 有没有 goto?
java 中的保留字,现在没有在 java 中使用
8.引用数据类型分为 class、interface、array、null
9.java的循环控制结构分为顺序语句、分支语句(if-else,switch-case)、循环语句(while,do-while,for)、转移语句(break,continue)
10.java的数组声明有两种声明方式一种是c语言风格的声明 数据类型 数组名[]而还有一种java风格的声明 数据类型[] 数组名 ,创建数组的格式 数组名=new 数据类型[数组大小],还可以声明和创建同时进行,可以使用循环初始化数组,数组具有length属性存放数组的长度。二维数组是一维数组的数组并且二维数组的每维长度可以是不同的
11.类体内包含三种成员,第一种是静态数据叫成员变量,第二种是动态的方法包括成员方法和构造方法,最后一种是隶属于该类的其他的类或接口,类是分类存放函数的容器
12.类的定义 :
类声明{
成员变量的声明;
成员方法的声明和实现:
隶属于该类的其他类或接口;
}
13.java 的成元变量表示类的状态和属性通过成员方法来操作。成员方法实现对类中成员变量的操作通过对象来调用
14.对象的创建和应用,首相要进行对像的声明:类的名字 对象的名字,之后进行初始化 :对象名字 = new 类的名字()
15.java 类的构造方法,构造方法的名字必须与类名相同,构造方法用于创建类的实例并对实例的成员变量进行初始化,构造方法在被 new 的时候调用
16.方法的重载关键在于方法的名字相同但是参数不同,参数的个数不同或者类型不同
17.java 的 this 可以理解为一个代词,代表当前对象,如果方法形参与对象成员变量同名,那么可以用 this 区分
18.在java 中由 static 修饰的变量是类变量,由对象共享这个变量也可以由类来引用,同理由 static 修饰的方法是类方法但是只能通过类访问只能处理static 属性的变量
19.java 类的继承使用 extends 来继承父类创建子类,子类继承父类访问权限为 public、protecte 变量和方法,不继承 private 的变量和方法所有的类都直接或者间接的继承了 java.lang.Object 类
20.在类的继承过程中,会出现成员变量的隐藏即子类变量与父类变量同名则父类变量被隐藏,还会出现方法重写即子类重新定义父类已有方法
21.java 的 super,this 表示当前对象而 super 表示父类对象,可以通过它来调用父类的构造方法,并切在子类构造方法中 super 必须是第一条构造方法
22.对象的赋值相容性和向上转型
23.abstract 抽象类,不能实例化即不能创建对象主要作为基类或父类存在,同时继承 abstract 类的子类要实现所有的 abstract 方法,由于抽象方法在抽象类中没有具体的方法实现,所以抽象方法必须被子类覆盖,抽象方法不能为 private,不能将构造方法、类成员方法声明为抽象方法,abstract 抽象方法不能和 static 同用,父类的非抽象方法可以被子类的抽象方法覆盖
24.最终类不能被继承所以abstact和final不能同用
25.interfance 接口是方法定义和常量值的集合,接口是特殊的抽象类,只包含常量和方法的定义而没有方法的实现,接口声明:
interface 接口名{
//常量和方法定义
}
26.接口使用的关键字是implements在类名后使用关键字implements+接口名,在使用时注意类体中必须实现接口定义的所有方法,接口中的方法和常量必须是public的,实现时方法头要一致,父类被继承时接口同时被继承,接口也可以被继承关键字是extends,接口一般表示功能类一般表示属性
27.java内部类就是在一个外部类的内部在定义一个类,内部类的特性可以随意使用外部类的成员变量包括私有,而不用生成外部类的对象,程序编译后会产生两个class文件,分别是Out.class和Out$In.class,必须先有外部类的对象才能生成内部类的作用就是为了访问外部类中的成员变量。
38.java内部匿名类即没有名字的内部类,使用匿名内部类还有一个前提必须继承一个父类或者实现一个接口。格式是:
new 类或者接口{
//类体
}
28.在 java 中所有的类都直接或者间接的继承 Object 类,在这个类中没有定义数据只定义了方法,这些方法意味着是所有 java 类中都具备的特性
29.数组类 Arrays 包含用来操作数组的各种方法
30.String 分为两大类字符串常量和字符串变量,它被当作对象来处理,其中的常用方法有 length(返回字符串的个数),indexOf 和 lastIndexOf 检索特定字符或字符串,查找成功返回匹配的字符位置,没有查找到返回-1。两个字符串之间可以使用+号来连接,charAt(int index )可以返回字符串中index位置上的字符,使用 substring 得到字符串中指定范围内的字符串,toLowerCase 将字符串的所有字母都转为小写,toUpperCase 将字符串中的字符转换成大写,equals 和 equalslgnoreCase 可以判断两个字符串是否相等前者区分大小写后者不需要
31.在java中基本数据类型不作为对象使用,但许多java方法需要对象作为参数所以java提供了一个方便的方法将基本数据类型包装成为对象,这些类对应了基本数据类型有:Boolean、Character、Byte、Short、Interger、Long、Float、Double。类型转换通过实现Number类中定义的抽象方法成为longValue、intValue等方法,并覆盖了Object类中定义的toString和equals方法。其中还有静态方法valueOf该方法创建一个新对象,并将它初始化为指定字符串表示的值
32.java 的 Math 类包含常用数学计算比如执行基本的数学运算的方法,如初等指数、对数、平方根、三角函数
33.java.util 包提供了一组集合相关的类库定义及实现,称为集合API
34.Vector 向量类能够用来存储数目不确定的元素,一个向量能跟据需要动态伸缩,通过 addElement 和 insertElement 来添加和插入元素,使用setElement和 removeElement 来修改和删除
35.java 的 List 接口,保证元素可以按照规定的顺序排列,可包含重复的元素,对元素可进行添加和删除操作,LinkedList 类允许将链表应用于堆栈、队列和双端队列,ArrayList 允许快速访问元素,适用于遍历
36.java 的 HashMap 类,哈西表的 Map 接口用来存放一组无序的 KeyValue例如学号和成绩,学号是 key 成绩是 value
37.java 的随机数类是 Random
38.java 的 GUI 使用框架、面板、简单用户界面 GUI 组件分为 AWT 和 Swing
39.布局管理器有 FlowLayout、GridLayout、BorderLayout
40.JComponent 类的常见组件Button、Checkbox、CheckboxGroup,choice,Label,List、Canvas、Scrollbar等。Container类则用来表示各种GUI组件的容器,add()添加一个组件,remove()删除一个组件,setLayout()设置布局,常见Container类有Frame、Panel、Applet等
41.顶层容器:Swing 顶层容器包括 JFrame、JDialog、JApplet 等,所有顶层类都提供获取和设置内窗格的方法,getContentPane()、setCOntentPane()
42.非顶层容器的主要目的是为了更好的管理布局和布置组件
43.框架 JFrame 是一个不被其他窗体所包含的独立的窗体,是容纳其他用户接口组件的基本单位,用来创建一个窗体。它的默认布局管理器是 BorderLayout。给 JFrame 添加组件其实是添加到了 JFrame 的内容窗格
44.布局管理提供了一个抽象,自动把用户界面映射到所有的窗口系统上,java的GUI组件放在容器中放置,这些组件由GUI组件由容器进行管理使用setLayout
45.FLowLayout 最简单的布局管理器,按添加组件的顺序由左到右将组件排列到容器中,一行排满后在排新的一行 BorderLayout 分为东西南北和中五个区域,Frame的缺省布局管理器,组件根据他们最适合的尺寸和在容器的位置来放置,南北组件可以水平扩展、东西组件能够竖直拉伸,中央组件可以水平也可以竖直扩展以填满空白空间。
GridLayout 根据构造方法定义的行数和列数以网格的形式排列组件,组件添加的顺序从左到右排列
46.面板组件是非顶层容器,可以将其他的控件放在JPanel中以组织一个子界面,通过嵌套使用JPanel,面板是分组放置用户界面组件的更下的容器,通常将组件放置在框架中也可以在一个面板中在放置面板,面板的Swing版是JPanel,默认情况下JPanel使用FlowLayout,给面板添加组件是直接添加到你面板的。
47.各种用户组件:JButton、JLable、JTextField、JTextArea、JComboBox、Jlist、JCheckBox、JRadioButton、JMenuBar、JMenu、JMenuItem、JCheckBoxMenuItem、JRadioButtonMenuItem、JScrollBar、JScrollPane、JTabbedPane等
JButton 组件表示一个命令按钮,一般用于完成某个特定功能
JLable 标签是简单的 Swing 组件,用于显示一行文本、一个图标
JTextField 用于显示和编辑单行文本
JPasswordField 允许用户在其中输入单行密码,但输入的字符会以 “*” 代替
JRdioButton 的默认图标是一个小圆圈被选中时圆圈内会有一个小圆点,在添加单选按钮时还应该设计 ButtonGroup 按钮组类,用于将多个单选按钮归于一组
JCheckBox 复选框可以用来实现多项选择,一个复选框选中与否的状态变化,不会影响其他复选框,通常情况复选框由一个方框和一个标签组成
48.菜单能够简化选择,广泛用于各种视窗应用程序,一个 JFrame 和一个JApplet 可以拥有一个 JMenuBar 用来存放菜单,可以看作是
存放菜单的上层组件,菜单由用户可选择菜单项组成。
菜单栏 JMenuBar 是窗口中,用于容纳菜单JMenu的容器,而菜单 JMenu 是若干个菜单项 JMenuItem 或子菜单的容器,能被添加到 JMenuBar 或其他JMenu 中,菜单项 JMenuItem 是组成菜单或快捷菜单的最小单位,不可分解完成特定功能。
49.java 的事件处理机制,事件可以定义为程序发生了某些事情的信号,事件源是在其上发生事件的 GUI 组件被称为事件的源对象,一个事件是事件类的实例,事件类的根类是 EventObject,事件对象包含与事件有关的一切属性,可以使用 EventObject 类中的实例方法 getSource() 获得事件的源对象
50.组件事件处理,先注册监听者对象通过方法 addActionLister() 事件源会触发事件 ActionEvent 事件,调用并传递参数实现接口监听者 actionPerformed()
51.JButton按钮事件单击按钮引发动作事件ActionEvent对应的监听接口是ActionListener对应的方法是actionPerformed
52.JTextField文本框事件的ActionEvent当按回车时产生,TextEvent当文本内容变化时产生,会响应文本域的ActionEvent事件
53.弹出对话框JDialog实例必须要依赖于某个窗口,消息对话框是有模式对话框,进行一个重要动作之前最好能弹出一个消息对话框
public static void showMessageDialog (Compotent parent , Object message )throws HeadlessException
54.鼠标事件 MouseEvent java 提供了处理鼠标事件的两个监听器接口MouseListener 和 MouseMotionListener,MouseListener 接口监听鼠标的按下松开进入退出和点击行为,MouseMotionListener 接口监听鼠标的移动和拖动行为。
当鼠标进入或离开组件的时候调用:mouseEntered()和mouseExit()
当鼠标按下或者松开时调用:mousePressed()和mouseReleased()
当按下鼠标并松开后调用:mouseClicked()
当不按按钮移动鼠标时调用:mouseMoved()
当按下按钮移动鼠标时调用:mouseDragged()
55.键盘接口是 KeyListener,java 在KeyEvent 中为许多键定义了常量包括功能键在内分别由 getKeyChar 和 getKeyCode 方法获得前者获得键字节码后者获得键编码
56.程序运行过程中,如果出现一个不可能执行的操作就会出现运行时的错误,运行时错误会引起异常,异常是程序运行过程中出现的事件,中断正常的程序控制流,没有异常处理代码的程序可能非正常结束引起严重的问题,java给程序员提供了处理运行时错误的功能称为异常处理
57.语法错:如果编译程序不通过,说明程序中存在语法错误,语法错误是由于违法语法规则产生的,java编译器能发现语法错误,并给出错误的位置和性质
语义错:编译通过了但程序在运行时因为出现错误而被迫终止运行,则称这种错误为异常,java解释器在运行时发现了异常,一旦发现将停止程序运行并给出异常的位置和性质,一些错误的发生不受程序本身所控制必须进行异常处理
逻辑错:程序编译通过也能正常运行,但运行结果与期望不符说明存在逻辑错误
58.java 的异常是 Throwable 子类的一个实例,Throwable 包含在 lang 中它的子类在不同的包中,与图形相关的错误包含在 awt 中,数值异常包含在 lang 中
59.java 的异常处理基于三种操作,声明异常、抛出异常、补货异常。通过try-catch 捕获异常,通过 throws Exception 声明异常,通过 throw new Excception 抛出异常
60.一般来说每一个方法都必须在方法头说明它可能遇到的异常类型,这一过程称为声明异常,在java中执行的语句必然属于某个方法,当一个语句引起错误时,含有这个语句的方法就会创建一个异常对象并将它传递给系统,异常对象包含有关异常的信息,包括它的类型和出错时程序的状态,这一过程称为抛出异常,一个方法抛出异常后,java运行系统开始寻找用来处理错误的代码,处理错误的代码称为异常处理器,从当前的方法开始,通过方法调用链向后搜索,查找这一代码,处理器必须抛出的异常类型相匹配,如果未发现异常处理器,程序就会终止。这个寻找异常处理器的过程称为捕获异常。
61.声明异常就是告诉编译器在执行方法的过程中可能出现的错误,在方法声明中使用关键字throws可以声明异常,在方法头中用关键字throws进行声明,但是声明了抛出异常的方法未必会真的抛出异常
62.抛出异常在声明了异常的方法中,如果出现异常,就可以抛出一个异常对象,throw new TheException,一个方法只能抛出在方法声明中声明的异常以及异常Error、RuntimeException和以上这些异常的子类
63.当调用一个显示声明异常的方法时必须使用try-catch块括住抛出异常的语句
64.若程序中有多个catch语句要注意它们的顺序,正确的做法是先捕获最特殊的异常(子类异常),之后逐渐一般化(父类异常),对一段可能抛出大量不同类型异常的程序来说逐个捕获处理异常可能会比较繁琐,而仅仅捕获它们父类的异常则会比较方便,实际使用中需要避免捕获最一般的异常使得用户往往不能确切的判断异常的具体类型,并作出相应的处理
65.有时不论异常是否出现或者是否被捕获,都希望执行某些目的的代码,java的finally子句可以用来达到这一个目的。
try{
//有异常抛出的函数调用
}
catch(捕获的异常 变量){
//异常处理
}
finally{
//无论有无异常抛出都执行这里的语句,主要用于资源的释放。
}
66.程序是一段静态的代码,而进程是程序的动态执行过程,线程是进程中单一顺序的控制流,多线程是计算机同时运行多个执行线程的能力。程序加载后进程会分为主线程和其他线程。
67.创建线程的方法一是继承Thread类,直接定义Thread类,覆写run方法在方法里定义要执行的具体操作,也可以实现Runnable接口,只定义了run接口在类定义时实现run方法。
68.Thread类的创建线程,Thread(Runnable target,String threadname )分别是线程目标对象和名称,主要方法是start():启动线程从新建状态进入就绪排队状态,run():定义线程操作需要定义run方法。步骤是继承Thread类之后覆写run方法,之后在创建用户线程实例调用start方法启动线程。
69.Runnable接口需要实现run方法将该类对象作为参数创建类Thread的对象调用start方法启动线程。
70.两种创建线程方式的比较,直接继承Thread类:该类具有Thread类声明的方法其对象本身就是线程对象,可以直接控制和操作但该方法仅适用于单继承,不适用于多继承,实习Runnable接口:该对象本身并不是线程对象,还需要与一个Thread线程对象绑定在一起,作为线程对象的目标对象来使用,适用于多重继承。
71.线程状态:
新建态(NEW):使用new创建一个线程对象后,即处于新建态,此时系统还未给他分配资源。
可运行态(RUNNABLE):处于新建态的线程调用start()方法后就可以进入克运行状态,等待被CPU调用。
阻塞态(BLOCKED)、等待态(WAITING)、定时等待(TIMD_WAITING):处于可运行态的线程因某种原因不能继续运行的状态,只当引起阻塞的原因被消除,或等待的条件满足时线程才转入可运行状态。
终止态(TERMINATED):线程正常或异常结束后即进入该状态。
72.在新建状态时通过start()进入RUNNABLE运行状态,可以通过sleep()、wait()、synchronized()、run()分别进入到等待状态、等待态、阻塞态、终止状态。
73.可以通过sleep()使线程暂时进入休眠,而setPriority()可以设置线程的优先级,MIN_PRIORITY代表最小优先级,NORM_PRIORITY代表普通优先级,MAX_PRIORITY代表最高优先级。
74.线程同步资源竞争,在多线程的环境中,可以同时做多件事情,但是如果两个或者多个线程同时使用同一个受限资源的时候就会出现资源访问的冲突,并发执行的交互线程之间存在与时间有关的错误,交互的并发线程执行时由于在不同时刻对同一个共享变量进行操作,线程之间相互影响、相互干扰,因此计算结果往往取决于这一组并发线程的相对速度,各种时间有关的错误就可能出现。
75.线程之间的竞争关系会出现两个问题:
1.死锁:一组线程如果都获得了部分资源,还想要得到其他线程所占用的资源,最终所有的线程将陷入死锁。
2.饥饿:一个线程由于其他线程总是优先于它而被无限期拖延。
76.线程互斥和临界区管理,线程互斥是解决线程间竞争关系的手段,指若干个线程要使用同一个共享资源时,任何时刻最多允许一个线程去使用,其他要使用该资源的线程必须等待,知道占有资源的线程释放该资源,临界资源则是共享变量代表的资源,临界区是并发线程中与共享变量有关的程序段。
77.操作系统对共享同一个变量的若干线程进入各自临界区的调度原则是:一次至多一个线程能够在它的临界区内,不能让一个线程无限期的留在它的临界区内,不能让一个线程无限的等待进入它的临界区,进入临界区的任意线程不能妨碍正等待进入的其他线程的进展。
78.java提供synchronized关键字用于声明一段程序为临界区,使线程对临界资源采用互斥使用方式,使用的两种方法一是使用synchronized声明一条语句为临界区,该语句称为同步语句,二是声明同步方法,同步方法的方法体是调用该方法成为临界区,互斥使用的是调用该方法的对象。
79.java的数据流:是连续单路流动数据的抽象,在java中所有的I/O都是数据流的形式进行处理的,流是一个形象的概念,当程序需要读取数据的时候,就开启一个通向数据源的流,这个数据源是可以是文件、内存或是网络连接。流采用了缓冲区技术对流进行读写操作的最小单位是字节,传输效率低下为提高传输效率可将一块内存空间设计成缓冲区暂存带传送的数据这样一次可读写若干字节,配备缓冲区的流称为缓冲流,在缓冲区写满之前若要进行数据传输,称为立即传输操作。
80.流的分类:按数据的传输方向分为输入流和输出流,按处理的单位分为字节流和字符流,按照功能的不同分为节点流和过滤流。
流的作用:从根本设计流的目的是为了使数据传输独立于相关设备,程序中需要根据待传输数据的不同时特性而使用不同的流,数据传输给指定设备后的操作由系统执行设备驱动程序完成,这样程序中不需要关注设备实现细节使得一个源程序能够用于多种输入输出设备,从而增强了程序的可重用性。
81.控制台的输入输出:交互式输入输出有两种类型,一种是从键盘进行简单的输入和以纯文本形式进行简单的输出,另一种是在图形环境中进行输入输出,前者称为是文本交互式输入输出,后者称为图形交互式输入输出。
82.文本输入输出都是使用类System,这个类包含了三个I/O对象,分别是System.in、System.out、System.err,用于从键盘输入、向屏幕输出和显示错误信息。同时java不直接支持键盘输入。
83.Scanner是SDK1.5新增的一个类,可以使用该类创建一个对象,然后对象调用方法读取用户在命令行输入的各种数据类型,这些方法都会造成堵塞等待用户进行输入。
84.字节流类每次读写8位二进制数,由于只能将数据以二进制的原始方式读写,不能分解、重组和理解这些数据,所以可以使之变换、恢复到原来有意义的状态,因此字节流又被称为二进制字节流,Inputstream和Outputstream类是抽象类,定义了字节流的基本输入输出操作,由于不能创建实例对象,故而派生出不同的子类,每个子类实现一种特殊的字节流操作。
85.字符流一次读写16位二进制数,并将其作为一个字符而不是二进制位来处理,Reader和Writer提供了基于字符的IO,基于字节的流无法正确处理基于十六位的unicode字符经常出现乱码,Reader和Writer在所有的IO操作上提供对unicode的支持。
86.文件字符输入输出流FileReader和FileWriter用于文本文件的输入输出处理,与文件字节输入输出流功能相似,但处理的基本单位是字符。
87.文件是存储在外部存储介质上的具有标识名的一组相关信息的集合,文件系统性提供按名存取实现文件的存储和检索,具有树形目录结构,文件分为二进制文件和文本文件,文件的存取方法有顺序存取、随机存取和索引存取。
88.File类主要描述系统中文件在磁盘中的存储情况,而File类的对象主要用来获取文件本身的信息,还可以利用File对象来对文件系统做一些查询和设置的动作,但不涉及对文件的读写操作,不管是文件还是目录在java中都以File的实例来表示。该类专门提供一个抽象,用于机器无关的方式进行处理大多数机器有关的、复杂的文件和路径名问题,File是文件的一个包装类。
89.文件流的创建因为必须使用文件数据流对磁盘进行读写,FileInputStream和FileOutputStream用于字节流,FileReader和FileWriter用于字符流。在FileInuputStream中实现了InputStream像read()之类的抽象方法,在FileOutuputStream中也是如此。