博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java面向对象(面试题)
阅读量:4071 次
发布时间:2019-05-25

本文共 7359 字,大约阅读时间需要 24 分钟。

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.Classjava.lang.refrection.Methodjava.lang.refrection.Fieldjava.lang.refrection.Constructorjava.lang.refrection.Modifierjava.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    setCollection 的通用方法有:    Iterator()    Add()    Clear();    remove()

21.说出 ArrayList,Vector, LinkedList 的存储性能和特性 HashMap 和 Hashtable 的区别

  • ArrayList Vector:以数组的方式存储,增、删慢,查、改快
  • ArrayList:线程不安全,速度快ArrayList:线程安全,速度慢(synchoronized)
  • LikedList: 以单链表的方式存储,增、删快,查、改慢
  • HashMapHashtable 都实现的 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
map = new HashMap
(); 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运行时系统组件,它负责在运行时查找和装入类文件的类。

你可能感兴趣的文章
PostgreSQL代码分析,查询优化部分,canonicalize_qual
查看>>
PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()
查看>>
ORACLE权限管理调研笔记
查看>>
移进规约冲突一例
查看>>
IA32时钟周期的一些内容
查看>>
SM2椭圆曲线公钥密码算法
查看>>
获得github工程中的一个文件夹的方法
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>
PostgreSQL查询优化器详解之逻辑优化篇
查看>>
STM32中assert_param的使用
查看>>
C语言中的 (void*)0 与 (void)0
查看>>
vu 是什么
查看>>
io口的作用
查看>>
IO口的作用
查看>>
UIView的使用setNeedsDisplay
查看>>
归档与解归档
查看>>
Window
查看>>
为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
查看>>
字符串的截取
查看>>
2. Add Two Numbers
查看>>