您的位置:首页 > 其它

黑马训练营预习视频之学习日记(二)

2010-12-21 13:47 363 查看
12月9日
学习内容:27-32
由反射引出框架
类加载器管理资源配置文件: config.properties 在加载时写
InputStream ips = new FileInputStream(“config.properties”);
Properties pros = new Properties();
pros.load(ips);
ips.close();//及时关闭 否则可能会内存泄露.
内省IntroSpector对JavaBean进行操作,JavaBean是一个特殊的Java类. 符合set/get打头这种特殊规则的类叫做JavaBean.可以当作JavaBean类来使用.
注意:set方法接收参数 get方法无参数.
BeanUtils工具类:由Apache提供,导入jar包(放到工程内部)
12月10日
学习内容:33-39
1. 注解应用
注解的属性:例在注解类中增加String color(). @Annotation(color=”red”)
2.泛型入门:限定集合中的输入类型
Vector<String> vc = new Vector<Object>();×//后面的<Object>不写就对了
Vector<Object> vc = new Vector<String>();×
Vector<Integer> vcList[] = new Vector<Integer>[10];×//数组的元素不能使用参数化类型
Vector v1 = new Vector<String>();√
Vector<Object> v = v1;√
3.泛型的通配符应用:<?>表示任意类型都可以接收
限定上边界通配符:
Vector<? extends Number> x = new Vector<Integer>();√
Vector<? extends Number> x = new Vector<String>();×
限定下边界:
Vector<? super Integer> x = new Vector<Number>();√
Vector<? super Integer> x = new Vector<>(Byte);×//super父类 Byte与Integer平级.
注意:限定通配符总是包括自己
12月11日
学习内容:高新技术40-47
1. 自定义泛型
泛型的高级应用
练习例题:1.自动将Object转换成其它类型 2.交换数组中前后位置3.打印任意参数化集合中的所有内容4.复制数组到另一个数组当中去.等等.
应用:数据库中 泛型应用于定义字段类型,可写在类后面.
注意:静态方法不能用泛型类型
2. 通过反射获得泛型的实际类型参数:
方法:getGenericXXX等方法 获得泛型的类型/返回类型等.
3. 类加载器: 类加载器负责加载 Java 类的字节代码到 Java 虚拟机中.
默认的加载器类:Bootstrap/ExtClassloader/AppClassLoader
获得加载器方法:类名.class.getClassLoader().getClass().getName();
父级加载器getParent()
代理模式: 类加载器在尝试自己去查找某个类的字节代码并定义它时,会先代理给其父类加载器,由父类加载器先去尝试加载这个类,依次类推。
面试题:能不能自己写个java.lang.system类. 通常情况下,不可以.因为委托机制可以从上级中找到这个类并加载.但是自己可以编写个类加载器加载上….
4. 自定义加载器:父类→loadClass/findClass→得到的class文件转换成字节码→defineClass()
5. 对Class加密工具类
12月12日
学习内容:高新技术48-56
1. 类加载器的高级应用:建立web工程,建立servlet文件,显示servlet加载类
2. 代理: 异常处理/计算程序的运算时间/事务管理等等.
AOP 面向方面
JVM创建动态类
StringBuffer与StringBuilder区别: 都是添加动态类的方法.
单线程下Builder效率高,多线程下Buffer效率高.考虑线程安全.
代理三要素:对象/方法/参数.
3.Bean工厂
12月13日
学习内容:Java基础视频中IO的1-5
File类 例子:创建文件 有则删除 无则创建
RandomAccessFile:支持随即访问的方式.
遇到问题:年龄超过256 输出显示不正确
解决:写入和读取时用writeInt和readInt.
遇到问题:姓名使用中文字符时,年龄输出不正确
解决:一个中文字占两个字节 与英文是不一致的.在写入时使用writeChars,读取时使用readChar.
流的讲解 分为两类:节点流类和过滤流类
InputStream与Outputstream的主要方法: (后者相对应 省略)
int read() byte类型表示-1 int类型表示255
int read(byte[] b) 读字节数
int read(byte[] b,int off,int len)
long skip(long n) 跳过n个来读
int available()
void mark(int readlimit)输入流中建立标记 参数表示最多还能读取多少字节的内容
void reset()配合mark方法使用 从标记处开始读
Boolean markSupoorted()是否支持mark和reset操作
void close() 关闭流 释放资源
FileInputStream与FileOutputStream 可指定文件名和路径.
Reader与Writer :字符流类
总结:
1.导入io包,抛出IO异常 2.跳读注意跳过多少字节 3.要及时关闭流,释放与IO流相关资源.
12月14日
学习内容:Java基础视频IO中6-15
PipedInputOutputStream与PipedInputStream:管道通信 线程之间通信.
PipedWriter与PipedReader 使用管道通信 ,可实现强内聚,弱耦合
ByteArrayInputStream与ByteArrayOutputStream:字节数组的读写
ByteArrayInputStream构造函数:
ByteArrayInputStream(byte[] buf)
ByteArrayinputStream(byte[] buf,int offset,int length)从offset开始读取length个字节
ByteArrayOutputStream构造函数:
ByteArrayOutputStream():创建32字节缓冲区
ByteArrayOutputStream(int):根据指定大小创建缓冲区
StringWriter与StringReader:字符IO流处理字符串.
重视IO程序的可复用性:
1.System.in 连接键盘 System.out连接显示器
2.InputStream中的read方法返回-1表示结束.
3.windows下 Ctrl+z结束输入流标记 Linux下 则是Ctrl+D
总结:读取大段数据的过程放在函数中完成,使用-1作为键盘输入结束点, 用InputStream形式参数读取数据,用System.in作为实参传递给Inputstream形参来调用函数.
字符编码的讲解与应用 转换等问题
Gb2312 UTF-8 UTF-16 Unicode iso8859-1
过滤类与包装类
BufferedInputStream与BufferedOutputStream 创建缓冲区
BufferedInputStream构造方法:
BufferedInputStream(inputStream in)
BufferedInputStream(inputStream in,int size)

BufferedOutputStream构造方法:
BufferedOutputStream(outputStream out)
BufferedOutputStream(outputStream out,int size)

BufferedReader与BufferedWriter
BufferedReader的readLine读取一行文本数据
BufferedWriter的newLine换行符

DataInputStream与DataOutputStream
DataInputstream方法:只有readUTF
DataOutputStream方法:writeChars()/writeBytes()/writeUTF().

PrintStream类 :将基本类型数据转换成字符串输出.
构造函数:
PrintStream(OutputStream out): 输出流 不会自动清空缓冲区
PrintStream(OutputStram out,Boolean autoflush): autoflush自动刷新缓冲区
PrintStream(OutputStram out,Boolean autoflush,String Encoding): Encoding指定字符集编码

ObjectInputStream与ObjectOutputStream
字节流与字符流转换

To Be Continued...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: