一、面试常见问题:
1.面向对象的特征有哪些?
JAVA面向对象最重要的特征就是:封装,继承,多态。(抽象)
封装是为了方便调用类库里面已经写好的方法,继承是方便对已有方法的功能进行直接调用和扩展。按照原则,java中已经写好的类库会被打包成jar包,不允许调用者更改里面的代码。
但是你可以通过其中的抽象类或者接口,根据具体的业务逻辑进行功能的扩展。
多态的作用是,可以实现对继承对象的统一调度,是面向对象的精髓所在。
2.一个“.java”文件中是否可以有多个类(不是内部类)?有什么限制吗?
可以有多个类,但是public的类只有一个,而且必须和java文件名同名。
3.Java程序的执行过程是怎样的?
先由程序员书写源文件,然后通过javac命令操作编译器,将源文件编译成.class字节码文件,在通过java命令开始运行,操作过程中首先通过类加载器,将字节码文件加载到内存中,然后通过字节码校验器进行校验,校验无误,通过解释器解释给操作系统运行。
.java文件——>java编译器——>.class文件——>类装载器——>字节码校验器——>解释器——>操作系统平台。
4.如何将一个整型转换成字符?
强制转换,比如int a=10;char c=(char)a;
Integer.toString(n);
String.valueOf(n;)//n都是整型的数据
两者都可以的,不过最好用String.valueOf(n);
5.Java的数据类型有哪些?
基本数据类型
byte(字节) 8 -128 - 127 0
整型 short(短整型) 16 -32768 - 32768 0
int(整型) 32 -2147483648-2147483648 0
long(长整型) 64 -9233372036854477808-9233372036854477808 0
浮点型 float(浮点型) 32 -3.40292347E+38-3.40292347E+38 0.0f
double(双精度) 64 -1.79769313486231570E+308-1.79769313486231570E+308 0.0d
char(字符型) 16 ‘ \u0000 - u\ffff ’ ‘\u0000 ’
boolean(布尔型) 1 true/false false
引用数据类型
类-class
接口-interface
数组
6.请将163转换为二进制?
整数/2 %2
1 0 1 0 0 0 1 1
7.请将0.8125转换为二进制?
小数 *2
0.1 1 0 1
8.请将163.8125转换为二进制?
1 0 1 0 0 0 1 1. 1 1 0 1
9.请说明内存的分类?什么数据存于堆区?什么数据存于栈区?
可以分为 4 个区,堆内存,栈内存,数据区,代码区。
堆区: 存放的是对象,如new 出来的东西。保存每个对象的具体属性内容。
栈区: 存放局部变量,保存所有的对象名称(保存了引用的堆内存的地址)。
全局数据区: 存放的是常量 、静态变量,如String s = “abc”,中”abc”其实是放在数据区里面的。
全局代码区: 存放代码,保存所有方法的定义。
10.&与&&的比较?&位与 &&逻辑与
&和&&都可以用作与运算符,表示与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str != null && !str.equals(“”))表达式,当str为null时,后面的表达式不会执行,所以不会出现NullPointerException如果将&&改为&,则会抛出NullPointerException异常。If(x==33 & ++y>0) y会增长,If(x==33 && ++y>0)不会增长
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。
11.对对象进行比较怎么做?为什么不用“= =”?
对对象内容进行比较用.equals()方法。.equals方法比较的是内容是否相等,==比较的是值是否相等,两个引用是否指向同一个对象。
一是类与对象的关系。类是具体的抽象,而对象是类的具体实现。
二是需要知道类与对象在内存中的实际存储情况。当程序员定义一个类时(不含有静态成员或者变量),一般不会在内存中给其分配一个存储结构。而只有定义对象时,才会在内存中分配存储结构。当利用同一个类定义不同的对象时,系统会在内存中为不同的对象创建不同的存储结构。也就是说,会对应不同的内存地址。虽然同一个类中定义出来的对象,其内容可能相同(成员变量、成员方法等等都相同),但是其内存中的地址仍然是不同的。
三是需要注意对象的复制问题。如果要创建几个内容相同的对象,即复制相同内容的对象,现在主要有两种方法。一是通过成员变量赋值来完成。如在根据同一个类创建对象时,分别给与他们相同的初始化值。那么这两个对象的内容就是相同的。二是通过地址赋值来完成。即将第一个对象在内存中的地址赋值给第二个对象。此时两个对象名字虽然不同,但是他们却指向内存中的同一块区域。此时就好像一个人有两个名字,其实是同一个人。所以这两个对象内容也就相同了。
使用 == 进行比较, 该方式比较的是变量是否同时指向一块内存地址,如果是就返回true,否则返回false
使用对象本身的equals进行比较,equals首先会进行 == 比较,然后会进行逻辑比较,当然你可以自己定义自己的比较逻辑,比如JDK内置的String,Integer,Long等都是重写了这个equals方法的。
总的来说就是 == 表示完全相等,而equals表示逻辑相等
12.构造方法的作用以及构造方法被执行的时候做哪些事情?
构造方法当对象实例化时,初始化对象中的成员变量。产生对象,且不能有返回类型。
构造方法执行时:1、在内存中划分空间。2、在该空间划分属性。3、对每个属性进行初始化(基本数据类型为0,引用数据类型为null)。4、执行我们在构造方法里书写的内容。
13.当一个对象被当作参数传入到一个方法中,可以在方法内部改变该对象的属性值,那么这里是值传递还是引用传递?
java中只有值传递。对引用数据来说 ,传递的是一个引用而已。
14.什么是GC?什么样的对象可以被GC回收?程序员如何召唤GC?一旦召唤是否马上回收?
GC即:gabage collection,java中垃圾回收机制的意思。
没有引用指向的对象会被GC回收,程序员可以通过System.gc()(run.gc()或者GC所支持的其它调用方法召唤GC。)
由GC自己的内部算法决定。(但是召唤过后,GC什么时候处理还是不明确。)
15.数组是否有length( )?字符串是否有 length( )?
数组有.length属性,表示数组长度,没有length()的方法。
字符串有length()的方法获取字符串的长度。
16.JDK与JRE分别是什么?有什么区别吗?
jdk是java的开发工具包,jre是java的运行环境。jdk包含jre。jdk提供了我们程序开发的一系列编译、运行等工具。
而jre的核心内容是jvm和核心类库。