--------------------------------
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 关键字
* 接口 - 特殊的抽象类 {
只包含常量和方法的定义
}
* 第三章总结 {
* 内存分析贯穿始终
* 对象和类的概念
* 类 (对类) 之间的关系
* 面向对象设计思想
* class
* new
* 引用的概念
* 构造方法的概念
* 方法重载
* 构造方法重载
* this
* static
* package & import
* private default protected public
* extends
* overwrite
* final
* Object
* toString
* equals
* upcasting downcasting
* polymophysm / dynamic binding / late
* abstract class
* interface
* implements
}
* 第四章 异常处理
* 第四章总结 {
* 一个图
* 五个关键字
* 先逮小的,再逮大的
* 异常和重写的关系
}
* 第五章 数组
* 第六章 常用类 {
* 字符串相关类 (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的类图如下图所示:
<>
Collection
<>
<> <> ^
Set List |
^ ^ |
| _______|______ |
HashSet LinkedList ArrayList HashMap
* Collection 接口 -- 定义了存取一组对象的方法, 其子接口 Set 和 List 分别定
义了存储方式。
* Set 中的数据对象没有顺序且不可以重复。
* List中的数据对象有顺序且可以重复
* Map 接口定义了存储 “键 (key) -- 值 (value) 映射"对"的方法。
Collection 方法举例
* 容器类对象在调用 remove, contains 等方法时需要比较对象是否相等
这会涉及到对象类型的 equals 方法和 hashCode 方法,对于自定义的
类型,需要要重写 equals 和 hashCode 方法以实现自定义的对象相等
规则。
* 注意 : 相等的对象应该具有相等的 hashcodes
* ---