一定要懂得的JAVA知识。1
二十天之前我和我哥研究了一下JAVA基础题,这基本上涵盖了市面上容易碰到的问题。
我和我哥也是查了网上许多的答案之后找到最佳的解释。
共享之~。
===============
1,谈谈final, finally, finalize的区别。
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父
类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final
,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中
只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的
catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前
做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是
在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() 方法以整理系统资源或者
执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
2,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实
现)interface(接口)?
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,
由另一个内部类实现。
3,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统)。
Nested Class (一般是C 的说法),Inner Class (一般是JAVA的说法)。Java内部类与C 嵌套类最大
的不同就在于是否有指向外部的引用上。具体可见http:
//www.frontfree.net/articles/services/view.asp?id=704&page=1
注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2
不能从一个static内部类的一个对象访问一个外部类对象
4,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何
区别?
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相
等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的
内容和类型相配的话,返回真值。
5. HashMap和Hashtable的区别
http://www.matrix.org.cn/thread.shtml?topicId=17224&forumId=19
Hashtable和HashMap的区别:
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应
用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制
。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是
在多线程的环境中也是安全的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当
get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此
,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判
断。
6. 多线程同步的概念
http://www.moon-soft.com/doc/45001.htm
每个Object都会有1个锁.
同步就是串行使用一些资源.
多线程中对共享、可变的数据进行同步.
对于函数中的局部变量没必要进行同步.
对于不可变数据,也没必要进行同步.
多线程中访问共享可变数据才有必要.
http://blog.csdn.net/treeroot/archive/2005/01/14/254008.aspx
http://www.chinaitpower.com/A200507/2005-07-24/165921.html
同步其实就是当一个线程执行一段代码的时候,把他锁定,其他线程不能调用这段代码,等第一个线
程把这段代码执行完了,第二个线程再执行
------------------------------------------------
每个Object都会有1个锁,同步就是串行使用一些资源.
------------------------------------------------
7. Collection 和 Collections的区别?
Collections是个java.util下的类,它包含有各种有关集合操作的静态方法。
-- 复制、添加元素、修改元素、对元素进行排序、交换俩个元素的位置
Collection是个java.util下的接口,它是各种集合结构的父接口。
8.GC是什么? 为什么要有GC?
GC是垃圾收集器。Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集
,可以调用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
9.String s = new String("xyz");创建了几个String Object?
两个
10. short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为
s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确 -- 没有赋值过程
11.sleep() 和 wait() 有什么区别?
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这
是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非
(a)“醒来”的线程具有更高的优先级
(b)正在运行的线程因为其它原因而阻塞。
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被
调对象进入等待状态,直到被唤醒或等待时间到。
12.数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有有length()这个方法。
String[] test = {"",""};
int iLength = test.length;
String test2 = "";
int iLength2 =test2.length();
13.abstract class和interface有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基
本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。
----------------------------------------------------------------------------------------
----------
不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的
一个实例。
----------------------------------------------------------------------------------------
----------
不能有抽象构造函数或抽象静态方法。
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子
类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样
的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成
员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,
它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调
用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引
用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接
口。
14.启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由
JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线
程。
http://www.pconline.com.cn/pcjob/process/sun/article/0509/696138.html
15.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete
class)?
接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须
有明确的构造函数。
16.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
可以,但是其它线程不可以进入此对象的这个synchronized方法
17.是否可以继承String类?
String类是final类故不可以继承
18.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现
。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的
对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法
的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
18.1 如果同一个类里的两个方法有一样的参数,但是返回值类型不同,这是重载吗?
-- 代码错误
19.Constructor与Method的区别?构造器Constructor是否可被override?
构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。
http://www.ccnyddm.com/AdvJava/java_constructor_tutorial.htm
Topic
Constructors
Methods
Purpose
Create an instance of a class
Group Java statements
Modifiers
Cannot be abstract, final, native, static, or synchronized
Can be abstract, final, native, static, or synchronized
Return type
No return type, not even void
void or a valid return type
Name
Same name as the class (first letter is capitalized by convention) -- usually a noun
Any name except the class. Method names begin with a lowercase letter by convention --
usually the name of an action
this
Refers to another constructor in the same class. If used, it must be the first line of
the constructor
Refers to an instance of the owning class. Cannot be used by static methods
super
Calls the constructor of the parent class. If used, must be the first line of the
constructor
Calls an overridden method in the parent class
Inheritance
Constructors are not inherited
Methods are inherited
Compiler automatically supplies a default constructor
If the class has no constructor, a no-argument constructor is automatically supplied
Does not apply
Compiler automatically supplies a default call to the superclass constructor
If the constructor makes no zero-or-more argument calls to super, a no-argument call to
super is made
Does not apply