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接口或创建匿名内部类,委托类需要实现接口;通过反射代理方法比较消耗系统性能,但能减少代理类数量

posted @ 2020-04-19 11:05  离仔玩偶  阅读(130)  评论(0)    收藏  举报