1.super()和this()的区别?
this():当前类的对象,super父类对象。
super():在子类访问父类成员和行为,必须承受继承规则的约束,而this代表当前对象,所有的资源都可以访问。在构造函数中,如果第一行没有写super(),编译器会自动插入,但是如果弗雷没有无参构造函数,或这个函数被私有化了,此时必须加入对父类的实例化构造。而this没有此类要求,它本身就进行了实例化的构造。
2. 作用域 public,protected,private,以及不写时的区别?
public:不同包、同一包、类内都可用
private:类内
protected:不同的子类、同一包、类内都可用
不写时:同一包内、类内
3. JAVA 的事件委托机制和垃圾回收机制
java事件委托机制,一个源产生一个事件并将它送到一个或多个监听器那里。在这种方法中,监听器简单的等待,直到它收到一个时间。一旦事件被接受,监听器将处理这个事件,然后返回。
垃圾回收机制(GC),垃圾收集是将分配给对象但不再使用的内存回收或释放的过程。如果一个对象没有指向它的引用或者其赋值为null,JVM的垃圾回收机制就会自动对此对象进行垃圾回收。
4. 什么是 java 序列化,如何实现 java 序列化?
序列化:
可以将一个对象保存到一个文件,通过流的方式在网络上传输,可以将文件的内容读取,转化为一个对象。处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后
的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:
将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法, implements Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如: FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用 ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出(即保存其状态),要恢复的话则用输入流。
5. 一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?
可以。如果这个类的修饰符是public,其类名与文件名必须相同。
6. 排序都有哪几种方法?请列举。用 JAVA 实现一个快速排序?
7. Overload 和 Override 的区别。
overload(重载),一个类多个方法,名称相同,参数个数类型不同
override(重写),子类覆盖父类的方法,将子类传与父类的引用调用的还是子类的方法。
8. 如在 COLLECTION 框架中, 实现比较要实现什么样的接口?
coleection框架中实现compareble接口和comparator接口
9. 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如”我 ABC”4,应该截为”我 AB”,输入”我 ABC 汉 DEF”, 6,应该输出为”我 ABC”而不是”我 ABC+汉的半个”。
public class Mysplit {
public static void main(String[] args) throws Exception{
String source = "abc卫门agag";
split(source, 5);
}
public static void split(String source,int num) throws Exception{
int k = 0;
String temp = "";
for (int i = 0;i < source.length() ;i++ ) {
byte[] b = (source.charAt(i)+"").getBytes();
k += b.length;
if (k > num) {
break;
}
temp += source.charAt(i);
}
System.out.println(temp);
}
}
10.抽象类和接口的区别?
(1)接口可以被多重 implements,抽象类只能被单一 extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static final, 抽象类字段默认是”friendly”(本包可见)
当功能需要累积时用抽象类,不需要累积时用接口。
11.什么是类的反射机制?
通过类(Class 对象),可以得出当前类的 fields、 method、 construtor、 interface、superClass、 modified 等,同时可以通过类实例化一个实例、设置属性、唤醒方法。 Spring 中一切都是返射、 struts、 hibernate 都是通过类的反射进行开发的
12.类的返射机制中的包及核心类?
java.lang.Class
java.lang.refrection.Method
java.lang.refrection.Field
java.lang.refrection.Constructor
java.lang.refrection.Modifier
java.lang.refrection.Interface
13.得到 Class 的三个过程是什么?
- 对象.getClass()
- 类.calss或Integer.type(int) Integer.class(java.lang.Integer)
- Class.forName();
14.如何将数值型字符转换为数字( Integer, Double)?
Integer.parseInt("1234");
Double.parseDouble("0.12");
15.如何格式化日期?
SimpleDateFormate sdf = new SimpleDateFormate("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String str = sdf.format(date);
Java.util.Date d1 = sdf.parse("yyyy-mm-dd");
16.java 中会存在内存泄漏吗,请简单描述.
会。int类型的数值有一定的范围,如果超出数值范围,结果就是内存泄漏。
17.JAVA 语言如何进行异常处理,关键字: throws,throw,try,catch,finally 分别代表什么意义?在 try 块中可以抛出异常吗?
Try:执行部分,产生异常
Catch:捕捉异常
Finally:不管有没有异常都执行
Throws:在方法声明处声明要抛出的异常,调用者必须对其进行处理。
Throw:抛出一个异常,在 try 中可以抛出异常, 一般与声明的异常相同。自定义异常要继承于 Exception 或 Exception 的子类
18.String and StringBuffer 的区别?
String:长度给定不可变,当多个字符串联合时要先转为StringBuffer,再联合,速度慢。
StringBuffer:长度可变,可以将多个字符串值直接联合,效率高
19.用 java 代码编写堆栈
public class Stacks {
static String[] months = {"Jan","Feb","Mar","Apr","May",
"June","Aug","Sep","Oct","Nov","Dec"};
public static void main(String[] args) {
Stack stack = new Stack();
//进栈,先进元素压入栈底,最后的元素在栈顶
for (int i = 0; i < months.length; i++) {
stack.push(months[i]+"");
}
System.out.println("stk = " + stack);
stack.addElement("************");
System.out.println("element 5 = " + stack.elementAt(5));
System.out.println("popping elements: ");
//出栈后进先出,栈顶元素最先被输出
while (!stack.empty()) {
System.out.println(stack.pop());
}
}
}
20.集合的通用方法有那些?通用方法是什么?(操作)
集合 List 的遍历方法有:
Iterator:
Enumeration
For
Get
set
Collection 的通用方法有:
Iterator()
Add()
Clear();
remove()
21.说出 ArrayList,Vector, LinkedList 的存储性能和特性 HashMap 和 Hashtable 的区别
- ArrayList Vector:以数组的方式存储,增、删慢,查、改快
- ArrayList:线程不安全,速度快ArrayList:线程安全,速度慢(synchoronized)
- LikedList: 以单链表的方式存储,增、删快,查、改慢
- HashMap 与 Hashtable 都实现的 Map 接口,HashTable 线程安全,* HashMap* 线程不安全。
22.Collection 和 Collections 的区别。
Collection 是集合的根接口, 其下有 set 及 list
Collections 是集合的算法。
23.Set 里的元素是不能重复的, 那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别?用contains 来区分是否有重复的对象。还是都不用。
在比较时先调用 hashCode 方法,如果不相同,证明不相等。
如果相同,再调用 equals 方法,如果 equals 方法相同,证明相等,不相同, 证明不相等。
==:主要用在基本数据类型及引用
Equals:主要是对象或对象引用的比较。
集合中是否包含某一个元素用 contains 来判断。
24.List, Set, Map 是否继承自 Collection 接口?
List,set 继承于 Collection
Map 没有继承于 Collection,其相对是独立的。
属于 Collection 类型的对象, 可以通过构造函数将一个集合构造成另外一个集合。
25. final, finally, finalize 的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally 是异常处理语句结构的一部分,表示总是执行。
finalize 是* Object* 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
26.heap 和 stack 有什么区别?
栈(stack)是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。
堆(heap)是栈的一个组成元素
27.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; ( s1+1 运算结果是 int 型,需要强制转换类型) short s1 = 1; s1 += 1;(可以正确编译)
28.是否可以继承 String 类?
String 类是final类,不能被继承
29.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
会执行,在return前执行
30.四种会话跟踪技术。
Cookie Session Hidden url 重写
31.编程题: 写一个 Singleton 出来。
//1.饿汉式单例,线程安全
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造子
private Singleton1() {}
//已经自行实例化
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
//2.懒汉式单例,线程不安全
//懒汉式单例类.在第一次调用的时候实例化
public class Singleton2 {
//私有的默认构造子
private Singleton2() {}
//注意,这里没有final
private static Singleton2 single=null;
//静态工厂方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
//3.登记式单例(忽略,一般不用)
//登记式单例类.
//类似Spring里面的方法,将类名注册,下次从里面直接获取。
public class Singleton3 {
private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
static{
Singleton3 single = new Singleton3();
map.put(single.getClass().getName(), single);
}
//保护的默认构造子
protected Singleton3(){}
//静态工厂方法,返还此类惟一的实例
public static Singleton3 getInstance(String name) {
if(name == null) {
name = Singleton3.class.getName();
System.out.println("name == null"+"--->name="+name);
}
if(map.get(name) == null) {
try {
map.put(name, (Singleton3) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(name);
}
//一个示意性的商业方法
public String about() {
return "Hello, I am RegSingleton.";
}
public static void main(String[] args) {
Singleton3 single3 = Singleton3.getInstance(null);
System.out.println(single3.about());
}
}
32.描述一下 JVM 加载 class 文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件的类。