Java私塾中级note


1.Eclipse常见快捷键
	Ctrl+D:删除当前行
	Ctrl+Alt+下方向键:复制当前行到下一行
	Ctrl+Alt+上方向键:复制当前行到上一行
	
	Alt+下方向键:当前行与下一行交互位置
	Alt+上方向键:当前行与上一行交互位置
	Alt+左方向键:上一个编辑的页面
	Alt+右方向键:下一个编辑的页面
	
	Ctrl+Q:定位到最后编辑的地方
	Ctrl+L:定位在某行
	Ctrl+M:最大化当前的Edit或View(再按则反之)
	Ctrl+/:注释当前行,再按则取消注释
	Ctrl+O:快速显示Outline
	Ctrl+T:快速显示当前类的继承结构
	Ctrl+W:关闭当前Editer
	Ctrl+K:参照选中的Word快速定位到下一个
	Ctrl+E:快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)
	
	Alt+Enter:显示当前选择的资源
	
	Shift+Enter:在当前行的下一行插入空行
	Shift+Ctrl+Enter:在当前行插入空行
	
	Ctrl+Shift+E:显示管理当前打开的所有的View管理器(可以选择关闭,激活等操作)
	Ctrl+Shift+F4:关闭所有打开的Editer
	
	Ctrl+Shift+X:把当前选中的文本全部变为大写
	Ctrl+Shift+Y:把当前选中的文本全部变为小写
	Ctrl+Shift+F:格式化当前代码
	
2.集合框架中个接口的特点
	(1)Collection接口是一组允许重复的对象。
	(2)Set接口继承Collection, 无序但不允许重复
	(3)List接口继承Collection, 有序但允许重复,并引入位置下标
	(4)Map接口既不继承Set也不继承Collection,是键值对
	
3.Collection接口用于表示任何对象或元素组。想要尽可能已常规方式处理一组元素时,就使用这一接口。

4.Iterator接口主要用来枚举集合中的元素

5.	Iterator it = col.iterator();
	while (it.hasNext())
	{
		int a = (Interator)it.next();
		System.out.println("a = " + a);
	}
	
	静态方法中不可以有 this 关键出现。
	
6.Set接口
	按照定义,Set接口继承Collection接口,而且它不允许集合中存在重复项。所有原始方法都是现成的,没有引入
	新方法。具体的Set实现类依赖添加的对象的equals()方法来检查等同性。
	
7.泛型(generic type或者generics)是对Java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。
	可以把类型参数看作是使用参数化类型时制定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符
	一样。
	在定义泛型类或声明泛型类的变量时,使用尖括号来制定形式参数,称为类型形参,在调用时传递的实际类型称为类
	型实参。类型形参与类型实参之间的关系类似与形式方法参数与实际方法参数之间的关系,只是类型参数表示类型,
	而不是表示值。示例如下:
	Map m = new HashMap();
	m.put("key", "bag");
	String s = m.get("key");
	
8.使用泛型的好处:
	类型安全
	消除强制类型转换
	潜在的性能收益
	
9.命名泛型参数
	对于常见的泛型模式,推荐的名称是:
	K -- 键,比如Map键
	V -- 值,比如List和Set的内容,或者Map中的值
	E -- 异常类, 或者集合元素类型
	T -- 泛型
	注意:当一个变量被声明为泛型时,只能被实例变量和方法调用,而不能被静态变量和方法调用。原因很简单:参数
	化的泛型是一些实例。静态成员是被类的实例和参数化的类所共享的,所以静态成员不应该有类型参数和它们关联。
		
10.FileInputStream和FileOutputStream
	要构造一个FileInputStream,所关联的文件必须是存在且可读的。如果你要构造一个FileOutputStream而输出
	的文件已经存在,则它将被覆盖。
	
11.Pipe的InputStream和PipedOutputStream
	管道流用来在线程间进行通信。一个线程的PipedInputStream对象从另一个线程的PipedOutputStream对象读取
	输入。要使管道流有用,必须有一个输入方和一个输出方。
	
12.IO编程的基本模型
	1.构建源和目的地的连接
	2.从源输出流
	3.目的地接受流
	4.关闭连接
	
