术语
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
GC:Garbage Collector垃圾回收器
jdk下载
https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
内部类
内部类的优势在于可以访问外部类的私有属性。
Lambda表达式
方法没有参数:()->{};
方法有参数:(参数,参数)->{};
简化:(参数,参数)->语句;
内建函数接口
功能型函数接口
消费型函数接口
供给型函数接口
断言型函数接口
详细说明:
Java 8新特性-5 内建函数式接口 - MPPC - 博客园
在之前的一片博文 Lambda 表达式,提到过Java 8提供的函数式接口。在此文中,将介绍一下Java 8四个最基本的函数式接口 对于方法的引用,严格来讲都需要定义一个接口。不管我们如何操作实际上有
https://www.cnblogs.com/MPPC/p/5357572.html
开发工具
JBbuilder---Eclipse---Idea
技术组合
皇家正规军(IBM):WSAD+AIX+WAS+DB2
正规杂牌军(厂商合奏):JBuilder+Linux+BEA WebLogic+Oracle
开源风潮(免费风潮):Eclipse+Linux+Tomcat+Mysql
多线程
1、使用Thread类实现多线程
java.lang.IllegalThreadStateException:线程重复进行线程启动.
JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植
2、使用Runnable接口实现多线程
3、Callable接口实现多线程
线程的操作
线程休眠:sleep()
线程中断:interrupt()
线程的强制运行:join()
线程礼让:yield()
线程优先级:setPriopity()
停止多线程:设置终止标志位。
设置守护线程:setDaemon()
volatile
volatile与synchronized的区别:
volatile主要在属性上使用;synchronized在代码块上使用
StringBuffer
String 的+操作本质就是StringBuffer的append()
StringBuffer:线程安全,使用了synchronized关键字
StringBuilder:线程不安全
CharSequence描述的是字符串。
AutoCloseable
jdk1.7之后,自动释放资源
Runtime
获取操作系统信息
availableProcessors()
大数字处理类
BigInteger
BigDecimal
正则表达式
Perl语言引进 JDK1.4支持
【数量:单个】字符匹配
\\:匹配“\”
\n:匹配换行
\t:匹配制表符
【数量:单个】字符集(可以从找那个任选一个字符)
[abc]:可能a、b、c中的任意一个
[^abc]:不是a、b、c中的任意一个
[a-zA-Z]:一个任意字母所组成,不区分大小写
[0-9]:由一位数字组成
【数量:单个】简化字符集
.:表示任意的一个字符
\d:等价于[0-9]范围
\D:等价于[^0-9]范围
\s:匹配任意一位空格,匹配是空格、换行、制表符
\S:匹配任意一位非空格数据
\w:匹配字母、数字、下划线等价于[a-zA-Z_0-9]
\W:匹配非字母、数字、下划线
数量表示
表达式?:该正则可以出现0或者1次
表达式*:该正则可以出现0次、1次或多次
表达式+:该正则可以出现1次或多次
表达式{n}:表达式场地正好为n次
表达式{n,}:表达式场地正好为n次以上
表达式{n,m}:表达式场地正好为n~m次
邮箱的正则匹配
例如:xxx777@qq.com
[a-zA-Z0-9]\\w+@\\w+\\.(com|cn|net|com.cn|gov)
Pattern类:正则表达式的编译类
Matcher类:实现了正则匹配的处理类
File类
构造方法:File(String filename);
创建新的文件:createNewFile()
判断文件是否存在:exists()
删除文件:delete()
File类的一个常量:File.separator
流程:程序->JVM->操作系统函数->文件处理
文件创建的前提:判断父路径是否存在。
父路径:getParentFile()
创建路径:mkdir()
文件是否可读:canRead()
文件是否可写:canWrite()
获取文件长度:length() 返回的字节长度
最后修改时间:lastModified()
是否是目录:isDirectory()
是否是文件:isFile()
列出目录文件:listFiles()
流
字节处理流:OutputStream(输出字节流) InputStream(输入字节流)
字符处理流:Writer(输出字符流) Reader(输入字符流)
在使用OutputStream的时候如果没有使用close()方法关闭流,内容依然可以正常输出;
在使用Writer的时候如果没有使用close()方法关闭流,内容不能正常输出,因为Writer使用到了缓冲区;flush()方法用于刷新此Writer流。 当流将来自不同write()方法的任何字符保存到缓冲区中后,立即将它们写入其预期的目标,然后在检查该目标是否包含另一个字符或字节流后,将其刷新,并且一个flush()调用将刷新所有缓冲区中的数据。
jdk1.9后可以使用transferTo(OutputStream out)进行文件拷贝。
管道流
字节管道流:PipedOutputStream、PipedInputStream
字符管道流:PipedWriter、PipedReader
序列化、反序列化
对象序列化是指将内存中保存的对象以二进制数据流的形式进行处理,可以实现对象的保存或者网络的传输。
java.io.Serializable序列化标记。
transient关键字
transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。
反射
所有的技术实现的目标:重用性
getClass()可以帮助使用者找到对象的根源。
三种实例化方式:
1、【Object类支持】 getClass()
2、【JVM支持】类.class
3、【Class类支持】forName()
获取包名称:getPackage()
获取父类信息:getSuperClass()
获取父接口:getInterfaces()
反射调用普通方法:
获取全部方法:getMethods()
获取指定方法:getMethod(String name,Class<?>...param)
获取本类全部方法:getDeclaredMethods()
获取本类指定方法:getDeclaredMethod()
invoke();
ClassLoader类加载器
BootStrap:系统类加载器
PlatformClassLoader:平台类加载器
AppClassLoader:应用程序加载器
自定义类加载
集合
List是Collection子接口,允许保存重复的元素
List<String> all = List.of("xxx","yyy","zzz");
在使用List保存自定义类对象需要使用contains(),remove()方法进行查询和删除的时候一定保证类中复写了类equals()方法。