赞
踩
x.toUpperCase();操作的结果不是x,而是产生了一个空引用“FMN”。
所以输出的结果是Fmnwxy
java命令行执行程序,格式是 java 类名 参数…
所以程序输入的参数数组是one two three
检查异常:编译时报错
非检查异常:运行时异常+其他异常(编译时不报错,但也没有继承RuntimeException类)
jvm区域 = 堆+非堆
堆 = 新生代+老年代
= eden+from survivor +to survivor + 老年代
非堆 = 永久代+代码缓存区+java虚拟机栈+本地方法栈
默认 新生代与老年代的比例为1:2
eden:from:to 约等于 8:1:1
元数据区是jdk8以后,用来替代永久代的
顺序是Y(x) X Y(z) Z
1、jps:查看本机java进程信息。 java process status tools
2、jstack:打印线程的栈信息,制作线程dump文件。 java stack
3、jmap:打印内存映射,制作堆dump文件
4、jstat:性能监控工具
5、jhat:内存分析工具 java heap analysis tools
6、jconsole:简易的可视化控制台
7、jvisualvm:功能强大的控制台
byte是1个字节的对象,对于129:
原码 10000001 (由四个字节的int类型裁剪而来,第一位由数值为变为符号位)
补码 10000001
反码 11111110 +1 = 11111111
原码 10000000 = -127
顶层容器不能被其他容器包含 JTree可以被包含
SimpleDateFormat对象是线程不安全的,主要体现在format()和parse()方法。 format()方法中,变量calendar不是线程同步的,多个线程并发执行这个方法时会修改time,所以是线程不安全的。如果要线程安全需要重新实现这个方法,加锁。parse()方法不是原子操作,也会引起线程不安全问题。
Arrays.asList()返回值不是util包下的ArrayList
而是Arrays自定义的一个静态内部类
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable{
}
ConcurrentHashMap使用ReentrantLock 重入锁对象实现同步,ReentrantLock是java实现独占锁,除synchronized的另一种形式,而且比synchronized更丰富。
重入锁是需要显式操作,可控制性比较高。同一个线程,锁可以重复进入。
重入锁可以使用有参构造函数,当参数fair为true时,创建公平锁,也可以为false,创建非公平锁(不计算等待时间)。而synchronized只能创建非公平锁。无参构造默认创建非公平锁。ReentrantLock可以通过newCondition()返回一个Condition对象,通过wait()和singal()等待和唤醒,不同的线程使用不同的Condition,这样就能区分唤醒的线程,而synchronized是随机唤醒的。ReentrantLock提供了一种中断等待锁的机制,通过lock.lockInterruptibly()来实现这个机制。
类继承一个类时,就算两个类都有相同类型的构造方法,但也不能直接调用。必须显式地调用父类的构造方法,或者隐式调用父类的无参构造方法。如果没有无参构造方法(只定义了有参)则会编译报错。
finalize方法是Object类的一个方法,jdk9以后已经过时,如果方法没有被重写,则不会调用这个方法。它的作用是在垃圾回收器工作时,该对象被回收时,释放一些资源或者延缓它的生命。gc判断一个对象应该被垃圾处理的规则是,该对象没有GC roots上的有效引用。如果在finalize()方法中将this指向可达的引用,就可以避免死亡。但是finalize()方法不一定全部执行,可能在执行到某一句就会被杀死。所以关闭文件这样的操作放在finalize()中是不合适的。
http://www.bilibili.com/video/av21061574
/^(https?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。