Java面试题,陆续更新
一、Java 面向对象
1. 面向对象都有哪些特性以及你对这些特性的理解
封装:其实本质就是隐藏一切可以隐藏的属性,主对外提供简单的接口
继承:继承是从已有类得到继承信息创建新类的过程。
多态:多态性是指允许不同子类型的对象对同一消息作出不同的响应
2.访问权限修饰符public、private、protected, 以及不写(默认)时的区别
3. 如何理解clone对象
3.1 为什么要使用clone对象
当我们在编程的过程中,有的时候我们在使用A对象的时候。有的时候需要用到 A对象中的属性和值和对这些属性值,进行更改
所以这个时候我们就需要一个和A一模一样的B对象,实现这个功能的方法有很多,但是clone是最高效的手段
3.2 new 一个对象的过程和 clone 一个对象的过程区别
new操作符的本质是分配新的内存,在new操作符执行的过程中,我们首先要考虑new后边的类型,因为我们只有知道了,
我们才知道分配多少空间,分配完之后我们在调用构造函数。在填充各个对象,这个过程叫做对象初始化。构造方法返回后,
一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。
clone在第一步是和new相似的,都是分配内存,调用clone方法时,分配的内存和原对象(即调用clone方法
的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完成之后,clone方法返回,一个新的相同
的对象被创建,同样可以把这个新对象的引用发布到外部。
3.3 深度拷贝和浅度拷贝
深度拷贝:这个对象必须要实现Cloneable接口,实现clone方法,并且在 clone 方法内部,把该对象引用的其他对象也要 clone 份,
这就要求这个被引用的对象必须也要实现Cloneable接口并且实现clone方法
二、JavaSE 语法
1. Java有没有goto语句
goto是Java 中的保留字,在目前版本的Java中没有使用。,其中有 goto 和 const,但是这两个是目前
无法使用的关键字,
2. & 和 && 的区别
&&是短路与 ,当前一个条件不里的时候,后边的
3. 在Java中,如何跳出当前的多重嵌套循环
主要有两种,一种是break跳出循环,可以在循环外定义标记break到标记.但是这种会让程序不太优雅,所以不这么使用
第二种就是continue,意义就是跳出本次循环
4. 两个对象值相同 (x.equals(y) == true) ,但却可有不同的hashCode,这句话对不对?
不对,如果两个对象,满足x.equals(y) == true,那么它们的hashCode一定相同向同,如果hashCode相同,x.equals(y) == true
不一定成立。想详细理解可可以观看一下《Effective Java》这本书
5. 是否可以继承String
不可以 因为String是final类,不可以被继承
6. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那 么这里到底是值传递还是引用传递?
值传递,java语言的方法调用只支持值传递,
7. 重载(overload)和重写(override)的区别?重载的方法能否根据返回类型进行区分?
1. 重载是发生在一个类或者子父类中的,方法的重写只能发生在子父类中
2. 重载和重写方法名都必须一致,重载,参数列表中的顺序,类型,个数不同,重写,参数必须一致
3.重写,方法的返回值相同,不能比父类声明更多的异常,重载对返回类型没有特殊要求
8. 为什么函数不能根据返回类型来区分重载
因为在调用的时候不能给返回值类型,如果根据编译器上下文判断,在有些时候调用并不使用值进行接收,
9. char 型变量中能不能存储一个中文汉字,为什么?
可以,因为java中使用的编码是Unicode,一个char类型占两个字节,所以存放一个汉字没有问题
Unicode:不选择任何特定的编码,直接使用字符在字符集中编码,知识统一的方法
10. 抽象类(abstract class)和接口(interface)有什么异同?
1.抽象类可以定义构造器。接口不可以定义构造器
2.抽象类可以有普通成员变量,接口分钟没有普通成员变量
3.抽象类中可以有非抽象方法,接口中不可以
4.接口中的抽象方法都是public,抽象不受约束
5.抽象类可以包含静态方法,接口不能包含静态方法(jdk1.7以前)
6.抽象类中静态成员变量的访问类型可以任意,接口中只能是public static final 类型,并且默认即为public static final
7.一个抽象类只能继承一个类,但是接口可以多实现
11. 抽象的(abstract)方法是否可同时是静态的(static), 是否可同时是本地方法 (native),是否可同时被synchronized
都不能,抽象方法需要子类重写,而静态方法是无法重写的,因此二者是矛盾的,本地方法是由本地代码(C 实现的)实现的方法
而抽象方法是没有实现的,也是矛盾的,synchronized 和方法的实现细节有关,抽象方法不涉及实现细节,因此也是相互矛盾的
12. 阐述静态变量和实例变量的区别?
静态变量:是被static修饰符修饰的变量,也称类变量,它属于类,不属于类的任何一个对象,一个类不管创建多少个对象,静态
变量在内存中有且仅有一个拷贝,静态变量可以实现让多个对象共享内存
实例变量:必须依赖于某一实例,需要先创建对象然后通过对象才能访问到它,
13. ==和equals的区别
==:比较的是内存地址
equals:比较的是值
14.String s = "Hello";s = s + " world!";这两行代码执行后,原始的String对象 中的内容到底变没?
没变。因为String是被设计成不可变的类,所以它的所有对象都是不可变的。如果想有可变的可以用,StringBulider
三、Java 中的多态
1. Java中实现多态的机制是什么?
通过具体的实现类对对象,指向父类或接口,
四、Java 的异常处理
1. Java中异常分为哪些种类
(1) 编译时异常,也叫强制性异常,和CheckedException
(2)运行时异常,也叫没强制性异常和RuntimeException