JAVAEE基础笔记,未完待续

JavaEE基础笔记,未完待续

1.mysql dual伪表,提供强制数据源
2.文档注释 多行注释
3.两个byte,short,int相加会强制转化为int,此刻需要强制转换符。a+=1,如果a为short则没问题。不能直接a=a+1
4.位移作乘除操作对计算机来说最快
5.交换两个数。第三个变量,±运算,异或运算,一个等式写两个=先写后边的。
6.jdk5 可变参数 foreach | jdk 8:接口可以被所有实现类继承
5之前读取信息采用流 5之后为Scanner类
7自动关闭流
8Lambda:简化接口式的匿名内部类,称为函数式接口。具有一个方法的普通接口()->{}
6.arrays(sort copyof tostring binaryserach fill equals)
7.一个字符串是一个对象,当引用传递时,改变字符串变量会重新创造一个变量。基本类型在栈中操作,其他对象在堆中操作
当一个对象的属性指向字符串时,此属性是在堆中改变指针的,而不会改变引用变量地址
8.java类不支持多继承,接口可以,c++可以
9.overload:方法的重载,发生在同一个类中,方法名相同,参数列表不同,和返回值无关
override:方法的重写,发生在子父类中,方法名,参数列表相同,返回值相同,子类访问修饰符大于等于父类
异常等级小于等于父类
10.对象管理一般需要在对象数组上进行操作
11.字符串比较用equals,不用==
12.为了避免空指针,一般作判断时 把已知常量写在前面较好
13.常量需要在定义或者构造器中初始化,注意final的意义
14.抽象类和接口的区别
15,建议所有子类重写tostring
16.String类重写了Equals方法
17.内部类解决了多重继承问题,内部类继承或实现不影响外部类
成员内部类(inner):外部类中定义普通(私有)方法内封装内部类对外提供访问内部类接口 可以让外部察觉不到类中有内部类。
方法内部类:只能在方法作用域内实例化内部类,内部类中引用本地方法必须是最终(final)的:因为局部变量可能先于内部类
对象被回收(1.8取消了这个特性,必须显式final)
静态内部类:像其他成员方法一样,没有外部类对象也可以访问。静态嵌套类(nested)可以访问外部类的静态成员和方法
匿名内部类(一次性,一个实例,不能定义任何静态成员和方法,隐含实现一个接口或者继承一个类):
继承式:
接口式:
参数式:在参数列表中new
18.可以用内部类实现链表,内部类为节点对象,外部类管理对象 并对外提供功能接口
增删改查之类可以使用递归
19.装箱new 包装类型 拆箱 如 intVlaue方法
字符串转换为int parseint(String)
20.(Throwable–》Exception)一个try下可以catch多个不同类型的异常
finally一定会执行
如果try语句中有return语句,由于异常中断,则需要在方法尾添加return。但是如果throw了new 异常,则不需要。
21.assert 断言函数
22.debug技术 debug as调用
快捷键:F5单步跳入:进入本行代码执行
F6单步跳过:执行本行,跳到下一样
F7单步返回:跳出方法
F8:继续,执行到下一个断点
23.String字符串也是个对象,且不可变
String常用方法charAt toCharArray getBytes String(str【】,int offect int length)
replace split(String regex)contains indexOf isEmpty(注意null和empty的区别)
length()toLowerCase和toUpperCase trim() connact()等普通和构造方法
String 情况分析 1 如果在编译器可以被确定,那就使用已有的对象,否则会创建新的对象
如果是final则在编译器就被确定为常量
2 方法中返回的字符串实在运行时产生的 即生成了新的地址对象
24.StringBuffer:线程安全 默认数组长度16(动态扩充,建议带容量的初始化,提高效率),目的解决字符串相加时带来的性能问题(append方法)
StringBulider:线程不安全,但是更快
25.工具类:
Math:abs,PI,sqrt random(0.0到1.0)round(返回接近参数并等于某一整数的double值)等
Random:next+基本类型 返回随机数
Date:表示特定的瞬间,精确到毫秒,也就是程序运行的当前时间
Calendar:(日历类,在新jdk中代替Date类)Calendar c =new GregorianCalendar();或者直接get instance
c有get方法可以获取年月日 时分秒
DtaeFormat:日期格式化输出(yyyy-mm-dd hh:mm:ss)new SimpleFormat
26.对象比较器:对两个或多个数据项进行比较,已确定它们是否相等,或确定它们之间的大小关系
Comparable接口:实现类要重写compareTo方法 自然排序
Comparator接口:强行对某个对象进行整体排序。即多加一个类(比较器)实现此接口,而不改变原类
在Arrays sort方法参数中添加建立的比较器
27.对象的克隆:将一个对象复制一份,两个对象地址不同
Cloneable接口:标记接口 Object中存在clone()方法
28.System类:in,out,err 三个成员变量 输入 输出 和错误输出流
成员方法:arraycopy currentTimeMillis exit(int status) gc getProperty(String key)
29.BigInteger:让超过Integer的数字进行运算
BigDecimal:防止float和double进行计算时都是精度,用于货币
30.File类:表示一个文件或目录
create delete isFile list listFiles(将文件以file对象返回)renameTo length
31.流:按照处理数据类型的不同分为:字符流和字节流
按照数据流向不同分为:输入流和输出流
字节输出流:超类OutoutStream 文件输出流使用子类FileoutputStream
字节输入流:超类InputStream 文件输入流使用子类FileInputStream(要用byte数组接收读取到的信息)
输入输出字节流都是一个一个字节读取,无缓存
字符流:Writer 对文件的操作使用其子类 FileWriter
Reader 对文件的操作使用其子类 FileReader
文件字符流会自带缓存,默认大小为1024字节,在缓存满后或手动刷新缓存或关闭流时会把数据写入文件
32.字符字节转换流:OutputStreamWriter:可以将输出的字符流转换为字节流(把out流装到这里)
InputStreamReader:可以将输入的字节流转换为字符流(in流装到这里)
33.缓冲流:目的:更高效的读取信息,原理是将数据先缓冲起来,然后一起写入或者读取出来
BufferedInputStream/BufferedOutputStream 默认缓存大小为8KB
BufferedReader/BufferedWriter 关闭时先关闭缓冲流
34.打印流:用于输出,提供了很多print的重载
字节打印流PrintStream
字符打印流PrintWriter
35.对象流 ObjectOutputStream 将java对象的基本数据类型和图形写入Outputstream
ObjectInputStream对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化
36.序列化(反序列化需要按序列化的顺序)一组对象可以采用对象数组的形式,因为对象数组可以向Object转型
如果一个类创建的对象需要被序列化,则需要实现Serializable标记接口(接口内无定义)
序列化意义:把对象保存到文件中(存储到物理介质):实际写入类名,属性名,属性类型,属性值等
对象需要在网络上传输
反序列化:从文件中把对象读取出来
transient关键字表示在序列化中被忽略
37.字节数组流:ByteArrayOut(In)putStream:基于内存操作内部,内部维护着一个字节数组,我们可以利用流的
的读取机制来处理字符串,无需关闭
38.数据流:DataArrayOut(In)putStream:与–机器无关–的从底层输入流或输出流获取java基本类型来进行读取
39.流媒体 文件拆分
40.字符串流:以一个字符串为数据源来构造一个字符流,在web开发中,经常从服务器上获取数据
数据的返回格式通过是一个字符串,我们需要把这个字符串变成字符流
可以用流标记器StreamTokenizer或者解析器来解析数据
StringReader
StringWriter:用于回收在字符串缓冲区中的输出来构造字符串
41.管道流:管道输入流应该连接到管道输出流;管道输入流提供要写入管道输出流的所有数据字节
通常,数据由某个线程从PipedInputStream对象读取,并由其他线程将其写入到相应的PipedOutputStream。
不建议对这两个对象尝试使用单个线程,因为这样可能导致死锁。
管道输入流包含一个缓冲区,可在缓冲区限定范围内将读操作和写操作分开。如果向管道输出
流提供数据字节的线程不再存在,则认为管道已损坏
42.Properties:主要用于读取JAVA的配置文件,便于维护,不需要动业务逻辑部分
load put 配合流向配置文件中读写信息
可把加载部分放在静态代码块中先执行
43.文件压缩与解压缩:ZipOutputStream ZipEntry类(开始写入新的zip文件条目并将流定位到条目数据的开始处)
ZipInputStream
44.常见的字符编码:GBK UTF unicode(java采用,但不兼容iso8859-1)等
造成乱码的根本原因:程序使用的编码与本机的编码不统一
在网络中,客户端与服务端编码不统一
45.New io(NIO):面向块(比传统流快,但是缺少一些优雅和简单性)。jdk1.4加入的新包,目的是为了让java程序员可以实现高速I/O而无需编写自定义的本机代码
NIO将最耗时的I/O操作(填充和提取缓冲区)转移回操作系统,因而极大的提高速度
NIO所有数据都是用缓冲区处理的,缓冲区实际上是一个数组,但功能不局限于数组。最常用的数组为ByteBuffer
buffer读写转换依靠flip方法,即合理利用缓冲区空间
46.Files工具类:可以简化文件操作。包含write readallbytes copy move delete createDirectory createFile等方法
46.通道:Channel :是一个对象,可以通过它读取数据。

