OO先导课——第二次上课
1.输入输出流
http://blog.csdn.net/hguisu/article/details/7418161
标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流等等,java中将输入输出抽象称为流,就好像水管,将两个容器连接起来。将数据冲外存中读取到内存中的称为输入流,将数据从内存写入外存中的称为输出流。
写过的处理输入输出的程序
1.控制台
Scanner scan = new Scanner(System.in); String s = scan.nextLine(); while(!s.equals("!")){//对象,不能用等 doer.getAns(s); s = scan.nextLine(); //System.out.println(s); }
2.文件输入
FileInputStream in = null; try { in = new FileInputStream("in.txt"); } catch (FileNotFoundException e) { // TODO Auto-generated catch block 编译器要求的catch e.printStackTrace(); } InputStreamReader inReader = null; try { inReader = new InputStreamReader(in, "UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } BufferedReader bufReader = new BufferedReader(inReader); Map doer = new Map(); String line = new String(); try { while((line = bufReader.readLine()) != null){ doer.init(line); } } catch (IOException e) { e.printStackTrace(); }
2.一个类不能代替main决定是否退出程序
在写类中的方法时,处理异常应该返回给控制台,而不应该直接让程序结束
3.接口
http://blog.csdn.net/liujun13579/article/details/7736116/
Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口定义的一般形式为:
[访问控制符]interface <接口名> {
类型标识符final 符号常量名n = 常数;
返回值类型 方法名([参数列表]);
…
}
名字和返回值要严格对应,返回值可以是多中类,使用object
写过的接口例子:
//接口 public interface Geometry { public double getVolume();//名字一样 public String toString(); } public class Box implements Geometry{ ....... }
方式:new->Interface
4.容器
http://www.cnblogs.com/airwindow/archive/2012/06/24/2560196.html
在书写程序的时候,我们常常需要对大量的对象引用进行管理。为了实现有效的归类管理,我们常常将同类的引用放置在同一数据容器中。
由于数据容器中存放了我们随时可能需要使用到的对象引用,所以一般的数据容器要都要能能提供方便的查询、遍历、修改等基本接口功能。
早期的OOP语言都通过数组的方式来实现对引用集的集中管理和维护。
但是数组方式下,数组大小需要提前被确定,并不允许修改大小,导致其作为一种灵活的数据容器的能力的功能大为下降。
用于不确定大小的情况
为了方便的利用数据容器进行引用的管理,Java中提供了丰富的数据容器以满足程序员多样化的需求。
JAVA的容器---List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
Collection: 存放独立元素的序列。
Map:存放key-value型的元素对。(这对于一些需要利用key查找value的程序十分的重要!,如词频统计)
LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。
HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。
HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。
5.字符串处理
http://www.cnblogs.com/oumyye/p/4227228.html
http://www.cnblogs.com/freeabyss/archive/2013/05/15/3187057.html
常用:
查找
String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法。
1、indexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置,当调用字符串的indexOf()方法时,会从当前字符串的开始位置搜索s的位置;如果没有检索到字符串s,该方法返回-1
2、lastIndexOf(String str)
该方法用于返回字符串最后一次出现的索引位置。当调用字符串的lastIndexOf()方法时,会从当前字符串的开始位置检索参数字符串str,并将最后一次出现str的索引位置返回。如果没有检索到字符串str,该方法返回-1.
如果lastIndexOf方法中的参数是空字符串"" ,,则返回的结果与length方法的返回结果相同。
获取子字符串
通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符串的下标进行截取,且应明确字符串下标是从0开始的。在字符串中空格占用一个索引位置。
1、substring(int beginIndex)
该方法返回的是从指定的索引位置开始截取知道该字符串结尾的子串。
2、substring(int beginIndex, int endIndex)
beginIndex : 开始截取子字符串的索引位置
endIndex:子字符串在整个字符串中的结束位置
判断字符串是否相等
1、equals(String otherstr) 一定不能写s1==s2!!!!
如果两个字符串具有相同的字符和长度,则使用equals()方法比较时,返回true。同时equals()方法比较时区分大小写。
2、equalsIgnoreCase(String otherstr)
equalsIgnoreCase()方法与equals()类型,不过在比较时忽略了大小写。
字符串分割
使用split()方法可以使字符串按指定的分隔字符或字符串对内容进行分割,并将分割后的结果存放在字符数组中。
1 str.split(String sign);
sign为分割字符串的分割符,也可以使用正则表达式。
没有统一的对字符串进行分割的符号,如果想定义多个分割符,可使用符号“|”。例如,“,|=”表示分割符分别为“,”和“=”。(注意转义!引号括号和和正则表达式冲突的都要加\)
1 str.split(String sign, in limit);
该方法可根据给定的分割符对字符串进行拆分,并限定拆分的次数。
写程序之前先找库!!!
6.好好自己测作业