1、java基本程序设计结构
类名每个单词首字母大写 FirstSample
源代码的文件名必须与公共类名相同
java中所有函数都属于某个类
注释:// /* */(不能嵌套) /** */
整型:byte(1==8bits)、short(2)、int(4)、long(8)
浮点型:float(4)、double(8)
字符型:char(2)
布尔型:
boolean
除了赋值以外,
表达式计算过程中也可能发生一些类型转换。在表达式中,类型提升规则如下:
》所有byte/short/char都被提升为int。
》如果有一个操作数为long,整个表达式提升为long。float和double情况也一样。
变量使用前必须赋值!
final声明常量、static final声明类常量(一般全大写)
位运算(&、|、^(异或)、~)
>>右移,符号位填充高位 >>>无符号右移,0填充高位
<<左移
String类对象为不可变对象
字符串比较使用equals方法
String API:
charAt( )、startsWith( )、length( )、substring( )、join( )...
StringBuilder、StringBuffer
switch...case...break...default
case标签可以是:
char、byte、short、int的常量表达式;
枚举常量;
字符串字面量
带标签的break语句!
大数值(BigInteger、BigDecimal)
java.util.Arrays类的常用方法:
sort( )、toString( )
多维数组:
数组的数组
2、对象与类
用java编写的所有代码都位于某个类内部
在每一个成员方法中
this表示隐式参数
静态方法不能访问实例域
实例方法可以访问静态域
系统在
无构造器时默认提供一个隐式无参构造器;否则不提供!
类与类之间简单的说有三种关系,
Is-A关系、Has-A关系、Use-A关系,分别代表继承、关联和依赖
3、继承 extends
重载("同名不同参")——— 返回类型除外
重写("两同两小一大") ——— 1、方法名和参数列表相同 2、返回类型和抛出异常小于等于父类 3、访问权限大于等于父类
覆盖和隐藏
子类对象转换成父类对象后,能够访问被隐藏的变量和方法,不能访问被覆盖的方法
***变量、静态方法只能被隐藏***
***实例方法被覆盖(重写)***
protected:同一个包下所有类、子类可见
缺省访问修饰符:同一个包下所有类可见
反射!!!
JAVA反射机制是在运行状态中
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用它的任意一个方法和属性;
这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
解剖一个类,必须先要获取到该类的字节码文件对象---
每一个字节码文件对应的Class类型的对象
反射就是把Java类中的各种成分映射成一个个的Java对象
Class.newInstance--->
Constructor.newInstance--->
ConstructorAccessor.newInstance

4、接口、lambda表达式与内部类
接口和抽象类
(default方法)
浅拷贝和深拷贝
lambda表达式
将方法(函数)作为参数传递,类似C/C++中的函数指针;
函数式接口:有且仅有一个抽象方法的接口;
(参数)->表达式/{语句块}
在Java中,可以将
一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。
5、异常
checked:受查异常,编译器核查是否提供异常处理器(try语句块捕获/主动抛出)
外部原因(文件不存在、数据库连接错误...)---非人为因素导致
unchecked:非受查异常,程序问题(Error/RuntimeException)
Throwable异常基类
1、Error
2、Exception:1.)RuntimeException 2.)其他
try{
}catch( ){
}
finally{
}
带资源的try语句!!!
6、泛型
提高程序灵活性;
参数化类型(所操作的数据类型被指定为参数,使用时再指定具体类型)
泛型类、泛型方法
类型擦除
约束和局限
通配符类型
反射和泛型


7、集合
存放对象的容器
一些接口:Iterable、Iterator、Collection、List、Set、Queue、Map
Java库中具体的集合
ArrayList 基于数组实现的列表
LinkedList 基于双向链表实现的列表
HashSet 基于HashMap实现的无重复元素的无序集合
TreeSet 一种有序集
LinkedHashSet 一种可以记住元素插入顺序的集
ArrayDeque 一种用循环数组实现的双端队列
PriorityQueue 基于小根堆实现的优先级队列
HashMap 基于
数组+链表实现的键/值映射表
TreeMap 键值有序的映射表
LinkedHashMap 一种可以记住键/值项添加次序的映射表
WeakHashMap 一种其值无用后可以被垃圾回收器回收的映射表
利用基本数据结构实现
LRU缓存:1、通过继承LinkedHashMap,重写removeEldestEntry方法
2、双链表+Hashtable
Arrays/Collections工具类
8、并发
1、
线程的阻塞与等待?
两者都表示线程当前暂停执行的状态
而两者的区别,基本可以理解为:进入 waiting 状态是线程主动的,而进入 blocked 状态是被动的。
更进一步的说,进入 blocked 状态是在同步(synchronized)代码之外,而进入 waiting 状态是在同步代码之内(然后马上退出同步)。
2、
线程中的异常处理?
在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,各个线程需要自己把自己的checked exception处理掉。
如果线程确实没有自己try catch某个unchecked exception,而我们又想在线程代码边界之外(run方法之外)来捕获和处理这个异常的话,java为我们提供了一种线程内发生异常时能够在线程代码边界之外处理异常的回调机制,即Thread对象提供setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)方法。
运行中断改状态
阻塞中断抛异常
4、并发包(线程安全集合、执行器、同步器)
9、流与文件
1、
字节流和字符流(InputStream、OutputStream、Reader、Writer)
2、序列化Serializable接口(ObjectInputStream、ObjectOutputStream)
3、操作文件(Path、Files)
4、
内存映射文件 (缓存在用户进程空间)
Java NIO 内存映射文件
10、网络
1、Socket、ServerSocket
2、可中断套接字?(socket阻塞线程不可中断)
3、
在Java程序中访问Web服务器 (模拟浏览器发出Http请求)


11、数据库编程
1、
数据库操作基本步骤
2、
预备语句(
prepared statement)
3、结果集、行集
JDBC到底如何与数据库交互!!!

API中提供了以下接口和类:
DriverManager:此类管理数据库驱动程序列表。 使用通信子协议将来自java应用程序的连接请求与适当的数据库驱动程序进行匹配。在JDBC下识别某个子协议的第一个驱动程序将用于建立数据库连接。
Driver:此接口处理与数据库服务器的通信。我们很少会直接与Driver对象进行交互。 但会使用DriverManager对象来管理这种类型的对象。 它还提取与使用Driver对象相关的信息。
Connection:此接口具有用于联系数据库的所有方法。 连接(Connection)对象表示通信上下文,即,与数据库的所有通信仅通过连接对象。
Statement:使用从此接口创建的对象将SQL语句提交到数据库。 除了执行存储过程之外,一些派生接口还接受参数。
ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。 它作为一个迭代器并可移动ResultSet对象查询的数据。
SQLException:此类处理数据库应用程序中发生的任何错误。
使用示范:
