首页 > 代码库 > java遇见的问题分析
java遇见的问题分析
下面就一些java的一些基本问题进行解释。其中蓝色部分为handsomecui的主观看法
synchronized的参数代表的是“对象锁”代表的是不同的线程在synchronized块里,
同时只有一个线程能执行该代码块,而类的不同实例之间是互不影响的。
比如Person A = new Person(),Person B = new Person().A和B之间是不受synchronized制约的。
有三种方式可以用来创建线程:
1.继承Thread类
2.实现Runnable接口
3.应用程序可以使用Executor框架来创建线程池
三. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?
“static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。
Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。
static方法跟类的任何实例都不相关,所以概念上不适用。
四.是否可以在static环境中访问非static变量?
static变量在Java中是属于类的,它在所有的实例中的值是一样的。
当类被Java虚拟机载入的时候,会对static变量进行初始化。
如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。
(注意,非static变量是实例化后才被创建,而static变量是类创建时就被创建)
五.
int 是基本数据类型
Integer是其包装类,注意是一个类。
为什么要提供包装类呢???
1.为了在各种类型间转化,通过各种方法的调用。否则 你无法直接通过变量转化。例如int x = Integer.valueOf("66");
2.泛型 List<Integer> nums;
这里<>需要类,要用Integer
六.Java中intValue,parseInt,Valueof 这三个关键字的区别?
int a = Integer.parseInt("123");(相当于把“123”转化为基本数据)
Integer b = Integer.valueOf("123");(相当于把“123”转化为一个Integer对象)
int c = b.intValue();(将123的对象表示形式转化为基本数据123)
也就是 Integer.valueOf("123").intValue() 等价于 Integer.parseInt("123")
七.java不支持多继承,但可以实现多个接口。
八.synchronized用在方法上级别是粗粒度锁,用在代码块上是细粒度锁。
九.Java集合类框架的基本接口有哪些?
- Collection:代表一组对象,每一个对象都是它的子元素。
- Set:不包含重复元素的Collection。
- List:有顺序的collection,并且可以包含重复元素。
- Map:可以把键(key)映射到值(value)的对象,键不能重复。
ArrayList和 LinkedList 实现了List接口,HashSet实现了Set接口,这几个都比较常用;
HashMap 和HashTable实现了Map接口,并且HashTable是线程安全的,但是HashMap性能更好
java.util.Collection [I]
|—java.util.List [I]
|—java.util.ArrayList [C]
|—java.util.LinkedList [C]
|—java.util.Vector [C]
|—java.util.Stack [C]
|—java.util.Set [I]
|—java.util.HashSet [C]
|—java.util.SortedSet [I]
|—java.util.TreeSet [C]
java.util.Map [I]
|—java.util.SortedMap [I]
|—java.util.TreeMap [C]
|—java.util.Hashtable [C]
|—java.util.HashMap [C]
|—java.util.LinkedHashMap [C]
|—java.util.WeakHashMap [C]
java遇见的问题分析