[Java] Learning_Notes for J2SE

Java Learning             --others :  数组模拟链表 - 马士兵教的
--------------------------------
Java 
	主讲教师 : 马士兵
	
课程内容
	* Java 基础
		* 语法基础
		* OO
		* Exception
		* Array
		* 基础类 - 常用类
		* I / O Stream
		* Collection / Generic
		* Thread
		* TCP / UDP
		* GUI
		* Meta Data
		* Regular Expression
		
Java 体系
	* JDK初步
		* 其他方向的基础
	* Java Web编程
		* 针对Web程序
	* J2EE
		* 企业级应用
	* J2ME
		* 移动设备
	* 移动增值
		* SP运营商
		
教学方法
	* 巨无霸式的教学
		* 理论
		* 举例
		* 理论回顾
		* 练习
		* 讲解
  * 注重结合工程实践
  * 注重传授自学能力  
		
能力的三个层次 {
	* 知识
		* 学习前人的知识
	* 解决问题的方法
		* 灵活运用学到的知识
	* 解决问题的思路
		* 创造解决问题的方法
}

学习方法 {
	* 学习本讲义
	* 完成习题
	* 运用自学的能力
			* 读
			* 写
			* 查
			* 背
}

预备知识 {
	* 英语
	* 计算机基本操作
}

其他
	* 企业与学校之间的区别
		* 时限
		* 实用为主
	* 浩瀚知识的分类
		* 实际开发中经常使用的(牢牢掌握)
		* 不经常使用用时就能查得到的(了解)
		* 八辈子用不着一回的(运用自己的能力去查)
		
总结
	* 乐观的努力
	* 眼光要高远
	* 脚步要踏实

错误的做法(教师)
	* 讲得多,练得少
	* 只灌输知识点,没有串联
	* 不培养自学能力
	* 给答案不给思路
	* 项目太简单
	* 项目太复杂
	* 项目太少
	* 注重授课技巧,不注重基本功
	* 重管理技巧,轻开发技巧
	* 知识太陈旧
错误的做法 (学生)
* 只看不练
* 只听不练
* 钻到细节中拔不出来(初学者)
		* 修正 : 明确目标,心无旁骛
		  学校 : 集中所有精力,教授实用知识
* 对计算机心存敬畏
		* 不敢动(装卸软件, 安装系统)
		* 不敢调试bug

尚学堂 手把手教程
--------------------------------
J2SE 之 JAVA概述
想学习J2ME, JSP / Servlet, J2EE 吗? * 请打好基础 - J2SE
* 内容
	* 计算机语言的历史以及Java语言的历史地位
	* Java 自身的发展史
	* Java体系
	* Java的特点
	* Java的运行机制
	* Java运行环境的安装与配置
	* 第一个程序HelloWorld
* 内容
	* JAVA概述
	* JAVA语言基础
	* 面向对象编程
	* JAVA异常处理机制
	* 数组
	* JAVA常用类
	* JAVA容器类
	* JAVA流技术
	* JAVA多线程机制
	* JAVA网络编程
	* GUI编程
* 计算机语言发展史及Java的历史地位
	* 第一代语言
		* 打孔机 -- 纯机器语言
	* 第二代语言
		* 汇编
	* 第三代语言
		* C, Pascal, Fortran 面向过程的语言
		* C++面向过程/面向对象
		* Java跨平台的纯面向对象的语言
		* .NET跨平台的语言
		
		计算机语言朝着人类易于理解的方向发展
* Java发展史与java体系
	* 95年, Sun发布JDK1.0
	* 98年,JDL1.2, 更名为Java2
	* 后续JDK 1.3, 1.4
	* 目前JDK 1.5, 更名为Java5.0
	* 我们使用5.0, 1.6, 1.7
	
	j2se --> {
				1, java web {
						* j2ee  95% 以上
						* 移动增值
					}
				2, j2me
	}
