Java面试知识点(一)

                    Java面试知识点(一)

1.Java语言有哪些优点?

1)Java为纯面向对象的语言
2)平台无关性 一次编译,到处运行 Java为解释性语言
3)Java提供了很多内置的类库,可以简化开发人员的程序设计工作,缩短项目开发时间
4)提供了对Web应用开发的支持 Applet,servlet,JSP开发Web应用程序;Socket,RMI开发分布式应用程序
5)具有较好的安全性和健壮性 安全性:Java提供了一个防止恶意代码攻击的安全机制 健壮性:Java的强类型机制、垃圾回收器、异常处理、安全机制检查
6)去除了C++中难以理解的特性 头文件、指针、结构、虚拟基础类、多重继承等

2. Java与C/C++有什么异同?

1)Java为解释性语言,而C/C++为编译性语言 可展开讲
2)Java为纯面向对象语言,所有代码都在类中实现,除基本数据类型外,其他都是类。Java中不存在全局变量或全局函数,而C/C++存在
3)Java中没有指针
4)与C++相比虽无多重继承,但可以利用多个接口实现
5)在C++中,需要开发人员管理内存的分配,而Java提供了垃圾回收器来实现垃圾的自动回收。
在C++中,通常把释放资源的代码放到析构函数中,而Java中可以利用finalize()方法,当垃圾回收器将要释放无用对象的内存时,会首先调用该对象的finalize()方法
C++支持运算符重载,而Java不支持。
C++支持预处理,而Java没有预处理器(虽不支持,但它的import机制与其类似)
C/C++支持goto,而Java不提供。
C/C++支持自动强制类型转换,而Java不支持,必须显式操作
C/C++结构和联合的所有成员均为公有,而Java将所有内容封装到类中
Java具有平台无关性,即每种数据类型都分配固定长度;而C/C++同一个数据类型在不同平台上分配不同字节数
Java提供对注释文档的内建支持
Java包含一些标准库,用于完成特定任务,同时这些库简单易用,能够大大缩短开发周期;而C++则依靠一些非标准的、由其他厂商提供的库

3. 为什么需要public static void main(String []args)这个方法?

public static void main(String []args)为Java程序的入口方法,JVM在运行程序时,会首先查找main()方法。
public表明任何类或对象都可以访问这个方法
static表明main()方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动时就是按照上述方法的签名(必须有public与static修饰,返回值为void,方法的参数为字符串数组)来查找方法的入口地址,若能找到,就执行;找不到,则会报错
void表明方法没有返回值
main是JVM识别的特殊方法名,是程序的入口方法
字符串数组参数args为开发人员在命令行状态下与程序交互提供了一种手段

通常来讲,要执行一个类的方法,必须先实例化一个类对象,然后通过类对象来调用这个方法。但main()是入口方法,此时还没有实例化对象。

(1)main()方法的其他定义格式:
a.public与static无顺序关系 static public void (String []args)
b.public static final void main(String []args)
c.public static synchronized void main(String []ars)
不管哪种定义方式,都必须保证main()的返回值为void,并用static与public修饰。同时main()为入口方法,不能用abstract修饰
(2)同一个.java文件是否可以有多个main()方法
虽然每个类中都可以定义main()方法,但是只要与文件名相同的用public修饰的类的main()方法才能作为整个程序的入口方法

4. 如何实现main()方法执行前输出“Hello world”?

在Java中,由于静态块在类被加载时就会被调用,因此可以在main()方法执行前,利用静态块实现输出“Hello world”的功能

public class Test{
    public static void main(String []args){
        System.out.println("Hello world2");
    }
    static{
        System.out.println("Hello world1");
    }
}

静态块不管顺序如何都会在main()方法执行之前执行

5. Java程序初始化的顺序是什么?

在Java中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数构造对象。
Java程序初始化遵循三原则:a.静态对象(变量)优先于非静态对象(变量)初始化
b.父类优先于子类进行初始化
c.按照成员变量的定义顺序进行初始化
父类静态变量>父类静态代码块>子类静态变量>子类静态代码块>父类非静态变量>父类非静态代码库块>父类构造函数>子类非静态变量>子类非静态代码块>子类构造函数

6. Java中的作用域有哪些?

在Java语言中,变量的类型主要有:成员变量、静态变量、局部变量。
成员变量的作用范围与类的实例化对象的作用范围相同,当类被实例化时,成员变量就会在内存中分配空间并初始化,直到这个被实例化对象的生命周期结束时,成员变量的生命周期才结束。
static修饰的静态变量不依赖特定的实例,而是被所有实例所共享,即一个类被加载,JVM就会给类的静态变量分配存储空间,故可以通过类名和变量名来访问静态变量
局部变量作用域为它所在的花括号内

