java基础面试题
一:什么是面向对象?
java是面向对象的语言。面向过程主要就是封装解决问题的步骤,使用的时候依次调用就可以了;面向对象:将问题分解成各个对象,建立对象的目的不是为了实现某个步骤,而是为了描述在问题解决中某个步骤的行为。面向对象有三大特性:封装,继承,多态。
封装:隐藏对象的属性和实现细节,仅对外提供公共的访问方式。将变化隔离,有利于提高可重用性和安全性。
继承:提高代码的复用性。是多态的前提。
多态:同一种行为有不同的表现方式。就是同一个接口,使用不同的实例来执行不同的操作。将父类引用指向子类。
必要条件:1.继承2.重写3.父类引用指向子类对象
二:String类有哪些常用方法?
indexof()查找字符串第一次出现的地方;length()字符串长度;trim()去除两端空白字符;replace()替换;spilt()拆分字符串;subString()截取字符串;concat()连接字符串;equals()
三:基本数据类型:byte,short,int,long,float,double,char,boolean
引用数据类型:String,数组,对象
String常量池:存在于方法区;jdk1.8之后,移入到堆中。
String a=new String("abc")与String b="abc"的区别:第一个是在堆中重新开辟一块内存空间,不管常量池有没有该字符串都会执行String类的构造器去新建一个新的对象;而第二个相当于执行valueof()方法,第一次如果没有该字符串时会新建在常量池中存一份,第二次再执行相同代码时,会从常量池中找。
四:String,StringBuffer,StringBuilder区别
String字符串长度内容不可变,另外两个可变;
StringBuffer线程安全,效率低;StringBuilder相反
五:IO流
包含字符流:writer和reader;字节流:inputStream和outputStream;需要实现serilizable接口
这个不太熟。。。。。。。。。。。。。。。。
六:集合
list、set实现了collection接口,map.
arrayList和LinkedList区别;hashMap和hashTable区别;
数组和集合区别
七:自增变量
举个例子:

i=i++ 先把i的值1压入栈,i++自增变量i变为2,再把操作数栈i的值1覆盖2变量i变为1;
int j=i++ 把i的值1压入栈,再自增i变量变为2;再把栈中i值1给了变量j变为1;
int k=i+ ++i*i++ 先把i压入栈为2;++i中自增变为3给了变量i变为3;再把i的值3压入栈;i++中把i的值3压入栈,再自增变成4给了i,把操作数栈中前两个弹出求乘积结果为9压入栈,再把操作数栈中值弹出求和赋值给k变为11.

八:类加载时执行过程
(1)类初始化时,先加载父类静态变量,静态代码块,按顺序执行;再加载子类的。
(2)实例化时,因为子类构造器默认首行有super(),所以先执行父类成员变量,非静态代码块,构造器;再执行子类的;如果有子类重写的情况不执行父类被重写的方法。
九:方法的参数传递机制
(1)形参是基本数据类型
传递数据值
(2)实参是引用数据类型
传递地址值;
特殊的类型:String,包装类不可变性

十:代理模式
有三个角色:代理类、委托类、接口。
静态代理:代理类在编译期就生成;代理类和委托类需要实现同一个接口。因为在编译期确定,所以效率高一点,但接口修改时,代理类和委托类都需要修改。
动态代理:代理类在jvm运行时生成;代理类需要实现InnvocationHandler接口或创建匿名内部类,委托类需要实现接口;通过反射代理方法比较消耗系统性能,但能减少代理类数量

浙公网安备 33010602011771号