13.Reader和Writer中最重要的版本是InputStreamReader和OutputStreamWriter。这些类用来作为字节流与
	Reader和Writer之间的接口。
	Reader和Writer都是字符(char)操作,而默认的都是字节(byte)操作。
	
14.在InputStreamReader和OutputStreamWriter的结尾链接BufferedReader和BufferedWriter是一个好主意
	记住对BufferedWriter使用flush()方法。
	
15.使用其它字符转换
	如果里需要从一个非本地(例如,从连接到一个不同类型的机器的网络连接读取)的字符编码读取输入,你可以像
	下面这个程序那样,使用显式的字符编码构造:
	ir = new InputStreamReader(System.in, "iso8859-1");
	对于已有的字符串,还可以这样进行编码转换:
	String s = new String(str.getBytes("ISO8859-1"), "GB2312");
	注意:
	(1)如果你通过网络连接读取字符,就应该使用这种形式。否则,你的程序会总是试图将所读取的字符当作本地
		表示来进行转换,而这并不总是正确的。ISO8859-1映射到ASCII的Latin-1编码模式。
	(2)用于表示中文的编码方式,常用的是“GB2312”或者“GBK”。
	
16.类中没有实现Serializable的对象不能保存或回复它们的状态。
	当一个对象被序列化时,只有对象的数据被保存;方法和构造函数不属于序列化流。如果一个数据变量是一个对象,
	那么这个对象的数据成员也会被序列化。
	因为有些对象类所表示的数据在不断地改变,所以它们不会被序列化,如java.io.FileInputStream、
	java.io.FileOutputStream和java.lang.Thread等流。
	
17.如果一个可序列化对象包含对某个不序列化元素的引用,那么整个序列化操作就会失败,而且会抛出一个
	NotSerializableException。
	如果不可序列化的应用被transient关键字进行了标记,那么对象仍可序列化,被标记的引用不进行序列化。
	
18.File类是IO中文件操作最常用的类。File类提供了独立于平台的方法来操作由本地文件系统维护的文件。然而
	它不允许你存取文件的内容。
	
	File类有一个欺骗性的名字---通常会认为它对付的是一个文件,但事情并非如此。它既代表一个特定文件的
	名字,也代表目录内一系列文件的名字。
	
19.线程和进程:
	(1)每个进程都有独立的代码和数据空间(进程上下文),进程切换的开销大
	(2)线程作为轻量的进程,同一线程可以共享代码和数据空间,但每个线程有独立的运行栈和程序计数器,因
		此线程切换的开销较小。
	(3)多进程---在操作系统中能同事运行多个任务(程序),也称多任务。
	(4)多线程---在同一应用程序中有多个顺序流同时执行。
	
20.每个线程都有自己的优先级,通常优先级高的线程将优先于优先级低的线程执行。线程的优先级用数字来表示,范围
	从1到10,主线程的缺省优先级是5.
	可以使用Thread类的下述方法获得或设置线程对象的优先级:
	public final int getPriority();
	public final void setPriority(int newPriority);
	注意:优先级高的线程只是表示获得运行的机会比较高,并不是优先级高的就一定要比优先级低的先运行,还是会出
	现交叉执行的。
	所有可运行线程根据优先级保存在池中。当一个被阻塞的线程变成可运行时,它会被放回相应的可运行池。优先级高
	的非空池中的线程会得到处理机时间(被运行)
	
21.在Java中,线程是抢占式的,但并不一定是分时的
	抢占式调度模型是指可能有多个线程是可运行的,但只有一个线程在实际运行。这个线程会一直运行,直至它不再
	是可运行的,或者另一个具有更高优先级的线程成为可运行。对于后面一种情形,低优先级线程被高优先级线程抢占
	了运行的机会。
	
22.在下面集中情况下,当前线程会放弃CPU,进入阻塞状态:
	(1)线程调用了yield(), suspend()或sleep()方法主动放弃;
	(2)由于当前线程进行了I/O访问,外存读写,等待用户输入等操作,导致线程阻塞;
	(3)为等候一个条件变量,线程调用wait()方法;
	(4)抢先式系统下,有高优先级的线程参与调度;时间片方式下,当前时间片用完,有同优先级的线程参与调度。

23.临界资源
	多个线程之间共享的数据称为共享资源或临界资源。

