1.jdk1.5之后的三大版本?
javase(java 2 platform standard edition)标准版
javaee(java 2 platform enterprise edition)企业版
javame(java 2 platform micro edition)微型版
2.JVM、JRE和JDK的关系?
JVM:java virtual machine(java虚拟机),java程序运行在虚拟机上,不同的操作系统有不同的虚拟机,因此java可以实现跨平台。
JRE:java runtime evironment,java运行环境,包括java虚拟机和java程序运行需要的核心类库
JDK:java development kit,java开发工具包,包括jre和开发工具如编译工具(javac.exe),运行工具(java.exe)
3.什么是跨平台性?原理是什么?
一次编译到处运行,可以在多个操作系统上运行
java程序运行在虚拟机上,只要操作系统安装了虚拟机就能运行java程序
4.Java语言有哪些特点?
简单易学(java的语法和c,c++语言很相似)
面向对象(封装,继承,多态)
平台无关性(java虚拟机实现平台无关性)
支持网络编程
支持多线程(同一时间执行多项任务)
健壮性(java语言的强类型机制,异常处理,垃圾的自动收集)
安全性
5.什么是字节码?采用字节码的最大好处是什么?
java源代码编译之后产生的文件(.class文件),他不面向任何处理器,只面向虚拟机
在一定程度上解决了传统解释性语言效率低的问题,同时又保留了其可移植性的特点
6.Oracle JDK 和 OpenJDK 的对比
Oracke JDK版本每三年发布一次,而Open JDK版本每三个月发布一次
Open JDK是开源的,Oracke JDK不是完全开源的,Oracke JDK是Open JDK的一个实现
Oracle JDK比Oracle JDK稳定
7.java和c++的区别?
都是面向对象语言,都支持封装继承和多态
java不提供指针来访问内存,有垃圾回收机制
java的类只支持单继承,接口可以实现多继承,c++支持多重继承
8.Java有哪些数据类型
基本数据类型:byte1,short2,int4,long8,folat4,double8,boolean,char2
引用数据类型:类,接口,数组,枚举
9.switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上?
byte,short,char,int,string.enum
10.用最有效率的方法计算 2 乘以 8
2<<3 左移三位2*2^3
11.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
12 11 加0.5向下取整
12.float f=3.4;是否正确?
错,3.4默认是double类型,要进行强制类型转换
13.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
前者错,1是int类型,需要强制类型转换
后者对,相当与s1=(int)(s1+1) ,有隐士的强制类型转换
14.什么Java注释?
解释说明程序文字
单行注释: //
多行注释: /* */
文档注释: /** */
15.访问修饰符 public,private,protected,以及不写(默认)时的区别?
| 当前类 | 同包 | 子类 | 其他包 | |
| private | 可以 | 不可以 | 不可以 | 不可以 |
| default | 可以 | 可以 | 不可以 | 不可以 |
| protected | 可以 | 可以 | 可以 | 不可以 |
| public | 可以 | 可以 | 可以 | 可以 |
16.Java 有没有 goto关键字
有
17.&和&&的区别
&按位与
&&逻辑与,短路与
18.final finally finalize区别
被final修饰的类不可被继承
被final修饰的方法不可被重写
被final修饰的基本数据类型变量不可被改变,引用数据类型的引用不可被改变,引用指向的对象可以被改变
finally和try-catch一起使用,不管是否出现异常,都会被执行,用来关闭资源
finalize是object的方法,垃圾回收器准备好对象占用的存储空间,调用finalize(),在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
19.this关键字的用法
当前对象的引用
引用本类构造函数
区分成员变量与方法形参
20.super关键字的用法
直接父类的引用
调用父类构造函数
区分字类和父类同名成员变量
21.this与super的区别
this和super均需要放在构造方法第一行
this和super指向一个对象,均不可在static环境中使用
this可以调用构造器,却不能同时调用两个
this是指向自身对象的引用,super是关键字
22.static存在的主要意义
不创建对象也能调用成员变量和方法
被static修饰的成员变量和方法,被类的实例共享,随类的加载而加载,优先对象存在
静态代码块优化程序性能,在类被加载的时候,依次执行static,并且只执行一次。
修饰成员变量,修饰成员方法,静态代码块
静态只能访问静态。非静态可以访问静态,也可以访问静态
26.break ,continue ,return 的区别及作用
跳出一层循环
跳出本次循环
结束方法,返回一个值
27.在 Java 中,如何跳出当前的多重嵌套循环
定义标签,break 标签;。
28.面向对象和面向过程的区别
面向过程:性能比面对对象高,因为类调用时需要实例化,消耗资源。单片机,嵌入式开发,linux/uinx等一般采用面向过程开发,性能是最重要的。
没有面向对象易维护,易扩展,易复用
面向对象:易维护,易扩展,易复用.由于面向对象有封装,继承,多态等特性,可以设计出低耦合的系统。
性能没有面向对象高
29.面向对象三大特性
抽象:将对象的共同特征总结出来构造类,包括数据抽象和行为抽象。
继承:子类继承父类
封装:隐藏属性和实现细节,对外提供公共访问方式
多态:相同或不同的类对同一消息做出不同的响应
30.什么是多态机制?Java语言是如何实现多态的?
相同或不同的类对同一消息做出不同的响应
重写(运行时多态),重载(编译时多态)
31.面向对象五大基本原则是什么?
单一职责原则,开发封闭原则,里氏代换原则,接口分离原则,依赖倒置原则
32.抽象类和接口的对比
都不能被实例化,都包含抽象方法
| 抽象类 | 接口 | |
| 声明 | abstract | interface |
| 实现 | extend | implement |
| 构造器 | 有构造器 | 无构造器 |
| 修饰符 | 任意的 | 属性:public static final,方法:public |
| 多继承 | 单继承 | 多继承 |
| java8引入了默认方法 |
33.普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法
普通类能被实例化,抽象类不能被实例化
44.抽象类能使用 final 修饰吗?
不能,矛盾
45.创建一个对象用什么关键字?对象实例与对象引用有何不同?
new,实例在堆内存中,引用在栈内存中
46.成员变量与局部变量的区别有哪些
成员变量:方法外部,类内部定义的变量
局部变量:方法或者语句内部定义的变量,就近原则
| 成员变量 | 局部变量 | |
| 作用域 | 整个类 | 方法体,语句体 |
| 存储位置 | 堆内存 | 栈内存 |
| 生命周期 | 和对象一样 | 方法调用完,语句结束后 |
| 初始值 | 有默认值 | 没有默认值,使用前必须赋值 |
47.在Java中定义一个不做事且没有参数的构造方法的作用
执行子类构造方法之前,调用父类构造方法
48.在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是?
帮助子类做初始化工作
49.一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么?
完成对象的初始化工作
能,有默认的无参构造方法
50.构造方法有哪些特性?
名字与类名相同
没有返回值,不能加void关键字
生成对象时,自动执行,无需调用
51.静态变量和实例变量区别?
静态变量属于类,在类初次加载时被实例化,在内存中只有一份
实例变量属于实例,在创建实例时被初始化,在内存中可能有多份
52.在一个静态方法内调用一个非静态成员为什么是非法的?
静态方法先于非静态成员存在
53.什么是方法的返回值?返回值的作用是什么?
方法体执行后产生的结果,接收结果
54.什么是内部类?
类中的类
55.内部类的分类有哪些
成员内部类,静态内部类,局部内部类,匿名内部类
56.内部类的优点
一个内部类可以访问外部类所有成员,包括私有数据
不为同一包的其他类可见,有很好的封装性
有效实现了多重继承,优化了java单继承的缺陷
很方便的定义回调
57.内部类有哪些应用场景
算法场合
解决非面向对象的语句块
适当使用内部类,使得代码更加灵活和富有扩展性
当某个类除了它的外部类,不在被其他类使用时
58.局部内部类和匿名内部类访问局部变量的时候,为什么变量必须要加上final?
生命周期不一样,局部变量存储在栈中,当方法结束非dinal的局部变量就被销毁
59.构造器(constructor)是否可被重写(override)?
构造器不能被继承,因此不可被重写,但可被重载
60.重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
重载:发生在同一个类中,方法名相同参数列表不同,与返回值无关
重写:发生在父子类中,方法名和参数列表必须相同,返回值小于父类,抛出异常小于父类,修饰符大于父类
61.== 和 equals 的区别是什么?
==基本数据类型比较的是值,引用数据类型比较的是地址
euqals判断两个对象是否相等,类没有覆盖equals等价于==,类覆盖equals比较内容
62.hashCode 与 equals (重要)
63.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
值传递,调用过程中对象的引用不会被改变,对象的内容会被改变
65.值传递和引用传递有什么区别?
值传递传递的是值的拷贝
引用传递传递的是引用的地址
66.JDK 中常用的包有哪些?
java.lang:系统的基础类
java.io:这里是输入与输出有关的类,比如文件操作
java.noi:为了完善io包中的功能,提高io包性能而写的新包
java.net:与网络有关的包
java.util:系统辅助类,特别是集合
java.sql:数据库操作有关的类
67:java和javax有什么区别?
java包的扩展
68.java 中 IO 流分为几种?
输入流/输出流
字节流/字符流
InputStream/OutputStream
Reader/Wtriter
69.BIO,NIO,AIO 有什么区别?
70.Files的常用方法都有哪些?
Files.exists()检测文件路径是否存在
Files.createFile()创建文件
Files.createDirectory()创建文件夹
Files.delete()删除一个文件或目录
Files.copy()复制文件
Files.move()移动文件
Files.size()查看文件个数
Files.read()读取文件
Files.write()写入文件
71.什么是反射机制?
在java运行状态中,对于任意一个类,都能知道这个类的所有属性和方法,对于任意一个对象都能调用它任意一个属性或方法,这种动态获取类的信息以及动态调用对象的方法的功能成为java语言的反射机制。
73.反射机制优缺点
优点:运行期类型的判断,动态加载类,提高代码灵活度
缺点:慢
74.反射机制的应用场景有哪些?
spring中bean的创建
75.Java获取反射的三种方法
getClass(),.class,className()
76.字符型常量和字符串常量的区别?
形式上:单引号,2个字节,双引号
含义上:字符相当于一个整型值,可进行加减乘除运算,字符串引用数据类型
77.什么是字符串常量池?
位于方法区,创建字符串时,如果该字符串在常量池存在直接返回引用,否则实例化字符串发到常量池,并返回引用。
78.String 是最基本的数据类型吗?
不是,底层是cha类型数组
79.String有哪些特性?
不变性 private final char values[]
常量池优化
81.String真的是不可变的吗?
不可变,但是引用可变
82.是否可以继承 String 类
string类被final修饰不可以被继承
83.String str="i"与 String str=new String(“i”)一样吗?
内存分配方式不一样,前者在常量池,后者堆内存
84.String s = new String(“xyz”);创建了几个字符串对象
85.如何将字符串反转?
使用StringBuffer或者StringBuild的reverse()方法
86.数组有没有 length()方法?String 有没有 length()方法
数组由length属性,String有length()方法
87.String 类的常用方法都有那些?
indexOf()返回指定字符的索引
charAt()返回指定索引的字符
replace()字符串替换
trim()去除字符串两边的空白字符
split()分割字符串,返回分割后的字符串数组
getBytes()返回字符串的byte类型数组
length()返回字符串长度
toLowerCase()将字符串转换成小写
toUpperCase()将字符串转换成大写
equals()比较字符串内容是否相等
88.String ,StringBuffer,StringBuild的区别?
String不可变,StringBuffer和StringBuild可变
String和StringBuffer是线程安全的,StringBuild线程不安全(比StringBuffer高10%-15%)
String改变时都会生成新的对象
89.在使用 HashMap 的时候,用 String 做 key 有什么好处?
HashMap是通过对key的hashcode来计算value的存储位置。由于String不可变,当创建字符串时它的hashcode被缓存下来
90.自动装箱与拆箱
基本数据类型->引用数据类型 装箱
引用数据类型 ->基本数据类型 拆箱
91.int 和 Integer 有什么区别
Integer是int的包装类型
92.Integer a= 127 与 Integer b = 127相等吗
相等
本文详细列举了Java面试中常见的问题,涵盖JDK版本、JVM、JRE与JDK的关系、跨平台性原理、Java语言特点、字节码、Oracle JDK与OpenJDK对比、Java与C++区别、数据类型、构造方法、反射机制等方面,全面考察Java程序员的基础知识和理解深度。
9548

被折叠的 条评论
为什么被折叠?