成员变量的中作用域:
public 所有类或对象都可以直接访问
protected 该类自身,与它在同一个包的其他类,在其他包中的子类
default 该类自身与位于同一包中的类
private 只有该类具有访问权限

注:这些只能修饰成员变量,不能修饰局部变量。
private与protected不能用来修饰类(只有public、default、abstract、final能修饰类)

7. 一个Java中的是否可以定义多个类?

可以定义多个类,但最多只能有一个类被public修饰,并且这个类名与文件名必须相同。
若这个文件中没有public类,则文件名随便是一个类名字即可。

8. 什么是构造函数?

构造函数是一种特殊的函数,用来在对象实例化时初始化对象的成员变量。
构造函数特点:
1)必须与类的名字相同,并且不能有返回值(返回值也不能为void)
2)每个类可以有多个构造函数(若未自己构造,编译器会提供一个无参构造)
3)构造函数可以有0、1或1个以上的参数
4)构造函数总是伴随着new操作一起调用,且不能由程序的编写者直接调用,必须由系统调用(构造函数在对象实例化时会被自动调用,且只运行一次)
5)构造函数的主要作用是完成对象的初始化操作
6)构造函数不能被继承,故也不能被覆盖,但可以被重载
7)子类可以通过super来显式调用父类的构造函数,当父类没有提供无参数的构造函数时,子类的构造函数必须显式调用父类的构造函数。若父类提供了无参数的构造函数,子类的构造函数可以不显示地调用(编译器会默认调用父类提供的无参构造函数)。当有父类时,在实例化对象时会先执行父类的构造函数,再执行子类的构造函数
8)当父类和子类都没有定义构造函数时,编译器会为父类生成一个默认的无参构造函数。此外,默认构造器的修饰符只跟当前类的修饰符有关。

普通方法是否可以与构造函数有相同的函数名?
可以。(可编写程序测试一下)

9. 为什么Java文件中有些接口没有任何方法?

标识接口:在接口内部没有声明任何方法。
标识接口对实现它的类没有任何语义要求,它仅仅充当一个标识的作用,用来表明实现它的类属于一个特定的类型。
Java类库中已存在的标识接口有Cloneable和Serializable等。在使用时会用instanceof来判断实例对象的类型是否实现了一个给定的标识接口。

关于接口的一些理解:接口是抽象方法定义的集合(接口中可以定义一些常量值),是一种特殊的抽象类。接口只包含方法的定义,没有方法的实现。接口中所有方法都是抽象的。接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰。可利用一个类实现多个接口来达到多重继承。

10. Java中的clone方法有什么作用?

Java在处理基本数据类型时,都是采用值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是引用传递(传递的是一个对象的引用)的方式执行。对象除了在函数调用时是引用传递,在使用“=”赋值也采用引用传递。
Java中的所有类默认都继承自Object类,而Object类中提供了一个clone()方法。这个方法作用是返回一个Object对象的复制。这个复制函数返回的是一个新的对象而不是一个引用。
浅复制与深复制有什么区别?
浅复制:被复制对象的所有变量都含有与原来对象相同的值,而所有其他对象的引用仍然指向原来的对象。换言之,浅复制仅仅复制所考虑的对象,而不复制其他引用的对象。
深复制:被复制对象的所有变量都含有与原来对象相同的值,除去那些引用其他对象的变量。那些引用其他对象的变量将指向被复制的新对象,而不再是原有的那些被引用的对象。换言之,深复制把复制的对象所引用的对象都复制了一遍。

11. 什么是反射机制?

反射机制提供的功能主要有:
得到一个对象所属的类;获取一个类的所有成员变量和方法;在运行时创建对象;在运行时调用对象的方法。
在反射机制中,class是一个非常重要的类,如何获取class类?
①class.forName(“类的路径”);②类名.class;③实例.getClass();

Java创建对象有哪几种方式?
①通过new语句实例化一个对象;
②通过反射机制创建对象;
③通过clone()方法创建一个对象;
④通过反序列化的方式创建对象。

12. package有什么作用?

package是.java文件、.class文件以及其他resource文件有条理地进行一个组织,以供使用。
package主要有以下作用:
①提供多层命名空间,解决命名冲突,通过使用package,使得处于不同package中的类可以存在相同的名字。
②对类功能进行分类,使项目组织更加清晰。

13. 如何实现类似于C语言中函数指针的功能?

C语言中的函数指针,重要功能是实现回调函数。
什么是回调函数?指函数先在某处注册,而它将在稍后某个需要的时候被调用。
回调函数一般用于截获消息、获取系统信息或处理异步事件。
在Java中如何实现类似函数指针的功能?
利用接口与类来实现同样的效果。先定义一个接口,然后在接口中声明要调用的方法,接着实现这个接口,最后把这个实现类的一个对象作为参数传递给调用程序,调用程序通过这个参数来调用指定的函数,从而实现回调函数的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值