JAVASE
字符串
由字母、数字、下划线组成的一串字符。JavaApi中提供了3个类操作字符,常用的是String,还有StringBuffer与StringBuilder,对字符实现增、删、修改、查询、替换、索引等操作,具体操作需查看api帮助文档
包装类
1、包装类共包含8个,即基本类型转为的包装类。由于基本类型只保存在栈中,未保存在内存中,若需保存在内存中,则需将基本类型转换为包装类。包装分为转换与拆包
int a = 5;
Integer b = a;
system.out.print(b.value());
2、万物皆对象
一切类默认都是继承Object类,则自定义的类需重写toString()与equle()方法
文件操作
目录也是一个文件。对文件操作的工具有FIle,RAF(RandomAccessFile),该类主要是对文件的验证,将内容输入或读取文件中的内容,具体使用详见api帮助文档
流(Stream、Reader/Writer)
1、每个高级流必须有一个低级流来支撑(水龙头与水)
2、对于输入(Input)和输出(Output),例如客户端向服务端发送文字,即客户端为输出端(Output),服务端为输入端(Input)
3、在本章中主要介绍两大方向的流(字节与字符流)
1)字节流:
是以单个字节进行输入和输出。字节流都是以Stream结尾,其中常用的文件操作流中低级流为FileInputStream、FileOutputStream,高级流为BufferedInputStream、BufferedOutputStream,对象操作流ObjectInputStream、OjectOutputStream,具体使用方法详见api帮助文档
2)字符流:
是以单个字符进行输入与输出的操作。字符流都是以Reader/Writer结尾。常用流为:规定其传输的格式InputStreamReader、OutputStreamWriter,加速以块读写:BufferedReader、BufferedWriter,输出流PrintWriter,具体使用方式详见api帮助手册
网络Socket
Socket的功能是提供连接。常用的为Socket与ServerSocket。例如:客户端与服务端,服务端使用ServerSocket的构造方法打开一个端口,使用accept方法进行等待客户端连接(accept的返回值类型为socket),客户端使用Socket的构造方法进行将ip和port输入进行连接,若链接不成功,则将抛出异常。
进程与线程(Thread)
1、工作原理
线程是并发运行的,系统将时间划分为若干个时间片段,尽可能均匀的分配给每一个进程。获得时间片的进程被cpu执行,其他线程则处于等待状态。则微观上是走走停停,宏观上是都在运行
2、每个进程至少有一个线程。
3、创建线程的方式有两种:
1)继承Thread类,重写run方法。由于考虑到程序的侵入性,则不使用该方式创建
2)实现Runnable接口,重写run方法(重点)
class test{
public static void main(String[] args){
A a = new A();
Thread th = new Thread(a);
th.start();
}
}
class A implements Runnable{
public void run(){
system.out.print("hello world");
}
}
3、在线程中还有一些问题需要考虑:同步锁(join)、异步锁(synchronized),等待时间(sleep),守护线程(Daemon):若该进程停止,则与改进程相关的线程全部停止
集合(Collection)
1、collection中常用的几个类,详见下图
2、List存放的是有序的,可重复的数据,Set存放的是无序的,不可重复的数据。由于List的特点,则ArrayList可以与数组进行转换操作。ArrayList是数组连接(查询快,添加、删除慢),LinkedList是链式连接(添加、删除块,查询慢)
3、操作
1)List、Set集合中具有添加(add)、移除(remove)、修改(set)、查询(get)的元素操作,Queue/Deque队列具有添加(offer)、取出(poll)的元素操作,stack具有添加(push)、取出(pop)的元素操作
2)注意
若普通操作,则使用List集合即可,若具有必须将数据有序存放,则使用队列(先进先出),若具有前进后退操作则使用栈(stack,先进后出),尽量使用List
4、比较(Compara)
1)包装类、String都已经实现了Comparable接口,即可使用Collections.sort比较即可;关于String比较的规则,英文根据Uncode值进行比较,中文比较不了
2)若自定义的类进行比较,则具有两种方式:
- 自定义的类实现Comparable接口,重写ComparTo方法。(尽量不使用该方式,考虑程序的侵入性)
- 匿名内部类,new Comparator对象,然后重写compara方法即可(尽量使用该方式)
List<String> z = new ArrayList<String>();
z.add("ome234");
z.add("two");
z.add("three");
z.add("four");
z.add("five");
System.out.println(z);
Collections.sort(z,new Comparator<String>() {
public int compare(String o1,String o2) {
return o1.length()-o2.length();
}
});
System.out.println(z);
5、并发安全
集合中使用synchronized进行加锁(collections.synchronizedList()),若为队列,则使用SlockingQueue/SlockingDeque进行加锁约束安全
由于考虑程序的侵入性与扩展性,尽量不要使用继承的方式来实现该功能或该类;上面的一些类中的方法未展开说明,使用过程中请查看api帮助手册
(望各位业界人士提出宝贵意见)