一些设计原则和模式
—设计原则:1.向上抽取:多态中使用到过
2.单一职责原则:一个类只负责一项职责
3.开闭原则:软件实体如类,模块和函数应该对扩展开放,对修改关闭
4.合成/聚合复用原则:新对象的某些功能已在创建好的对象里实现,那么尽量用已有对象提供的功能,
使之成为新对象的一部分,而不必重建
5.依赖倒置原则:高层模块不依赖低层模块,二者都应该依赖其抽象
抽象不应该依赖细节,而细节依赖于抽象
6.接口隔离原则:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上
7.迪米特法则:一个对象对其他对象保持最少的了解
8.里氏替换原则:所有引用基类的地方必须能透明的使用其子类的对象
—设计模式
1.模板方法模式:定义一个操作中算法的骨架,将一些可变部分延迟到子类中,
模板方法模式使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定的步骤。
比如抽象类中普通方法定义抽象方法,子类继承重写抽象方法延迟操作。
2.策略设计模式:定义了一系列算法,将每一种算法封装起来并可以相互替换使用,
策略模式让算法独立于使用它的客户应用而独立变化
即在抽象类中组合接口对象,并让接口实现可变部分,实现封装
3.简单工厂设计模式:接口实现,使用者和被使用者解耦和
4.静态代理设计模式:为其他对象提供一种代理以控制对这个对象的访问
业务接口 实现类 代理对象 比如A接口 B实现A 在C代理中定义A的对象 然后在main方法中把B传到C的构造方法中
5.适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配去使原本由于接口不兼容而不能一起工作的类可以一起工作
接口A 接口B 类C实现A,构造器添加B,创造方法内添加B需要实现的方法。main方法多创建个adapter对象即可
抽象类也算适配器
6.享元模式:使用共享对象,减少内存开销
比如包装类把一个字节以内的数保存,可以直接用。
7.装饰者设计模式:(在一些特定情况可以代替继承)动态地给一个对象添加一些额外的职责,就增加功能来说,Decorator模式相比生成子类更为灵活。
该模式以对客户端透明的方式来扩展对象的功能
Component(被装饰对象基类)ConcreateComponent(具体被装饰的对象)
Decorator(装饰者抽象类) ConcreateDecorator(具体装饰者)

你可能感兴趣的:(JAVA)