- 浏览: 51642 次
- 性别:
- 来自: 大同
最新评论
-
javafound:
不错,期待!
神奇的paint方法 -
为爱Debug:
依稀记得,以前为了考试背过!呵呵
java中错误与异常的总结 -
optimism_best:
楼主,你的样子吓到我了,阿门!
java中错误与异常的总结 -
TTNecro:
[size=x-small] 比预想的发表的晚很多啊!![/ ...
ACM赛后感想 -
javafound:
比较细致,呵呵,
java中错误与异常的总结
文章列表
给Java类填入默认值
- 博客分类:
- 小项目总结
项目背景:录接口数据。当时的原材料是Java源代码,产出是RAP文档。在可预见的未来,Controller代码中接收一个VO,返回一个VO。OK,就是这两个对象,我先把它们序列化成JSON,然后在RAP中导入。过程中发现需要填各种数据类型的默认值。我们都知道,任何复杂的对象都是由基本数据类型构成的。所以,这个程序理想状态比较简单,只需要将VO的所有域中是基本数据类型的直接填值,其它类型递归处理。但是,问题来了。数据集合类型中的域不是那么简单,size不能随意填,另外范性也需要特殊关照。所以,数据集合类型也扩充进来。接着,问题又来了。我的小伙伴写的个别VO没那么单纯。所以也成了我的特殊关照类型 ...
这不是一篇细致的总结,只是几个零星的知识点。
Logger之间的继承关系与类继承关系保持一致,根Logger由getRootLogger()来获得。
Logger的输出级别:
Debug < Info < Warn < Error <
Fatal
Logger.setLevel(Level level)设置Logger级别。只有当Logger的输出方法的级别高于或等于Logger本身的级别时,这条输出语句才会生成真正的输出。如果程序没有为某个Logger显式指定其Level,它将继承离它最近的祖先的Level。
Log4j允许将一 ...
正确关闭资源的方式:
Object src = new Object();
Object desc = null;
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("a.bin"));
ois = new ObjectInputStream(new FileInputStream("a.bin"));
oos ...
Switch和for表达式细节
- 博客分类:
- 海边小拾贝
程序在其它地方使用enum值时,通常应该使用枚举名作为限定,即【枚举名.枚举值】;但在case分支中访问枚举值时不能使用枚举类名作为限定。
大部分时候,如果循环体只包含一条语句,那么就可以省略循环体的花括号;但如果循环体只包含一条局部变量定义语句,那依然不可以省略循环体的花括号。例:
for (int i = 0; i < args.length; i++) {
ForTest ft = new ForTest();
}
根据Java语言规范,for循环里有且只能有两个分号作为分隔符。虽然for循环允许初始化条件定义多个变量,但初始化条件不能包 ...
访问一个类的静态field
- 博客分类:
- 海边小拾贝
当某个线程视图访问一个类的静态field时,根据该类的状态可能出现如下4种情况:
该类尚未被初始化:当前线程开始对其执行初始化。
该类正在被当前线程执行初始化:这是对初始化的递归请求。(只能使用前面定义的静态变量)
该类正在被其它线程执行初始化:当前线程暂停,等待其他线程初始化完成。(这里可能造成死锁)
这个类已经被初始化:直接得到该静态field的值。(保存在Permanent代中)
继承Thread类来创建线程类,重写run()方法作为线程执行体的坏处:
线程类继承了Thread类,无法再继承其它类;
因为每条线程都是一个Thread子类的实例,因此多个线程之间共享数据比较麻烦。
当程序调用线程对象的run()方法时,与调用普通Java对象的普通方法并无任何区别,因此绝对不会启动一条新线程。
Java语法规定,任何线程进入同步方法、同步代码块之前,必须先获取同步方法、同步代码块对应的同步监视器:
对于同步代码块而言,程序必须显示为它指定同步监视器;
对于同步非静态方法而言,该方法的同步监视器是this——即调用该方法的Java对象;
对 ...
String对正则表达式的支持
- 博客分类:
- 海边小拾贝
支持正则表达式的方法:
boolean matches(String regex)
String replaceAll(String regex, String replacement)
String replaceFirst(String regex, String replacement)
String[] split(String regex)
String[] split(String regex, int limit)
不支持正则表达式的方法:
String replace(char oldChar, char newChar)
String repla ...
当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有在尖括号之间的类型信息都将被丢弃。这种擦除不仅会擦除使用该Java类时传入的类型实参,而且会擦除所有的泛型信息,也就是擦除所有尖括号里的信息。
import java.util.ArrayList;
import java.util.List;
public class ErasureTest {
public static void main(String[] args) {
Apple<Integer> a = new Apple<Integer>(6);
for( ...
System提供的identityHashCode()静态方法用于获取某个对象唯一的hashCode值,这个identityHashCode()的返回值与该类是否重写了hashCode()方法无关,只有当两个对象相同时,它们的identityHashCode值才会相等。
基本上,可以把
JVM
内存中的对象引用理解成一种有向图,把引用变量、对象都当成为有向图的顶点,将引用关系当成图的有向边,有向边总是从引用端指向被引用的
Java
对象。因为
Java
所有对象都是由一条一条线程创建出来的,因此可以把线程对象当成有向图的起始顶点。采用有向图来管理内存中的对象具有较高的精度,但缺点是效率较低。
当一个对象在堆内存中运行时,根据它在对应有向图中的状态,可以把它所处的状态分成可达状态、可恢复状态和不可达状态。其中,可恢复状态指对象已经没有任何引用变量引用它,系统的垃圾回收机制准备回收该对象所占的内存。但在回收之前,系统调用该对象的
...
Java集合框架
HashMap和HashSet
HashMap在底层将key-value对当成一个整体进行处理,这个整体就是一个Entry对象。HashMap底层采用一个Entry[]数组来保存所有的key-value对,当需要存储一个Entry对象时,会根据Hash算法来决定其存储位置(indexFor
变量可大致分为局部变量和成员变量。局部变量分为形参、方法内的局部变量和代码块内的局部变量(后两者必须显示初始化),作用时间短暂,它们都被储存的方法的栈内存中。类内定义的变量被称作成员变量,根据有无被static关键字修饰分为非静态变量(实例变量)和静态变量(类变量)。
Static只能修饰在类里定义的成员部分,包括成员变量、方法、内部类、初始化块、内部枚举类,不能修饰外部类,不能修饰局部变量、局部内部类。
从语法角度来看,程序可以在3个地方对实例变量执行初始化:
l 定义实例变量时指定初始值;
l
小小的数组,知识还真不少!
Java数组是静态的,与之相对的是JavaScript的动态数组。
提到Java数组,往往会提到两个概念:数组变量和数组对象。数组变量只是一个引用变量,而数组对象就是保存在堆内存中的连续内存空间。对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量。对数组对象的初始化有以下两种方式:
l 静态初始化:初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组的长度。
l
云存储是在云计算概念上延伸和发展出来的一个新的概念。关于云计算我在培训机构听说过,但没有参与到那个项目组,现在想起来很可惜。今天,就根据百度百科和前不久校长的一次讲座对云存储谈一二百字的认识。
首先,先谈谈云计算的本质。相对于现代计算机将并行计算转化为串行计算的本质而谈,云计算恰恰将计算机一贯的串行计算转化为并行计算。这其中不免涉及到不止一台服务器完成计算,因此在云计算的概念里网络也包含在内。
其次,云存储的4层模型。存储层、基础管理层、应用接口层、访问层。存储层是驱动硬件的一层;基础管理层将不同存储设备统一起来,并且提供额外的性能支撑如数据加密、容灾等;应用接口层是业务逻辑层;访问层提 ...
STL
的最主要的两个特点
:数据结构和算法的分离,非面向对象本质。访问对象是通过象指针一样的迭代器实现的;容器是象链表,矢量之类的数据结构,并按模板方式提供;算法是函数模板,用于操作容器中的数据。由于STL以 ...