Java面试总结(一)

Java面试题总结(一)

Java基础部分

1.类,对象,方法,实例变量,泛型
类:类是一个模板,它描述一类对象的行为和状态。
对象:对象是类的一个实例,有状态和行为。
方法:方法就是行为,一个类可以有方法。逻辑运算,数据修改以及所有行为动作都是在方法中实现。
泛型:所操作的数据类型被指定为一个参数。
2.Java中8大基本数据类型
byte: 数据类型是8位,1个字节,用来计量存储容量的一种计量单位。
char:是一个单一的16位的Unicode字符,2个字节,可存储一个汉字。
short:数据类型为16 位、有符号的以二进制补码表示的整数,2个字节。
int:数据类型为32位、有符号的以二进制补码表示的整数,4个字节。
float:数据类型为单精度、32位的浮点数,4个字节。
double:数据类型是双精度、64 位的浮点数,8个字节。
long:数据类型为64 位、有符号的以二进制补码表示的整数,8个字节。
Boolean: boolean数据类型表示一位的信息;只有两个取值:true 和 false;这种类型只作为一种标志来记录 true/false 情况;默认值是 false
3.在内存有限的情况下实现两数互换位置(即不可创建第三个数)
方法一:使用+=或-=的方法,使相邻数互换位置。
方法二:使用平移的方法,使成2的n倍数关系的两个数互换位置。
例如:2和16
2<<3,左移,将一个数左移N位,就相当于乘以2的n次方。
16>>3,右移,将一个数右移N位。就相当于除以2的n次方。
4.“==”和equals的区别(重点)
区别主要存在在引用数据类型上
1)==为比较两侧的对象是否同为一对象,是用内存地址来比较
equals是方法,默认是用内存地址来比较,重写后,主要用来比较两侧的对象的是否相同。
2)==两侧可以都为null,而equals左侧的引用指向的对象不能空(注:在使用equals时常量尽量放在左侧,防止出现空指针异常)
5.实例变量和静态变量的区别
1)在语法上:静态变量前要加static关键字,而实例变量前不加
2)在运行上:静态变量可以直接使用类名来引用,而实例变量必须创建对象之后才能通过这个对象来使用。
6.Java中修饰符的分类及简单介绍
Java中修饰符分为两类:访问修饰符和非访问修饰符
访问修饰符:
public:对所有类可见。
protected: 对同一包内的类和所有子类可见。
default:在同一包内可见,不使用任何修饰符。(没写任何访问修饰符时)
private:在同一类内可见。
非访问修饰符:为了实现一些其他的功能,Java 所提供。
static :用来修饰类方法和类变量,可以在没有所属类的实例变量的情况下被访问。
final :用来修饰类、方法和变量,类不能够被继承,方法不能重新定义,变量不可修改的。
abstract :用来创建抽象类和抽象方法。
synchronized 和 volatile :主要用于线程的编程。
7.Java中的方法覆盖(overriding)和方法重载(overloading)区别
Java中方法的重载发生在同一个类里边两个或多个不同的方法的方法名相同,但参数不同的情况。
方法覆盖是说子类重新定义父类的方法,必须有相同的方法名,参数列表和返回类型。
8.接口(interface)和抽象类(abstract class)的区别
1)抽象类可以有构造方法,接口不能有构造方法。
2)抽象类中包括包含非抽象的普通方法和静态方法,接口的所有方法必须是抽象的。
3)接口中抽象方法的访问类型只能是public类型的,并且默认即为public abstract类型,抽象类的方法的访问类型可以是public、protected
4)抽象类中可以有普通成员变量,接口中没有普通成员变量
5)抽象类中和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final 类型
9.讲述jvm、jdk、jre
Java运行时环境(JRE)是将要执行Java程序的Java虚拟机。它同时也包含了执行applet需要的浏览器插件。
Java开发工具包(JDK)是完整的Java软件开发包,包含了JRE,编译器和其他工具,可以让开发者开发、编译、执行Java应用程序。
Java虚拟机(JVM)是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
10.简述JVM原理及其生命周期
JVM是java的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行
JVM生命周期:
(1)JVM实例的诞生
当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(String[] args)函数的class都可以作为JVM实例运行的起点。
(2)JVM实例的运行
main()作为该程序初始线程的起点,任何其他线程均由该线程启动。JVM内部有两种线程:守护线程和非守护线程,main()属于非守护线程,守护线程通常由JVM自己使用,java程序也可以标明自己创建的线程是守护线程。
(3)JVM实例的消亡
当程序中的所有非守护线程都终止时,JVM才退出;若安全管理器允许,程序也可以使用java.lang.Runtime类或者java.lang.System.exit()来退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值