Java基础
2017-09-11 18:01:07 0 举报
AI智能生成
Java基础
作者其他创作
大纲/内容
概述
特点
简单自然
平台可移植性
支持函数式编程
JIT编译
更好的并发编程
健壮安全
术语
JDK
javac
java
javadoc
javap
javah
jar
jdb
native2ascii
JRE
API
java.lang
java.net
java.io
java.nio
java.util
java.time
java.text
java.sql
JVM
HotSpot
执行方式
1. 编译
将源代码(.java)处理成字节码(.class)
2. 解释
将字节码加载到JVM中执行(JIT编译)
程序结构
package
方便管理类
避免命名冲突
import
除java.lang包其他包中的内容需要先导入
class / interface / enum / @interface
被public修饰的类/接口/枚举/注解最多只有一个
建议:一个源文件中只写一个类/接口/枚举/注解
注释
行注释 - //
块注释(多行注释)- /* ... */
文档注释 - /** ... */
@author
@since
@param
@return
@throws
@see
@deprecated
IDE
Eclipse
IntelliJ IDEA
NetBeans
核心语言
关键字 - 有特殊含义的单词
基本数据类型
byte
short
int
long
float
double
char
boolean
类和接口
class
interface
extends
implements
abstract
final
package
import
this
super
new
instanceof
strictfp
方法
return
void
native
static
访问修饰符
public
protected
private
分支和循环
if
else
switch
case
default
while
do
for
break
continue
异常机制
try
catch
finally
throw
throws
多线程
synchronized
volatile
序列化
transient
Java 5+
assert
enum
保留字
const
goto
标识符 - 给类型(类、接口、枚举、注解)、包、方法、属性、变量等起的名字
1. 字母(Unicode字符)、数字、下划线和$,数字不能开头
2. 不能使用关键字做标识符
3. 大小写敏感(区分大小写)
4. 见名知意
5. 驼峰命名法
命名类型时每个单词首字母大写
命名方法、变量时第一个单词小写,从第二个单词开始每个单词首字母大写
命名包用全小写
命名常量用全大写
运算符
赋值运算符
=
复合的赋值运算符
算术运算符
+
-
*
/
%
比较运算符(关系运算符)
<
<=
>
>=
==
!=
逻辑运算符
&
|
!
短路运算符
&&
||
位运算符
<<
>>
>>>
&
|
^
~
其他运算符
三元条件运算符
? :
自增自减运算符
++
--
new
instanceof
强制类型转换
()
.
下标运算符
[ ]
字面量
整型字面量
101
0b101
0101
0x101
101L
123_456_789
实型字面量
123.456
123.456F
1.23456E2
1.23456E-2
字符字面量
'a'
'\n'
'\"'
'\123'
'\u660a'
布尔字面量
true
false
字符串字面量
"hello, world"
引用字面量
null
类型字面量
int.class
String.class
int[].class
String[].class
分隔符
变量和常量
变量 - 值可以修改
常量 - 只能一次赋值
数据类型
基本类型
引用类型
程序逻辑
顺序结构
分支结构(选择结构)
if...else...
switch...case...default...
switch可以接受的值
整数和字符
枚举
字符串
只能做等值判断
循环结构(重复结构)
while
do...while
for
两个分号隔开三个部分
初始条件
循环控制条件
步进条件
for-each
数组
数组是对象
创建数组
new 类型[大小]
{ ..., ..., ...}
length属性
下标运算
[ ]
ArrayIndexOutOfBoundsException
二维数组
装数组的数组
需要两次下标运算才能取出元素
应用
表格
矩阵
棋盘
地图
算法
排序
简单选择排序
冒泡排序
归并排序
快速排序
查找
无序数组 - 顺序查找
有序数组 - 二分查找(折半查找)
Arrays工具类
- asList(T...)
- binarySearch()
- copyOf()
- copyOfRange()
- equals()
- fill()
- parallelPrefix()
- parallelSort()
- setAll()
- sort()
- toString()
方法
相对独立的可重复使用的功能模块
定义方法:[访问修饰符] [其他修饰符] 返回类型 方法名([参数列表]) [异常声明] { ... }
访问修饰符
public
默认
protected
private
其他修饰符
static
该方法代表发给类的消息
abstract
该方法只有声明没有实现(方法体)
final
该方法在子类中不能被重写
native
该方法通过C/C++实现
synchronized
该方法是同步方法(只允许一个线程进入执行)
调用方法:方法名([参数值列表])
方法重载
一个类中可以出现同名的方法只要它们的参数列表不相同即可
设计原则:高度内聚
一个方法只解决一个问题(只做好一件事件)
方法的递归调用
一个方法直接或者间接的调用自身
递归公式
收敛条件
面向对象
基本概念
对象
接收消息的实体
一切皆为对象
对象都有属性和行为
对象都属于某个类
每个对象都是独一无二的
类
对象的蓝图和模板
数据抽象 - 属性
行为抽象 - 方法
构造器(构造方法)
消息
对象之间通信的方式
接口
抽象方法的集合
作用
能力
实现一个接口就代表具备了某方面的能力
约定
一个类实现了接口就必须实现接口中的所有抽象方法否则要被声明为抽象类
角色
一个类可以实现多个接口来扮演多种角色
接口之间可以继承而且支持多重继承
从Java 8开始接口中的方法允许有默认实现
常见的接口用法
单方法接口(函数式接口)
Lambda表达式
@FunctionalInterface
标识性接口
普通接口
常量接口
接口最不正确的用法
四大支柱
抽象
总结共性
数据抽象
行为抽象
封装
隐藏一切可隐藏的实现细节提供简单的编程接口
继承
从已有类创建新类的过程
父类(超类/基类):提供继承信息的类
子类(派生类):得到继承信息的类
多态
方法重写
子类对父类的方法给出自己的实现版本
对象造型
用父类型的引用去引用子类对象
三个步骤
[1. 定义类]
访问修饰符
外部类
public
默认
内部类
相当于是外部类的一个成员变量
public
protected
默认
private
可以访问外部类的私有属性和方法
静态内部类
被static修饰的内部类
不依赖于外部类对象就可以实例化
匿名内部类
就地实例化接口或抽象类
没有名字由编译器自动为其命名
其他修饰符
abstract
抽象类不能实例化
专门用于继承的类
final
终结类不能被继承
类名
驼峰标识 - 每个单词首字母大写
extends
Java中的继承是单一继承
implements
一个类可以实现多个接口来扮演多种角色
多个接口之间用逗号隔开
2. 创建对象
new
构造器(构造方法)
名字跟类名完全一致
没有返回类型
支持重载
可以通过this调用当前类已有其他构造器
隐式构造器(平庸构造器)
如果一个类没有写任何构造器编译器会生成默认的构造器
3. 给对象发消息
点语法
设计原则
单一职责原则
一个类只做该做的事情(高内聚)
开闭原则
软件实体对扩展开放对修改关闭(接受扩展不接受修改)
抽象是关键
封装可变性
依赖倒转原则
面向抽象编程/面向接口编程
定义对象的引用类型时应该尽可能使用抽象类型
定义方法的参数类型时应该尽可能使用抽象类型
定义方法的返回类型时应该尽可能使用抽象类型
里氏替换原则
任何时候都可以用子类对象替换父类对象
子类重写的方法不能比父类被重写的方法更难访问
子类重写的方法不能比父类被重写的方法声明更多的异常
不满足里氏替换原则就不能设计为继承关系
接口隔离原则
接口尽量小而专不要大而全
用多个接口的组合来表示更多的能力
合成聚合复用原则
优先考虑使用强关联关系而不是继承关系复用代码
迪米特法则
最少知识原则 - 不要跟陌生人讲话
将类设计成不变类
降低一个类及其成员的访问权限
限制一个局部变量的有效范围
设计模式
GoF设计模式
创建型
工厂方法模式
定义创建对象的工厂接口,将实际创建工作推迟到子类中
抽象工厂模式
向客户端提供一个接口,使得客户端在不指定产品具体类型的情况下,创建多个产品族中的产品对象
单例模式
确保一个类只有一个实例,并且由该类自行实例化并向外界提供这个实例
建造者模式
将一个复杂对象的内部实现和对象的创建过程分割开来,使得同样的创建过程可以得到不同内部实现的对象
原型模式
通过复制原型对象来创建更多该类型的对象
结构型
适配器模式
把一个类的接口变成系统期待的另一种接口从而使原本因接口不兼容而无法使用的类能够工作起来
合成模式
将对象组织到树结构中,使得单纯元素和复合元素可以同等看待
装潢模式
把一个对象放到另一个类中加以包装,从而扩展对象的功能
代理模式
给一个对象提供一个代理对象,并由代理对象接管对原对象的操作
享元模式
以共享的方式支持大量细粒度对象
门面模式
提供一个高层次的接口,使得子系统更易于使用
桥梁模式
用一个继承结构封装一种可变因素,使得每种可变性可以独立的变化
行为型
策略模式
为一组算法设计一个公共的接口,从而使得它们可以互换
模板方法模式
准备一个抽象类,将部分逻辑以具体方法以及构造器的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑
观察者模式
多个观察者同时监听一个主题,当主题状态变化时会通知所有的观察者,使其自动更新自己
迭代器模式
顺序访问一个容器中的元素而不必暴露容器的内部实现
责任链模式
每个对象持有下一个对象的引用来形成一条请求链,请求在链条上传递直到某个对象决定处理此请求
命令模式
把一个请求或者操作封装到一个对象中
备忘录模式
在不破坏封装性的前提下,捕获一个对象的状态并保存,在适当的时候又将对象还原,回到之前保存起来的状态
状态模式
一个对象的行为在其内部状态改变时也随之改变,就如同改变了它的类一样
访问者模式
封装一些用于某种数据结构元素的操作,当改变这些操作时,接收操作的数据结构可以保持不变
解释器模式
对给定语言定义出一种词法表示并同时提供一个解释器来解释语言中的句子
调停者模式
包装一系列对象相互作用的方式,使得对象不必相互直接引用,从而实现松散耦合
其他设计模式
简单工厂模式(静态工厂模式)
由一个工厂类的静态方法负责创建对象
多实例模式
一个类可以有多个实例,但是由该类自己创建、管理并向外界提供这些实例
缺省适配模式
为接口提供一个默认实现,子类可以在默认实现上进行扩展而不必直接从原始接口进行扩展
不变模式
让对象状态在对象创建后就不再变化
0 条评论
下一页