java笔记-做题点VII

java专项练习记录点第七弹。
包括java命令、关于run()和start()的一个栗子、几种获取语句、java回收算法等。


1.java命令:

java用来运行一个.class文件;
javadoc用来生成api文档;
jar用来生成jar包;
javac用来把.java文件编译为.class文件。

2.关于run()和start()的一个栗子:

1
2
3
4
5
6
7
8
9
10
11
12
public static void main(String args[]) {
Thread t = new Thread() {
public void run() {
pong();
}
};
t.run();
System.out.print("ping");
}
static void pong() {
System.out.print("pong");
}

运行结果为:pongping

解释:
在第7行的时候,调用的是t.run();方法,之间调用run方法就是普通的方法调用而已,所以肯定是先执行pong()再执行System.out.print(“ping”);
如果第7行换成t.start()方法,答案就应该选择c,因为t.start()后,线程变为就绪状态,什么时候开始执行时不确定的,可能是主程序先继续执行,也可能是新线程先执行。
所以不是我想的简单的静态方法什么的问题……

3.通过HttpServletRequest. getParameter获取的参数由客户端浏览器和Web容器配置共同决定编码。

4.在Applet中,方法执行的顺序是init(), start(), paint(),stop(),destroy()。



2017-10-17

1.映射(Map)的key不可重复,value可重复。

2.几种获取语句:

getParameter()是获取POST/GET传递的参数值;
getInitParameter()获取Tomcat的server.xml中设置Context的初始化参数;
getAttribute()是获取对象容器中的数据值;
getRequestDispatcher()是请求转发。

3.两个最基本的java回收算法:复制算法和标记清理算法

复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法;
标记清理:一块区域,标记要回收的对象,然后回收,一定会出现碎片,那么引出->
标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象;

两个概念:新生代和年老代

新生代:初始对象,生命周期短的;
永久代:长时间存在的对象;
整个java的垃圾回收是新生代和年老代的协作,这种叫做分代回收。

P.S:Serial New收集器是针对新生代的收集器,采用的是复制算法;
Parallel New(并行)收集器,新生代采用复制算法,老年代采用标记整理;
Parallel Scavenge(并行)收集器,针对新生代,采用复制收集算法;
Serial Old(串行)收集器,新生代采用复制,老年代采用标记整理;
Parallel Old(并行)收集器,针对老年代,标记整理;
CMS收集器,基于标记清理;
G1收集器:整体上是基于标记 整理 ,局部采用复制。

综上:新生代基本采用复制算法,老年代采用标记整理算法。cms采用标记清理。


2017-10-18

1.三个与取整有关的方法:

ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11【注:Math.ceil(-0.5)的结果为-0.0】;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;最难掌握的是round方法,他表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整。

2.一个栗子:

1
2
3
4
5
6
7
8
public class TestClass {
private static void testMethod(){
System.out.println("testMethod");
}
public static void main(String[] args) {
((TestClass)null).testMethod();
}
}

运行正常,输出testMethod

解释:
1)此处是类对方法的调用,不是对象对方法的调用。
2)方法是static静态方法,直接使用”类.方法”即可,因为静态方法使用不依赖对象是否被创建。
null可以被强制类型转换成任意类型(不是任意类型对象),于是可以通过它来执行静态方法。
3)非静态的方法用”对象.方法”的方式,必须依赖对象被创建后才能使用,若将testMethod()方法前的static去掉,则会报 空指针异常 。此处也验证了2)的观点
当然,不管是否静态方法,都是已经存在的,只是访问方式不同。

3.简单记忆线程安全的集合类: 喂!SHE! 喂是指 vector,S是指 stack, H是指 hashtable,E是指:Eenumeration。