文章目录
终于看完了马士兵老师JAVA视频的基础部分,记录一下,接下来想个项目来做下练练手。
程序
- 过程
- 数据结构
- 对象
- 算法
JAVA初
- 环境
-
- path
-
-
- copy 路径最好复印过去
-
-
- classpath
-
- IDE
- 格式
-
- 让别人看得舒服
-
- 让别人看得清楚
-
- 运算符两侧加空格
-
- 并排语句加空格
-
- 大括号对齐
-
- 程序块之间加空行
-
- 缩进
-
- 成对编程
-
- { 左侧有空格
- 编译-运行
-
- java
-
- javac
-
- java -version
- 一个类只能有一个 public class
-
- 且与文件名相同
-
- psvm 是入口
- 知识管理
-
- 记录每一个错误
-
- 多看,多写,例子程序
JAVA语法
- 作用域
-
- 出了大括号无作用
- 标识符
-
- 关键字
- 基础数据类型(4类8种)
-
- 逻辑型 boolean
-
-
- 只有TRUE和FELASE
-
-
- 文本型 char
-
-
- 二个字节有16位,所以可以用十六进制Unicode表示
-
-
-
- 转义字符 ‘\’
-
-
- 整数型 byte 1, short 2, int 4, long 8
-
-
- 十进制 123
-
-
-
- 八进制 012
-
-
-
- 十六进制 0x
-
-
-
- 默认为 int
-
-
-
- long 888888L
-
-
- 浮点数型 float 4, double 8
-
-
- 默认 double
-
-
-
- float 12.3F
-
- 常量(数据类型)
-
- (在别的语境中表示不可变的变量)
-
- 123
-
- ‘a’
-
- “hello world”
-
- 3.14
-
- true
- 变量
-
- 先声明,再赋值
-
- 成员变量
-
- 局部变量
- 基本数据转换
-
- boolean 不可以转换
-
- 整形、字符型、浮点 在混合运算中可以相互转换
-
-
- byte, shote, char -> int -> long -> float ->double
-
-
-
- byte, short, char 运算时都要先自转 int
-
-
-
- 容量大转容量小,要用强制转换符,可能会有精度降低或溢出
-
-
-
- 多种类型混合运算时,系统自动将所有数据转换成容量最大的
-
-
-
- 实数常量(1.2) 默认为double
-
-
-
- 整数常量(123)默认为 int
-
- 程序执行中的内存
-
- heap NEW出来的东西
-
- stack 局部变量
-
- data segment 静态变量 字符串变量
-
- code segment 存放代码
运算符
- 位运算符 & | ^ ~ >> << >>>
- 赋值运算符 =
- 逻辑运算符 ! & | ^ && ||
-
- && ||短路
-
- ^逻辑异或
- 算术运算符 + – * / % ++ —
-
- 自加(减)运算符 ++ —
-
-
- 在前 先运算再取值
-
-
-
- 在后 先取值再运算
-
- 关系运算符 > < >= <= == !=
- 字符串连接运算符 +
-
- 字符串转换
-
- 当进行打印时,无论任何类型,都自动转为字符串
- 扩展赋值运算符 += -+ *= /=
分支与循环
- if
-
- 注意省略大括号时,有且只能有一句话。全都把括号写上。
- for
-
- i 是一个局部变量
- while
-
- 变量声明一次,多次使用
-
-
- 循环体可能不执行
-
- 读别人程序
-
- 分析内存
-
-
- 1 + 12 + 12*3
-
-
-
- 循环一次写一行
-
-
- 多读别人的算法
- break & continue
-
- 注意 if 语句后面不要有分号
-
- continue 中止本次循环
- 优秀程序
-
- 程序要健壮,鲁棒性
-
- 大量的注释文档
- switch
-
- 一般要写 break
-
- 多个 case 可以合并
-
- default 不要省略
-
- 只能探测 int 类型值
方法
- 也叫函数
- 用于复用
- 分解复杂任务
- 传递参数时,遵循值传送原则
-
- 基本类型传递的是该数据值本身
-
- 引用类型传递的是对对象的引用,而不是对象本身
- 只有执行时能使用内存
- 格式
-
- 形式参数
-
-
- 定义好类型
-
-
- 实参
-
- 返回值
-
- 返回值类型
-
-
- 如无返回值,则用 void
-
- 递归调用
-
- 遇到方法即会执行方法,等待返回值后再继续
-
- 无分支
-
- 方法执行时出现本身的调用
-
- 递归中有多少个方法同时执行 Fibonacci数列
-
- 画图理解
- 使用
-
- 对象名。方法名(实参列表)
-
- 实参要匹配
-
- return 终止方法的运行并指定要返回要数据
面向对象
- 1,首先思考问题域中有多少个对象
- 2,然后让合适的属性和方法出现在合适的对象里
- 设计思想
-
- 面向过程
-
- 面向对象
-
-
- 我命令车去新疆
-
-
-
- 车怎么去不关我事
-
-
-
-
- 信息封装在车这个类的内部
-
-
-
-
-
- 我不用去了解车整个开动的过程
-
-
-
- 在系统的构造中尽可能的运用人类的自然思维方式
-
- 强调运用人类常用的思想方法与原则 :抽象、分类、继承、聚合、多态
- 为什么用对象
-
- Reusable
-
- Extensibility
-
- 维护和替换更加方便
- 3,再思考类(对象)之间的关系
-
- 关联关系
-
-
- 有一点,但不紧密
-
-
-
- 我的某一方法参数是另一对象
-
-
- 继承关系
-
-
- XX是一种X
-
-
-
-
- 学生是一种人
-
-
-
-
- 可产生继承树
-
-
-
- JAVA无多重继承
-
-
- 聚合关系
-
-
- XX是XX的一部分
-
-
-
-
- 手是人的一部分
-
-
-
-
- 聚合
-
-
-
-
- 球队与队员
-
-
-
-
- 组合
-
-
-
-
- 人与身体器官
-
-
-
- 实现关系
-
-
- 我有一个方法,怎么实现由子类去实现
-
-
-
- 多态
-
- 抽象对象的方法
-
- 与业务逻辑无关的不封装
-
- 抽象出下面系统中的类及关系
-
-
- 用户去旅行社订机票
-
-
-
- 我要去新疆
-
-
- 找名词
-
- 万事万物皆对象
-
- 类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法
-
- 首先定义类才有对象
-
- 首先定义方法才能调用
-
- 静态属性(成员变量,属性)
-
- 动态属性(方法,函数)
- 类与对象
-
- 类可以看成一类对象的模板,对象可以看成该类的一个具体实例
-
- attribute 成员变量 属性
-
-
- 一般对象的成员变量不一样
-
-
- method
-
- 实例 对象 Object
面向对象基础概念
- 成员变量
-
- 先声明,再赋值
-
- 可以是JAVA语言中的任何一种数据类型
-
- 成员变量都有初始化值
-
- 作用范围为整个类体
- 内存图是什么样的?会画不?
- 创建和使用
-
- 必须使用new创建对象
-
- 使用 对象(引用)。成员变量 来引用对象的成员变量
-
- 使用 对象(引用)。方法(参数列表) 来调用对象的方法
-
- 同一类的每个对象有不同的成员变量存储空间
-
- 同一类的每个对象共享该类的方法
- 引用
-
- 除基本类型外都是引用类型
-
- 占用两块内存
-
- 都是指针
-
- 类是静态的概念,代码区
-
- 对象是new出来的,在堆内存
-
- 类的成员变量在不同对象中有不同的值
-
- 方法只有一份,执行时才占用内存
-
- 一小块内存指向一大块内存
构造方法(构造函数)
- 构造函数与类同名且没有返回值
- 构造函数是定义在Java类中的一个用来初始化对象的函数
- 使用 new & 构造方法 创建一个新的对象
- _id _age 使用下划线区别形参与成员变量名
- 没有指定构造函数时,系统自动有一个空的构造方法
- 内存图会画不?
- 一但自己定义了构造方法,系统不再有空的构造方法
- 构造方法前面没有返回值
全名规则
- 类名首字母大字
- 驼峰标识
- 变量名和方法名首字母小字
内存
- 栈
-
- 使用完就销毁
- 方法只能通过NEW出来的对象来调用
- 堆
-
- 内存回收时销毁
方法的重载
- 类中名字相同,参数不同的多个方法
-
- 个数不一样
-
- 或类型不一样
- 返回值不一样不能重载
- 调用时会根据不同的参数表选择对应的方法
对象的创建和使用
- 同一类的每一个对象共享该类的方法
-
- 非静态方法是针对每个对象进行调用
- 同一类的每个对象有不同的成员变量存储空间
- 必须使用 new 关键字创建对象
- 使用 对象引用。方法(参数列表)来调用对象的方法
- 使用 对象引用。成员变量 来引用对象的成员变量
读代码
- 遇到复杂表达式,从内向外分析
- 分析内存是易筋经
写方法(计算在没在圆中)
- 方法的名字
-
- 想下别人怎么用
-
-
- 第三人称
-
-
-
- 英文的说话习惯
-
- 方法的形参
-
- 包不包含某个点,所以传一个点进来
- 方法的返回值
-
- 是不是,返回布尔
this
- 类中的this代表该方法的对象的引用
- 在必须指出当前使用方法的对象是谁是要使用this
- this指向他自己
- this可以看作是一个变量,他的值是当前对象的引用
- 有时使用this要以处理方法中成员变量与参数重名的情况
- 就近原则
-
- i 就是最近声明的 i
static
- 放在数据区data seg
- 该类的静态成员变量
- 没有对象也能访问,类。XXX
- 该类的公用变量
- 字串符常量放在data seg
- 对于该类的所有对象来说,static成员变量只有一份
- 计数用
- 在static方法中不可访问非static的成员变量
package
- 用。指明句层次
- 对应目录管理
- 包中的类,必须Java源文件的第一条语句
- 解决类名冲突
- 编译出来的CLASS必须位于正确的位置
- import
-
- 要使用也必须把包层次写正确
-
- 也可引入
-
- 访问同一包中的其他类,不用引入
-
- 想要引入正确必须CLASSPATH设置正确
-
-
- CLASS文件的最上层包的父目录位于CLASSPATH
-
-
- 执行一个类需要写全包名
- 常用包
-
- /jdk/Contents/Home/jre/lib/rt.jar
-
-
- java.lang
-
-
-
-
- 无需引入直接使用
-
-
-
-
- java.awt
-
-
-
- java.net
-
-
-
- java.io
-
-
-
- java.util
-
-
- 打包,方便给别人用
-
-
- jar -cvf test.jar .
-
-
-
- 把jar设置到CLASSPATH中
-
类的继承 & 访问控制
- 成员 权限修饰符
-
- private
-
-
- 类内部
-
-
- default
-
-
- 同一个包 默认
-
-
- protected
-
-
- 子类
-
-
- public
-
-
- 任何
-
- 类的继承
-
- 使用 extends 实现类的继承
-
- 通过继承,子类自动拥有基类(superclass)的所有成员(成员变量和方法)
-
- JAVA只支持单继承
-
- 在内存中子类对象会包着基类对象
-
- 方法的重写
-
-
- 在子类对基类继承的方法进进行重写
-
-
-
- 注意大小写,就不是重写,而是一个新方法
-
-
-
-
- 复制方法名过去
-
-
-
-
- 重写必须有相同的方法名、形参、返回类型
-
-
-
- 重写方法不能使用比被重写方法更严格的访问权限
-
-
- super
-
-
- super引用基类(父类)的对象
-
-
-
- this引用当前类的对象
-
- 类 权限修饰符
-
- default
-
-
- 同一个包 默认
-
-
- public
-
-
- 任何
-
继承中的构造方法
- 子类的构造过程 必须 调用基类的构造方法
- 子类可以在自己的构造方法中使用 super(argument_list) 调用基类的构造方法
-
- 使用this(argument_list)调用本类另外的构造方法
-
- 如果调用了super,必须写在子类构造方法的第一行
- argument_list 注意顺序
- 字符串在在date seg区,通过引用指向他们
- 如果子类的构造方法中没有显示地调用基类构造方法,则系统默认调用基类无参数的构造方法
-
- 不写 就是 自动调用 super()
- 如果子类构造方法中即没有显式调用基类构造方法,而基类中又没有无参的构造方法,则编译出错
Object
- 所有类的根类
- equals()
-
- 提供定义对象是否“相等”逻辑
-
- x.equals(y)
-
- String 重写了
- toString()
-
- 多读英文文档
-
- 推荐重写这个方法
- hashcode
对象转型casting
- 一个基类的引用 类型变量可以“指向”其子类 的对象
- 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法)
- Animal a = new Dog()
- 可以使用 引用 变量 instanceof 类名 来判断该引用型变量所“指向”的对象是否属于该类或该类的子类
- 传基类进来,再按不同子类做逻辑
-
- 面向对象:可扩展性好
- 子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之向下转型(downcasting)
动态绑定、多态、吃绑定
- 动态绑定是指在执行期间判断所引用对象类型,根据其 实际类型 调用其相应的方法
-
- 小姑娘养了一只宠物
-
- 实际类型
-
- 不是引用类型
-
- new 时 才确定调用哪个方法 猫。猫叫
- 雷电游戏
-
- 扩展性好
-
- GAMEOBJECT
-
-
- 敌机
-
-
-
- 鞭子
-
-
-
- 子弹
-
-
-
- 我们的飞机
-
- 使用条件
-
- 要有继承
-
- 要有重写
-
- 父类引用指向子类对象
抽象类
- 用 abstract 修饰的类
-
- 用 abstract 修饰的方法
- 含抽象方法的必须声明为抽象类
-
- 抽象类必须被继承
-
- 抽象方法必须被重写
- 子类也可是抽象类
-
- 交给子类去实现
- 不能被实例化
- 只需要声明,不需实现
final
- final 的变量的值不能被改变
-
- final 的成员变量
-
- final 的局部变量(形参)
-
- 只能读不能写
- final 的方法不能被重写
- final 的类不能被继承
interface
- 多个无关的类可以实现同一个接口
- 每一个接口暴露对象的某一部分方法!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 一个类可以实现多个无关的接口
- 与继承关系类似,接口与实现类之间存大多态性
- 接口(interface)是抽象方法和常量值的定义的集合
- 从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
- 接口特性
-
- 接口可以多重实现
-
- 接口中声明的属性默认为 public static final 的,也只能是 public static final 的
-
- 接口中只能定义抽象方法,而且这些方法默认是 public 的,也只能是 public 的
-
- 接口可以继承其它的接口,并添加新的属性和抽象方法
- public interface Runner{ public static final int id = 1; }
- implements
异常调试
- 有的方法有 throws
-
- 一定要处理异常
- 异常的分类
-
- Throwable
-
-
- Error(不可处理)
-
-
-
- Exception(可处理)
-
-
-
-
- RuntimeException(常见,可处理,但可无视)
-
-
-
-
-
- 方法中有 throws 的(一定要处理)
-
-
- 理论
-
- 在程序运行期出现的错误
-
- JAVA异常是JAVA提供的用于处理程序中错误的一种机制
-
- 所谓错误是指在程序运行的过程中发生的一些异常事件(如:除0溢出、数组下标越界、要读取的文件不存在)
-
- 设计良好的程序应该在异常发生时提供处理这些错误的方法,便得程序不会因为异常的发生而阻断或产生不可预见的结果
-
- JAVA程序的执行过程如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给JAVA运行时系统,这叫 抛出(throw) 异常
-
- 当JAVA运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为 捕获(catch)异常
- 用法
-
- try 可跟多个 catch
-
-
- catch到异常一定要处理
-
-
-
- printStackTrace()
-
-
-
- getMassage()
-
-
-
- 先子后父
-
-
- finally
-
-
- 产不产生异常都会执行
-
-
-
- 进行资源的清除工作
-
-
-
-
- 关闭打开的文件
-
-
-
-
-
- 删除临时文件
-
-
-
-
- 里面可继续 try
-
- 不想处理异常都可以抛出,轻易不抛
- 自定义异常
-
- 继承java.lang.Exception来声明自己的异常类
-
- 在方法适当的位置 生成自定义异常的实例,并用throw语句抛出
-
- 在方法的声明部分用 throws 语句声明该方法可能抛出的异常
-
- 重写方法需要抛出与原方法所抛出异常类型一致异常或不抛出异常
数组
- 用法
-
- arr[i]
- System.exit(-1)
-
- JVM非正常关闭
- 算法
-
- 找规律
-
- 选择排序
-
-
- 画图理解
-
-
-
- 二次优化
-
-
- 冒泡排序
- 理论
-
- 声明时不能指定其长度
-
- 使用 new 创建数组对象
-
- 动态初始化
-
-
- 数组定义
-
-
-
- 与数组元素分配空间
-
-
-
- 和赋值的操作分开进行
-
-
- 静态初始化
-
-
- 定义数组的同时就为数组元素分配空间并赋值
-
-
- 元素初始化按成员变量隐式初始化
-
- .length 是属性不是方法
- printlnth会自动调用toString方法
- 思考题
-
- 数三退一,最后哪个人在哪个位置
-
- 面向对象的写法?
- 链表
- 二分法查找
- 二维数组
-
- 静态初始化
-
- 动态初始化
-
-
- 先空间
-
-
- arraycopy
-
-
- 指向同一内存中的值,一改都改
-
常用类
- 基础类型包装类
-
- 封装一个相应的基本数据类型数值成为对象,并为其提供了一系列操作
- String
-
- 没有 new 就会指向同一个内存
-
- 有 new 会两个不同的内存
-
- 不可变的字条序列
-
- 正则表达式
- Math
-
- 提供一系列静态方法用于科学计算,其方法的参数和返回值类型一般为double型
- StringBuffer
-
- 代表可变的字符序列
- File
-
- separator
-
-
- 兼容性好
-
-
- 递归
- 经常查询API文档
- Enum枚举
-
- 出错越早越好
-
- 像是静态变量
-
- 只能写之前定义好的值之一
容器
- JAVA API 所提供的一系列类的实例,用于在程序中存放对象
- 1136
-
- 一个图
-
- 一个类
-
-
- Collections
-
-
- 三个知识点
-
-
- For
-
-
-
- Generic
-
-
-
- Auto-boxing/unboxing
-
-
- 六个接口
-
-
- Collection
-
-
-
- Set
-
-
-
- List
-
-
-
- Map
-
-
-
- Iterator
-
-
-
- Comparable
-
- Collection接口
-
- Set
-
-
- 无序,不可重复
-
-
-
- remove contains 主要看是否equals 和 hashCode
-
-
-
-
- 重写equals一定也要重写hashCode
-
-
-
-
-
- 字典会用到hashCode
-
-
-
-
-
- 相同对象有相同的hashCode
-
-
-
- List
-
-
- 有序,可重复(equals)
-
-
-
- 使用父类引用指向子类对象,灵活方便
-
-
-
- for(int i:arr)
-
-
-
-
- 不方便访问下标I
-
-
-
- Iterator
-
-
- 所有实现Collection接口都有Iterator方法实现Iterator接口的对象
-
-
-
- 迭代器
-
-
-
- 就是指针、游标
-
-
-
- 理解多态
-
-
-
- 在循环时锁定,只能用 I,对象自己的相关方法不能用
-
- Collections类
-
- 常用算法(排序,查找)
-
- Comparable接口
-
-
- 把对象当接口
-
-
-
- compareTo
-
- 泛型
-
- Collection
- Collection
-
- 看文档中有<>
-
- 集合时尽量使用泛型
- Map
-
- 用来存储(键:值)对
-
- HashMap
-
-
- hash做索引
-
-
- TreeMap
-
-
- 二叉树做索引
-
-
- 值通过键做标识,所以键值不能重复
-
-
- 通过equals和hashCode比较
-
-
-
-
- 两个要同时修改
-
-
-
- Auto-boxing/unboxing
- 如何选择
-
- Array读快改慢
-
- Linked改快读慢
-
- Hash两者之间
流(Stream)
- 如同接水管一样,接上 开始流
-
- 在IO包中
- 输入输出
-
- InputStream
-
-
- read(byte[] buffer)
-
-
- OutputStream
-
-
- 先flush()再close()
-
- 转换流
-
- FileOutputStream()
-
-
- OutputStreamWriter
-
-
-
-
- 转化后方便写入中文字符
-
-
-
- System.in
-
-
- InputStreamReader
-
-
-
-
- BufferedReader
-
-
-
-
-
-
- readLine()
-
-
-
-
-
-
-
-
- 阻塞式
-
-
-
-
-
-
-
-
-
- 同步
-
-
-
-
- 字节字符
-
- Reader
-
-
- FileReader
-
-
- Writer
-
-
- FileWriter
-
- 数据流
-
- ByteArrayOutputStream
-
-
- DataOutputStream
-
-
-
-
- writeDouble
-
-
-
-
-
- writeBoolean
-
-
-
-
- ByteArrayInputStream
-
-
-
-
- DataInputStream
-
-
-
-
-
-
- readDouble
-
-
-
-
-
-
-
- readBoolean
-
-
-
-
- 队列
-
-
- 先进先出
-
- 节点处理
-
- 节点流
-
-
- 字节流
-
-
-
- 字符流
-
-
-
-
- FileReader
-
-
-
-
-
- FileWriter
-
-
-
- 处理流
-
-
- 缓冲流
-
-
-
-
- BufferedWriter
-
-
-
-
-
- BufferedReader
-
-
-
-
-
-
- readLine()
-
-
-
- Print流
-
- 画图理解
-
- FileOutputStream
-
-
- PrintStream
-
-
-
-
- System.setOut
-
-
-
-
-
- sout是PrintStream类型
-
-
-
- 自带flush
- Object流
-
- 序列化
-
- Serializable
-
-
- 标记类接口,给编译器看,不用实现方法
-
-
-
- transient
-
-
-
-
- 序列化时不记录
-
-
-
-
- Externalizable
-
-
-
-
- 自定义序列化
-
-
-
- ObjectInputStream
线程
- 概念
-
- 线程是一个程序中不同的执行路径
-
- java.lang.Thread
-
-
- run()
-
-
-
- start()
-
- 线程同步
-
- 访问同一资源的多个线程之间的协调
-
-
- 线程打断时,前后不一致
-
-
- synchronized(this)
-
-
- synchronized void add()
-
-
-
-
- 锁定当前对象
-
-
-
-
- 互斥锁
-
-
-
-
- 某个时间段只进到一个方法体中
-
-
-
- 死锁
-
-
- 哲学家吃饭问题
-
-
-
- 只锁一个对象
-
-
-
- 锁的颗度加粗
-
-
- 要考虑到所有能访问同一资源的方法
-
-
- 给所有方法都加锁
-
-
- 给改的方法加锁
-
-
- 读可以不加
-
-
- this.wait()
-
-
- 发生阻塞时
-
-
-
- if 改用 while
-
-
-
- this.notify()
-
-
-
-
- 叫醒一个wait的对象
-
-
-
-
- notifyAll()
-
-
-
-
- 多个线程
-
-
-
-
- 锁不再归我所有
-
- 方法
-
- implements Runnable
-
-
- t=thread(r)
-
-
-
-
- t.start()
-
-
-
-
-
-
- 最好用这种
-
-
-
-
- extends Thread
-
-
- r.start()
-
-
- sleep(888)
-
-
- 暂停执行888毫秒
-
-
-
- 关闭线程用一个标记来关
-
-
- join()
-
-
- 合并某个线程
-
-
- yield()
-
-
- 高风亮节让出CPU
-
-
- setPriority(Thread.NORM_PRIORITY + 3)
-
-
- 默认优先级提升3
-
-
- currentThread().isAlive()
-
-
- 当前线程状态
-
网络编程
- 概念
-
- 通信协议分层
-
-
- IP
-
-
-
- TCP
-
-
-
- UDP
-
-
- socket编程
-
-
- 插座
-
-
-
- 双向的网络通信实现数据交换
-
-
-
- client-server
-
-
-
-
- Socket
-
-
-
-
-
- ServerSocket
-
-
- 用法
-
- TCP
-
-
- new Socket(’127.0.0.1’, 888)
-
-
-
-
- getOutputStream()
-
-
-
-
-
-
- DateOutStream()
-
-
-
-
-
-
-
-
- writeUTF
-
-
-
-
-
-
- new ServerSocket(888)
-
-
-
-
- accept() 阻塞式
-
-
-
-
-
-
- 死循环
-
-
-
-
-
-
-
-
- getInputStream()
-
-
-
-
-
-
-
-
-
-
- DateInputStream()
-
-
-
-
-
-
-
-
-
-
-
-
- readUTF 阻塞式
-
-
-
-
-
-
-
- Socket
-
-
- 不能都读,所在首先有一个先写
-
-
-
- 都有OUT/IN
-
-
- UDP
-
-
- client
-
-
-
-
- InetSocketAddress
-
-
-
-
-
-
- DatagramPacket
-
-
-
-
-
-
-
-
- DatagramSocket
-
-
-
-
-
-
- server
-
-
-
-
- DatagramPacket
-
-
-
-
-
-
- DatagramSocket
-
-
-
-
-
- LONG转byte数组
-
-
-
-
- ByteArrayOutputStream
-
-
-
-
-
-
- DataOutputStream
-
-
-
-
-
-
-
-
- writeLong
-
-
-
-
-
-
- byte数组转LONG
-
-
-
-
- ByteArrayInputStream
-
-
-
-
-
-
- DataInputStream
-
-
-
-
-
-
-
-
- readLong
-
-
-
-
GUI编程
- Graphics
-
- Component都有一个paint用于实现绘图,每次重画该Component时都自动调用paint方法
-
- 画图重写paint(Graphics g)
-
- update(Graphics g)
-
- repaint()
- 事件监听
-
- 原理
-
-
- 事件源对象
-
-
-
- 实现某种监听器接口的类的对象
-
-
- ActionEvent
-
-
- Button
-
-
-
-
- addActionListener
-
-
-
-
-
- implements ActionListener
-
-
-
-
- TextField
-
-
-
-
- e.getSource()
-
-
-
-
-
-
- getText()
-
-
-
-
- MouseEvent
-
-
- extends MouseAdapter
-
-
-
-
- 继承可以不用重写五种方法
-
-
-
-
- addMouseListener
-
-
- WindowEvent
-
-
- extends WindowAdapter
-
-
-
-
- 适配器
-
-
-
-
- addWindowListener
-
-
- KeyEvent
-
-
- e.getKeyCode()
-
-
-
-
- 看返回值
-
-
- AWT
-
- Component
-
-
- Container
-
-
-
-
- Windows
-
-
-
-
-
-
- Frame
-
-
-
-
-
-
-
-
- Panel
-
-
-
-
-
-
-
-
- Dialog
-
-
-
-
-
-
-
- pack()
-
-
-
-
-
-
-
- setVisible()
-
-
-
- 布局管理器(LayoutManager)
-
- FlowLayout
-
- BorderLayout
-
-
- default
-
-
- GridLayout
- 内部类
-
- 持有对方引用 this
-
-
- 门面(外观)模式Facade
-
-
- 定义在类中的类
-
- 可以访问包装类的成员变量、方法
-
-
- 默认有外部类的引用
-
-
- 该类不允许或不需要其它类进行访问时
-
- 编译后有$
- 匿名内部类
-
- 逻辑简单,不常变,时使用
-
- 继承或实现接口,重写或实现其方法时
日期处理
- Calendar
- SimpleDateFormat
反射机制
- 反射机制
-
- 在运行时加载、探知、使用编译期完全未知的classes
-
- java.lang.reflect
-
- properties
-
-
- JAVA的一种配置文件
-
-
- class.forName(Str)
-
-
- newInstance()
-
-
-
-
- getMethods()
-
-
-
-
-
-
- invoke()
-
-
-
-
-
-
-
-
- 可变参数
-
-
-
-
- ClassLoader
-
- -verbose:class
-
- 概念
-
-
- 并非一次性加载
-
-
-
- 需要时加载
-
-
-
- static语句块在加载后执行一次
-
-
-
- dynamic语句块每次new新的对象都会执行
-
-
- JDK
-
-
- bootstrap class loader
-
-
-
- extension class loader
-
-
-
- application class loader
-
-
-
- other class loaders
-
-
-
- 是层次不是继承
-
-
-
- getClassLoader()
-
-
-
-
- getParent()
-
-
-
- 在load时先找上一层loader,如果已经load,就不再load
-
-
- 安全性好,破坏性代码无机会执行
-
工厂模式 FactoryMethod
- 单态模式
-
- 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 静态工厂方法
-
- 定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到其子类。
-
- 工厂产生对象
-
- 构造方法一般 private
-
- getInstance()
- 抽象工厂
-
- 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
-
-
- 方便修改各种配置
-
-
-
- 定义公用接口
-
-
-
-
- 实现
-
-
-
- AbstractFactory
-
-
- 声明抽象产品对象的操作接口
-
-
- ConcreteFactory
-
-
- 实现创建具体产品对象的操作
-
-
- AbstractProduct
-
-
- 为一类产品对象声明一个接口
-
-
- ConcreteProduct
-
-
- 定义一个将被相应的具体工厂创建的产品对象
-
-
-
- 实现AbstractProduct接口
-
-
- Client
-
-
- 仅使用AbstractFactory和AbstractProduct类声明的接口
-
- 简单工厂