* Java语言的特点
	* 一种面向对象的语言
	* 一种平台无关的语言, 提供程序运行的解释环境
	* 一种健壮的语言, 吸收了C/C++语言的优点, 但去掉了其影响程序健壮性的部
	  分(如: 指针, 内存的申请与释放等)。

* Java程序运行机制及运行过程
	* Java两种核心机制:
		* Java 虚拟机 (JVM)
		* 垃圾收集机制(Garbage collection)
 * 核心机制之Java虚拟机 {
	 * java虚拟机可以理解成一个以字节码为机器指令的CPU
	 * 对于不同的运行平台, 有不同的虚拟机
	 * Java虚拟机机制屏蔽了底层运行平台的差别, 实现了"一次编译, 随处运行"。
	                                     -- Jvm for Unix
	 *.java -编译-> *.class -执行-> JVM- -- Jvm for Windos
	                                     -- Jvm for otherPlatform
	   Java  --   解释性的语言
	   C/C++ --   编译型的语言
 }
 * 核心机制之垃圾收集 {
 	* 不再使用的内存空间应回收 - 垃圾回收
 	* 在 C/C++ 等语言中, 由程序员负责回收无用内存
 	* Java语言消除了程序员回收无用内存空间的责任; 它提供一种系统级线程跟踪存
 	  储空间的分配情况。并在JVM的空闲时, 检查并释放那些可被释放的存储器空间。
 	* 垃圾收集在Java程序运行过程中自动进行, 程序员无法精确控制和干预。
 * J2SDK & JRE
      -  Software Development Kit (软件开发包)
      -  Java Runtime Environment
      开发需要 JDK
      用户只需 JRE
 * Java开发环境的下载 安装 配置
 	* 配置 Java开发环境步骤 (WindowsXP)
 	* 下载 并安装最新版本的J2SDK
 	* 设置 Windows环境变量。
 	* 选择 合适的文本编辑器或使用集成开发环境
 	-------------------------------
 	* 下载 http://java.sun.com
 	* 安装
 	* 配置 path & classpath
 			* path : windows系统执行命令时要搜寻的路径
 			* classpath : java在编译和运行时要找的class所在的路径
 	* 验证                       HelloWorld.java
 		* java  运行 java 程序
 		* javac 编译 java 程序
 	  
 	. 代表当前路径
 * Java Application初步
 	* Java源文件以“java”为扩展名。源文件的基本组成部分是类 (class), 如本例中的 HelloWorld 类
 	* 一个源文件中最多只能有一个public类. 其它类的个数不限,如果源文件 文件包含一个public类,
 		它必需按该类名命名
  * Java 应用程序的入口是 main() 方法
  * Java语言严格区分大小写
  * Java方法有一条条语句构成, 每个语句以分号结束
  * Java语言有三种注释方式: { // 单行注释, /* 多行注释 */ 
  	                          /**
  	                          * 用于多行注释,并且可以被doc工具解析
  	                          */
   }
 * 总结第一个程序 {
 	* 构建程序自己的环境
 	* 运用copy
 	* 掌握 path 和 classpath
 	* 熟悉常见的错误
 	* 熟悉java程序简单规则
 	* 熟悉java程序的编译与运行
 }
 * UltraEdit遗留问题
 补充 {
 * 先谈学习方法 
 	* 你怎么去了解一台发动机?
 	* 你怎么去了解一座高山? 怎么去了解你的校园?
 	* 你怎么去画一树寒梅
 	
 	* 先学脉络,再学细节,这是规律,请务必尊重学习规律。
 	
 	* 养成自动学习的习惯
 	* 学技术 google 谷老师非常好,不姓 百
 	* 建议你的 JDK 装在不带空格的目录里面!
 	
 	path
 		* 操作系统用 path 的路径来找执行程序
 		* javac/java 找不到路径的解决方式
 		* 用户变量 / 系统变量
 		
 	* FAQ:
 		* 系统装了多个版本的JDK
 		* ping 找不到路径
 	* 命令收集 : {
 			cd \
 			notepad
 			echo %path%
 			set path=d:\java\java-app\jdk1.5\bin;%path%
 			java -verbose HelloWorld
 		}
 	* 做任何事情 {
 			听别人意见的时候, 先做自己的努力
 	* classpath {
 		* javac/java 用来查找类
 		* “.” 代表当前路径
 		* jar文件 = 路径(文件夹) 
 		
 		* FAQ:
 			* 2 projects, 用同一个类的不同版本
 			
 * 总结
 	* 抓住脉络,要事为先
 	* 主动学习, 培养能力
 		* 动手动手,动手动手
 * Next:
 	* OO 思维
 	* 要求:
 		* 了解面向对象的概念
 			* 类,对象,属性,方法
 			* 预习第三章
 			* 下载eclipse
 	* 时间:
 		* http://www.bjsxt.com 
 * 常见Java 开发环境
 	* 编辑器
 		* UltraEdit
 		* EditPlus
 	* 集成开发环境 (IDE):
 		* JBuilder (http://www.borland.com)
 		* Eclipse  (http://www.eclipse.org)
 		* Sun One Studio (http://java.sun.com)
 		* WSAD (http://www.ibm.com)
 * 内容
 	* 标识符
 	* 关键字
 	* Java 基本数据类型
 	* 运算符
 	* 表达式和语句
 	* 分支
 	* 循环
 	* 方法
 	* 变量的作用域
 	* 递归调用
 	
 变量名称
 
  * 在方法体内 声明的变量 叫做 局部变量
  * 在方法体外, 类体内声明的变量叫做 成员变量
  
 * 成员变量 {
 	
 		* 成员变量可以是Java语言中任何一种数据类型(包括基本类型和引用类型)
 		
 		* 在定义成员变量时可以对其初始化,如果不对其初始化                                                      
 		
 		* 成员变量的作用范围为整个类体
 	}
  
  Java数据类型的划分 {
  	                                      -- 整数类型 (byte, short, int, long)
  	                          -- 数值型 --   
  	                         |            -- 浮点类型 (float, double)
  	           --基本数据类型 -- 字符型 (char)
  	          |              |
  	          |               -- 布尔型 (boolean)
  	数据类型 --                         
  	          |               -- 类 (class)
  	          |              |
  	           --引用数据类型 -- 接口 (interface)
  	                         |
  	                          -- 数组 (array)
  	                          
    Java 中定义了4类8种基本数据类型
    boolean 类型只允许取值 true / false , 不可以用 0 或 非0 替代。
    char    java 字符采用 Unicode 编码 (全球语言统一编码), 每个字符占两个字节
  }
  J2SE 之 面向对象编程
  * 编程语言的发展
  * 面向过程的设计思想
  * 面向对象的设计思想
  * 对象和类的概念
  * 类之间的关系
  * 对象和引用
  * Java 类的定义
  * 构造函数
  * 对象的创建和使用
  * this 关键字
  * static 关键字
  * package 和 import 语句
  * 访问控制
  * 类的继承
  * 方法的重写
  * final 关键字
  * Object类
  * 对象转型
  * 多态
  * 抽象类
  * 接口
  ---------
  类 (对象) 之间的关系 {
  	1, 关联关系  -- 学院 - 研究生 - 教授
  	2, 继承关系  -- 运动员 { 游泳运动员,球类运动员, 射击运动员 }
  	3, 聚合关系  -- 聚集 - 球队{队长,队员}  组合 - 人-{ 头, 身体, 四肢 }
  	4, 实现关系  -- 
  }
  * 对象是Java程序的核心, 在Java中万事万物皆 “对象”
  
  * 对象可以看成是静态属性 (成员变量) 和 动态属性(方法) 的封装体
  
  * 类是用来创建同一类型的对象的 “模板”, 在一个类中定义了该类对象所应具有的成员变量以及方法
  
  ----------------------------------------------------------
  我们的语言    ->   成员变量 = 属性   方法 = 函数
  ----------------------------------------------------------
  为什么用对象?
  	* 面向对象的编程 -- 一组对象互相配合通过沟通完成特定功能
  		* 汇编是对机器语言的抽象
  		* 面向过程的语言是对汇编的抽象
  		* 对象更加符合对于现实问题的抽象
  	* 对象都有对外服务的接口
  		* 通过继承可以复用
  	* 对象隐藏内部服务的实现
  		* 通过聚合可以复用
  	* 面向对象更加容易使我们达到这些年苦苦追求的境界
  		* Reusable, Extensibility
  	* 组件 -- 比对象更高层次上的抽象 (二进制级别)
  		* EJB, Web Service, CORBA, COM ...
  * 命名规则 {
  	* 类名首字母大写
  	* 变量名和方法名的首字母小写
  	* 运用驼峰标识
  }
  * 对象的创建和使用 {
  	* 必须使用 new 关键字创建对象
  	* 使用对象引用
  	* 同一类的每个对象共享该类的方法
  		* 非静态方法是针对每个对象进行调用
  	}
  * this 关键字 {
  	* 在类的方法定义中使用的 this 关键字代表使用该方法的对象的引用
  	* 在必须指出当前使用方法的对象是谁时要使用this
  	* 有时使用this可以处理方法中成员变量和参数重名的情况。
  	* this可以看作是一个变量,它的值是当前对象的引用
  }
  * static 关键字 {
  	* 在类中,用static声明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化。
  	* 用 static 声明的方法为静态方法,在调用该方法时,不会将对象的引用传递给它,所以在static方法
  		中不可访问非static成员。
  		* 静态方法不再是针对于某个对象调用, 所以不能访问非静态成员。
  	* 可以通过对象引用或类名访问静态成员。
  }
  * package / import
  * J2SDK 中主要的包介绍
  	* java.lang - 包含一些 java 语言的核心类
  	* java,awt  - 包含了构成抽象窗口工具集 (abstract window tookit) 的多个类
  	* java.applet-包含applet运行所需的一些类
  	* java.net  - 包含执行与网络相关的操作的类
  	* java.io   - 包含能提供多种输入/输出功能的类
  	* java.util - 包含一些实用工具类.
  * 类的继承与权限控制
  * 方法的重写
  * super 关键字
  * Object类
  	* Object类是所有Java类的根基类
  * toString方法
  	* Object类中定义有 public String toString() 方法,其返回值是 String 类型, 描述当前对象的有关信息
  * 在进行 String 与其他类型数据的连接操作时 (如:
  	System.out.println("info" + person), 将自动调用该对象类的 tiString() 方法
  * 可以根据需要在用户自定义类型中重写 toString() 方法
  
  * equals 方法
  	* Object 类中定义有:
  		* public boolean equals(Object obj) 方法
  			* 提供对象是否 “相等” 的逻辑
  		* Object的 equals 方法定义为:x.equals(y) 当 x 和 y 是同一对象的应用
  			时返回 true 否则返回  false
  		* J2SDk 提供的一些类,如 String, Date等,重写了 Object 的 equals 方法,调用
  			这些类的 equals 方法, x.equals(y), 当 x 和 y 所引用的对象是同一类对象且
  			属性内容相等时 (并不一定是相同对象), 返回 true 否则返回 false.
  		* 可以根据需要在用户自定义类型中重写 equals 方法。
  			
  * 对象转型
  * 动态绑定 和 多态
  * 抽象类
  * Final 关键字
  * 接口 - 特殊的抽象类 {
  					只包含常量和方法的定义
 * 第六章 常用类 {
 		* 字符串相关类 (String, StringBuffer)
 		* 基本数据类型包装类
 		* Math类
 		* File类
 		* 枚举类
 		
 		* String 类
 			* java.lang.String 类代表 不可变 的字符序列
 		* StringBuffer 类
 			* java.lang.StringBuffer 代表可变的字符序列
 		* 基本数据类型包装类
 			* 包装类(如:Integer, Double)
 			* java.lang.Integer
 		* Math 类
 			java.lang.Math
 		* File 类
 			java.lang.File
 		* 补充 java.lang.Enum
 		
 		总结
 			* String 
 				* 正则表达式
 			* 包装类
 			* Math, File, 枚举
 			
 			ile类
 		* 枚举类
 		
 		* String 类
 			* java.lang.String 类代表 不可变 的字符序列
 		* StringBuffer 类
 			* java.lang.StringBuffer 代表可变的字符序列
 		* 基本数据类型包装类
 			* 包装类(如:Integer, Double)
 			* java.lang.Integer
 		* Math 类
 			java.lang.Math
 		* File 类
 			java.lang.File
 		* 补充 java.lang.Enum
 		
 		总结
 			* String 
 				* 正则表达式
 			* 包装类
 			* Math, File, 枚举
 	}
 	第七章 容器 {
 		* 容器的概念
 		* 容器API
 		* Collection 接口
 		* Iterator 接口
 		* 增强的 for 循环
 		* Set 接口
 		* List接口 和 Comparable接口
 		* Collections 类
 		* Map 接口
 		* 自动打包 / 解包
 		* 泛型 (JDK1.5新增)
 		-----
 		* J2SDk 所提供的容器位于 java.util 包内。
 		* 容器API的类图如下图所示:
 			
 			   <<interface>>
 			    Collection
 			                                      <<interface>>
 <<interface>>      <<interface>>                 ^
      Set                List                     |
       ^                  ^                       |
       |           _______|______                 |
 		 HashSet   LinkedList    ArrayList          HashMap
 		 
 		* Collection 接口 -- 定义了存取一组对象的方法, 其子接口 Set 和 List 分别定
 			义了存储方式。
 			
 			* Set 中的数据对象没有顺序且不可以重复。
 			* List中的数据对象有顺序且可以重复
 			
 		* Map 接口定义了存储 “键 (key) -- 值 (value) 映射"对"的方法。
 		
 		Collection 方法举例
 			* 容器类对象在调用 remove, contains 等方法时需要比较对象是否相等
 				这会涉及到对象类型的 equals 方法和 hashCode 方法,对于自定义的
 				类型,需要要重写 equals 和 hashCode 方法以实现自定义的对象相等
 				规则。
 				* 注意 : 相等的对象应该具有相等的 hashcodes
 			* ---
 			
第二遍学习java
**************************
*** 第一,二章 配置, 基础 ***  手中无剑, 心中有剑
	分析设计这个东西 : (1) 有哪些类
			               (2) 类的属性和方法
			               (3) 类与类之间的关系
	一个源文件只能有一个 public class
*******************************************************************************
	const(C++) = final(JAVA)   变量本质 <-> 一小格
第二章 就、java 数据类型
    java里所有的数字都是有符号的。
	byte   1           int   4
	short  2           long  8
	java语言的数据类型在任何操作系统所占用的大小一样。
	十六进制 0x12 或者 OX12
	java 整数默认为int, 声明long类型,后面加 l / L.
	Java 常量 整型常量,字符常量,字符串常量...
 格式 : (1) 要让别人看得清楚 (2) 要让别人看得舒服
  浮点类型 : {
    float 4 
	double 8
	十进制 :     3.14    314.0   .314
	科学记数法 : 3.14e2  3.14E2  100E-2
	float 放入 double 中会出错, int 放入 long 中不会出错.解释麻烦。
    float精度7位,double精度15位
  }
  * boolean 类型不可以转换为其他数据类型
  * 整形,字符型,浮点型的数据在混合运算中相互转换,转换时遵循原则 :
        (1) 容量小的类型自动转换为容量大的数据类型
		     * byte, short, char -> int -> long -> float -> double
			 * byte, short, char 之间不会互相转换,它们三者在计算的时候,首先会转为int
		(2) 容量大的要转换为容量小的,要加强制转换,但可能造成精度降低和溢出。
		(3) 有多种数据类型的数据混合运算时,系统首先全转为容量最大的那个类型,然后再进行计算。
		(4) 实数常量默认为 double, 整数常量默认为 int
	可以将 int 赋值给 short 等变量,但是不要超过范围。
 (6) 运算符 {
   *1 字符串连接符 '+' 也是算术加法。
   *2 "+" 运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转换为字符串再连接。
   *3 当进行打印时,无论任何类型,都自动转为字符串进行打印 System.out.println(c);
  }
 (7) if / else分支, switch, ...while, for, do {} while
    *1  switch () {
	       case xx :
		      ...default : 
		} 小心case穿透,多个case可以合并,default可以省略,java中的switch只能探测int类型。
 第二章总结 : (1)* 标识符 (2)* 关键字 (3)* 基本数据类型 (4)* 运算符 (5)* 表达式和语句 
               (6)* 分支 (7)* 循环 (8)* 方法 (9)* 变量的作用域 (10)* 递归调用
*******************************************************************************************	
***** —————————————————— ****
****   第五章  -  数组   ****
****  —————————————————— ****  	
  * 四维空间
  int[] a, int a[];
  内存分析 - 知道了内存你就明白了一切!
  本来无一物 : 何处装数组。
  * 动态初始化
  * 静态初始化 int a[] = {3, 9, 8}; 内部过程屏蔽掉啦!
  
  ipconfig
  ipconfig -all  这里 -all 就是命令行参数。
  
  基础类型一般分配在栈上面!包装类,用于把基础类型包装成对象,则分配在堆上了。
  例如 类 Double, Integer
  
  约瑟夫环 - 面向过程 和 面向对象 写法
  
  另一个比较精巧的算法 : 用数组来模拟链表
  	算法和逻辑思维能力不是一朝一夕能完成的。
  排序算法紧跟着的是 - 搜索算法
  
  -------------------------------
  你这里是通过对象square1调用的方法getsquare()
 	public static void main(String[] args){
		getsquare(); //这里会出错
	}
	是的。其实main函数可以简单认为跟本类没什么关系,只是调用本类的
	其它静态方法时不用写类名而已。所以,要调用其它非静态方法,都要
	先实例化,就像别的类来调用一样。 
-------- 我有些懂啦! 但还是不太懂,我能理解啦! (个人理解)--------

	二维数组 : 可以看成以数组为元素的数组
	* 数组的拷贝 {
	}
	大公司剥削人剥削得最厉害!
  明白内存你就明白了一切!。。。
  
  总结 {
  	* 数组内存的布局
  	* 常见算法
  }
}
***** —————————————————— ****
****   第六章  - 常用类  ****
****  —————————————————— ****  	
本章内容 {
	* 字符串相关类 (String, StringBuffer)
	* 基本数据类型包装类
	* Math类
	* File类
	* 枚举类
	
	* java.lang.String 类代表不可变的字符序列
	
		String s1 = "helo";
		String s3 = "hello";
		s1 == s3 true
		字符串常量 - data seg 区
		data segment 编译器有优化
		
		如果是 new s1 == s3 false
		      s1.equals(s3) true
		字符串你可以看成是一个字符数组!
		
		String 类常用方法 {
			* 静态重载方法 public static String valueOf(...)
			* public String[] spllit(String regex)
		}
		String.valueOf(Object obj);  多态的存在
		toString
		java.lang.StringBuffer 代表可变的字符序列
		
		* 基本数据类型包装类
			基本数据 : 栈  -> 包装 --> 堆上面
			* 包装类 {
				* 写程序要循序渐进方法
			}
		* Math 类 { java.lang.Math 其中方法的参数和返回值类型都为 double }
		* File 类 { java.io.File 类代表系统文件名 (路径和文件名) 
				File 类的常见构造方法 :
				* public File(String pathname)   
					以 pathname 为路径创建 File 对象, 如果 pathname 是相对路径,则默认的当前路径在系统属性 user.dir 中存储
				* public File(String parent, String child)
				* File 的静态属性 String separator 存储了当前系统的路径分隔符。
					原型 : public static final String separator 但是事实上无论在哪 你写 / 都没有问题
					
					注意 \ 在 java 里面是转义字符
			}
		 * Enum - java.lang.Enum 枚举类型 {
		 		1, 只能够取特定值中的一个 
		 		2, 使用 enum 关键字
		 		3, 是 java.lang.Enum
		 		4, 举例 : TestEnum.java
		 	}
	总结~~~ API 和 金庸的书差不多!
			
***** —————————————————— ****
****   第七章  -  容 器  ****
****  —————————————————— ****  					
	第七章 容器 {
 		* 容器的概念       -        数组是么, 当然是!
 		* 容器API
 		* Collection 接口
 		* Iterator 接口
 		* 增强的 for 循环
 		* Set 接口
 		* List接口 和 Comparable接口
 		* Collections 类
 		* Map 接口
 		* 自动打包 / 解包
 		* 泛型 (JDK1.5新增)
 		-----
 		* J2SDk 所提供的容器位于 java.util 包内。
 		* 容器API的类图如下图所示:
 		--------------------------------------------------
 		
 		
 		1136 1136 1136   --  一个图, 一个类, 三个知识点,六个接口
 			
 			   <<interface>>
 			    Collection
 			   /           \                        <<interface>>
 <<interface>>      <<interface>>                 ^
      Set                List                     |
       ^                  ^                       |
       |           _______|______                 |
 		 HashSet   LinkedList    ArrayList          HashMap
 		 
 		 
 		1136  1136  1136  一个图, 一个类, 三个知识点,六个接口
		
 		* Collection 接口 -- 定义了存取一组对象的方法, 其子接口 Set 和 List 分别定义了存储方式。	
 			* Set  中的数据对象没有顺序且不可以重复。
 			* List 中的数据对象有顺序且可以重复
 			
 		* Map 接口定义了存储 “键 (key) -- 值 (value) 映射"对"的方法。
 		
 		Collection 方法举例
 			* 容器类对象在调用 remove, contains 等方法时需要比较对象是否相等
 				这会涉及到对象类型的 equals 方法和 hashCode 方法,对于自定义的
 				类型,需要要重写 equals 和 hashCode 方法以实现自定义的对象相等规则。
 				* 注意 : 相等的对象应该具有相等的 hashcodes
 			ArrayList 底层是一个数组
     哈哈: 装入的是对象,因为对象在堆上,栈里面的内容随时可能被清空!
		hashCode 能直接定位到那个对象
		toyreb
		Iterator - 接口最小化原则
		我这大管家在做操作的时候 : 连主人做任何的操作都不让操作啦!因为 iterater 执行了锁定,谁也不让谁看!	
		JDK 1.5 增强的 for 循环	
		Set {
			HashSet, TreeSet 一个以 hash 表实现, 一个以 树 结构实现
		}
		List {
			Object set(int index, Object element)
			int indexof(Object o);
			int lastIndexof(Object o);
		}
*** 一个类 {
	Collections  -- java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法
	例如 {
		void sort(List)
		...
	}
	LinkedList -- 逆序的时候效率较 ArrayList 高!
	对于 特定的 对象怎么确定谁大谁小。 {
		对象间可以比较大小
		通过 接口 只能看见对象的一点】
		Comparable 接口  -- 所有可以实现排序的类 都实现了 Comparable 接口
	}
	public int compareTo(Object obj)
	
	泛型规定 - 只能传 “猫”
	
	vector / hashtable 以前遗留下来的。效率特别低
	
	
	Map 接口 {
		Map 接口的实现类有 HashMap 和 TreeMap 等。 {hashmap 用 hash表来实现, TreeMap 用二叉树来实现-红黑}
		Map 类中存储的键 - 值对通过键来标识,所以键值不能重复。{
			不能重复 : 是equals()
									equals() 太慢, 所以我们用 hashCode() 来比较
								}
		}
	JDK 1.5 之后 {
		可以自动打包和解包
# - Auto-boxing / unboxing
		* 在合适的时机自动打包 , 解包
			* 自动将基础类型转化为对象
			* 自动将对象转换为基础类型
		* TestMap2.java
		}
	示例练习 {
		TestArgsWords.java
	}
JDK 1.5 泛型
* 起因 :
	* JDK 1.4 以前类型不明确
		* 装入集合类型都被当作 Object 对待, 从而失去自己的实际类型。
		* 从集合中取出时往往需要转型, 效率低, 容易产生错误。
* 解决办法 :
	* 在定义集合的时候同时定义集合中对象的类型
	* 示例 : BasicGeneric.java
		* 可以在定义 Collection 的时候指定
		* 也可以在循环时用 Iterator 指定
* 好处 :
	* 增强程序的可读性和稳定性
	什么时候可以指定自己的类型 : 你看 API, 他跟你就可以跟
* 总结 {
	1136
	* 一个图
	* 一个类
		* Collections
  * 三个知识点
  	* For
  	* Generic
  	* Auto-boxing / unboxing
  * 六个接口 {
  	1, Collection {
  		2, Set, 
  		3, List
  	}
  	4, Map
  	5, Iterator
  	6, Comparable
  }
***** —————————————————— ****
****   第八章   -   流   ****
****  —————————————————— ****  	  
	能帮助你建立文件,不能帮你建目录
	
	读到内存区 - 
	
	* 转换流 {
		中文 windos 编码 JBK
		当前系统默认的 编码是 JBK
		IOS8859_1 包含的所有西欧语言 --> 后来才推出 UniCode (国际标准化组织为了包含全球)
		JBK   JB2312   JB18030  东方人自己的编码 - 国标码 - 就是汉字,你可以认为
		日文,韩文 都有自己的编码  - 台湾有自己的 大五码
		拉丁1, 2, 3, 4, 5. 6. 7. 8. 9 都同意啦!包括俄罗斯, 但是中文还不行 ---- > UniCode
		FileOutputStream() 构造方法自己去查
	* System.in {
		System 类   --   in 是 InputStream 类型
		public static final InputStream in   抽象类 类型,  又是父类引用指向子类对象
		InputStreamReader isr = new InputStreamReader(System.in);
		System.in -> 管道直接堆到黑窗口上
		BufferedReader br = new BufferedReader(isr);
		
		wait() 
		运行后 : 等待在那 - 阻塞式的方法 很多 
		readLine() 有点特殊
		其实是 System.in 比较特殊  -- 标准输入 - 等待着标准输入 {
			你不输入 - 我可不就等着么,当然这个也叫做同步方法。
			你不输入,我就不能干别的
			同步式的
		}
		
	* 数据流 {
		请你把 long 类型的数, 写到 --> 文件里面去
		readUTF()
		UTF8 比较省空间
	}
	* 打印流 {
		System.out 
		out - public static final PrintStream
		默认在我们的黑窗口输出
		语言代表人的思维 - 能够促进人的思维
		log4J 著名的日志开发包
	}
	
	* Object 流 {
		把整个 Object 全部写入硬盘被
		在 VC 上叫做系列化
		存盘点。
		挨着排的序列化
		再一点一点读出来
		
		Serializable 接口  --- 标记性的接口
		transient int k = 15;
		相当于这个 k 是透明的。在序列化的时候不给于考虑,读的时候读默认值。
		
		* Serializable 接口
		* Externalizable 接口  extends  Serializable 
	}
}
		
		
	
	
	
		
		
			

posted @ 2013-12-20 12:07  小尼人00  阅读(132)  评论(0编辑  收藏  举报