1.ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。
2.Arrays.asList()。将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。
3.SimpleDateFormat对象是线程不安全的
4.
final意义:最终的,不可改变的。
1、修饰变量,为常量,值不可变;
2、修饰对象,值可变,引用不变;
3、修饰方法,方法不可重写;
4、修饰类,无子类,不可以被继承,更不可能被重写。
5,
。
堆中存放类数据,类的成员变量放在堆中,方法的成员变量放在栈中。。
如:
1
2
3
4
5
6
7
|
class A {
private String a = “aa”;
public boolean methodB() {
String b = “bb”;
final String c = “cc”;
}
} |
a、b、c分别在内存的___堆区、栈区、栈区_存储区存放。
Java程序的种类有:
(a)内嵌于Web文件中,由浏览器来观看的_Applet
(b)可独立运行的 Application
(c)服务器端的 Servlets
7.
操作数 1 类型 |
操作数 2 类型 |
转换后的类型 |
byte 、 short 、 char |
int |
int |
byte 、 short 、 char 、 int |
long |
long |
byte 、 short 、 char 、 int 、 long |
float |
float |
byte 、 short 、 char 、 int 、 long 、 float |
double |
double |
8、优先级 单目 >运算>移位>比较>按位>逻辑>三目 >赋值 ,其中只有单目、三目、赋值是从右到左的。。淡云一笔安洛三幅
9、多态:父类的引用指向子类的实例。
比如 Parent p = new Child()
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
如果有,再去调用子类的同名方法(若子类已经覆盖,此时父类的方法表中会用子类的覆盖方法代替自己的方法,所以调用p.run()就是调用子类的覆盖方法)。
静态方法特殊,静态方法只能继承,不能覆盖,如果子类有和父类相同的静态方法,只是起到隐藏父类方法的作用。这时候,谁的引用就调用谁的方法。
10、Java标识符由数字,字母和下划线(_),美元符号($)组成。在Java中是区分大小写的,而且还要求首位不能是数字。最重要的是,Java关键字 不能当作Java标识符。
11、 static 方法中没有this 这么一说。。在一个类A里面,静态方法中不能调用当前类中的非静态成员变量和方法,因为他们都还不存在。因为非静态是属于对象的,对象存在才能通过对象调用他们。;但是在静态方法中,new了这个类了,然后用这个创建出来的对象调用它的非静态成员和方法是可以的,因为创建是,它的成员变量已经初始化了。如A类有静态方法b和非静态方法c,在b中直接调用c方法是不行的,但是在b中A a=new A(),a.c().先创建,再调用,这样是可以的,因为此时对象已经存在了。
12、
A.java用来运行一个.class文件
B.javadoc用来生成api文档
C.jar用来生成jar包
D.javac用来把.java文件编译为.class文件
13、
HashTable和HashMap区别
①继承不同。
public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map
②
Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。
③
Hashtable中,key和value都不允许出现null值。
在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。
④两个遍历方式的内部实现上不同。
Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
⑤
哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
⑥
Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
17、子类继承父类,在父类中使用了this关键字,而这个this代表的对象是:当前运行类。当前子类运行(new 子类),则代表子类,父类运行则代表父类。如果在子类中使用this ,当前指子类。
18、在try-finally中,当try中返回一个变量,如return a.但是finally中对a做了修改(finally中没有return a),此时try中还是返回没有修改的a,因为return之前会将return的内容保存在临时栈中,再去执行finally内容。不过当finally中有return语句,就会覆盖原来的return
19、采用GB2312或GBK编码方式时,一个中文字符占2个字节; 在Java中,char类型正好是2个字节。所以在java中以前面那种方式编解码,char a='中'是正确的。
20、
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的,但是finally也是在return之前执行;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。finally中有return,会覆盖前面的return
重载的概念是:
方法名称相同,参数个数、次序、类型不同
因此重载对返回值没有要求,可以相同,也可以不同
但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载
24、map<key,value>中,value可以重复,不同的key可以对应相同的value。
25、
Java致力于检查程序在编译和运行时的错误。
Java虚拟机实现了跨平台接口
类型检查帮助检查出许多开发早期出现的错误。
Java自己操纵内存减少了内存出错的可能性。
Java还实现了真数组,避免了覆盖数据的可能。
注意,是避免数据覆盖的可能,而不是数据覆盖类型
26.
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
ThreadLocal存放的值是线程封闭,线程间互斥的,主要用于线程内共享一些数据,避免通过参数来传递
线程的角度看,每个线程都保持一个对其线程局部变量副本的隐式引用,只要线程是活动的并且 ThreadLocal 实例是可访问的;在线程消失之后,其线程局部实例的所有副本都会被垃圾回收
在Thread类中有一个Map,用于存储每一个线程的变量的副本。
对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式
29.