24.互斥锁
	在Java语言中,为保证共享数据操作的完整性,引入了对象互斥锁的概念。每个对象都对应于一个可称为“互斥锁”
	的标记,这个标记用来保证在任一时刻只能有一个线程访问该对象。

25.关键字 synchronized
	Java对象默认也是可以被多线程共用的,在需要时才启动“互斥”机制。当某个对象用 synchronized 修饰时,表明
	该对象已启动“互斥”机制,在任一时刻只能有一个线程访问。即使该线程出现阻塞,该对象的被锁定状态也不会解
	除,其他线程任不能访问该对象。

26.synchronized 关键字的使用方式有两种
	(1)用在对象前面限制一段代码的执行
	(2)用在方法声明中,表示整个方法为同步方法。

27.public void push(char c)
   {
	   synchronized(this)
	   {
		   data[idx] = c;
		   idx ++;
	   }
   }
	当线程运行到 synchronized 语句,它检查作为参数传递的对象,并在继续执行之前试图从对象获得锁标志。

28.避免死锁的一个通用的经验法则是:决定获取锁的次序丙始终遵照这个次序。按照与获取相反的次序释放锁。

29.为了让线程对一个对象调用wait()或notify(),线程必须锁定那个特定的对象。也就是说,只能在它们被调
	用的实例的同步块内使用wait()和notify()

30.wait()和sleep()最大的区别在于:wait()会释放对象锁,而sleep()不会释放对象锁。

31.TCP--面向连接的可靠数据传输协议;TCP重发一切没有收到的数据,进行数据内容准确性检查并保证数据
	分组的正确顺序。TCP保证所传送的信息是正确的。

32.IP协议是网际层的主要协议,支持网间互连的数据报通信。它提供的主要功能有:无连接数据报传送、数据报
	路由选择和差错控制。IP负责信息的实际传送。

33.HTTP协议(超文本传输协议,HyperText Transfer Protocol)
	HTTP协议定义了信息如何被格式化、如何被传输,以及在各种命令下服务器和浏览器所采取的响应。默认端口
	号是80.

34.URL(统一资源定位器,Uniform Resource Locator)
	URL用于表示Internet上资源的地址。URL一般由协议名、资源所在的主机名和资源名等部分组成。
	URL还可以包含端口号来指定与远端主机相连接的端口。如果不指定端口号,则使用默认值。例如http协议的
	默认端口号是80.显示指定端口号的URL形式如下:http://www.sun.com:8888/

35.URI(通用资源标识,又叫统一资源标识符,Uniform Resource Identifier)
	用于唯一的标识元素或属性的数字或名称。URI包括统一资源名称(URN)和统一资源定位器(URL)。

36.网络编程的四个基本步骤
	(1)创建socket
	(2)打开连接到socket的输入/输出流
	(3)按照一定的协议对socket进行读/写操作
	(4)关闭socket

37.socket是指在一个特定编程模型下,进程间通信链路的端点。一个socket包括两个流:一个输入流和
	一个输出流。如果一个进程要通过网络向另一个进程发送数据,只需要简单地写入与socket相关联
	的输出流。一个进程通过从与socket相关联的输入流来读取另一个进程所写的数据。

38.套接字类型的说明
	TCP和UDP扮演相同角色,但做法不同。两者都接受传输协议数据报并将其内容向前传送到表示层。
	TCP把消息分解成数据报(datagrams)并在接受端以正确的顺序把它们重新装配起来。TCP还处理对
	遗失数据报的重传请求。有了TCP,位于上层的层要担心的事情就少多了。UDP不提供装配和重传请求
	这些功能。位于上层的层必须确保消息是完整的并且是以正确的顺序装配的。
	一般而言,UDP强加给你的应用程序的性能开销更小,但只在应用程序不会突然交换大量数据并且不必
	装配大量数据报以完成一条消息的时候。否则,TCP才是最简单或许也是最高效的选择。

40.TCP和UDP区别
	(1)TCP是面向连接的。UDP是非连接的
	(2)UDP开销比较小

41.反射(Reflection)是java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,或者
	说自审,并能直接操作程序的内部属性和方法。
posted @ 2014-12-15 13:28  Coder816  阅读(122)  评论(0编辑  收藏  举报