java基础面试常见问题总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/msyqmsyq/article/details/52389803
  • java有几种类型
        基本类型       引用类型        空类型

  • java有几种基本类型
        byte short int long float double boolean char

  • 什么是面向对象
        一切皆对象

  • 面向对象有哪些特征
        封装 继承 多态
        封装 使属性(特征)私有化,
        外部不能直接访问,
        需要访问属性,
        为外部提供公开的方法(行为)进行访问
        继承 是一种是的关系,子类对父类进行扩展
        对父类的复用,java只允许单继承
        多态 一种事物多种形态
        对象的多态,把一个对象复制给不同的引用
        方法的多态,重写 重载

  • 分别说明重写和重载,有哪些要求
        重写 是父子类之间,如果创建的是子类对象,
        调用重写的方法,执行的是子类的
        方法名相同,返回类型相同,参数列表相同
        抛出的异常不能更大,访问权限不能更小
        重载 是在一个类中,为了调用者方便
        方法名相同,参数列表不同(参数类型不同,参数个数不同)

  • 类加载搜索的顺序
        当前目录 rt.jar CLASSPATH 抛出异常

  • 什么时候会导致类加载
        调用java命令时
        创建对象时
        访问静态成员时
        调用Class.forName("类全名")时

  • this,super分别表示什么
        this 当前对象
        super 创建当前对象时创建的父类对象
        this()        调用本类构造方法,只能出现在构造方法第一行
        super()        调用父类构造方法,只能出现在构造方法第一行,至少有一个构造方法第一行是super()
        this.        是一个引用,表示当前对象,任意成员方法内
        super.        是一个引用,表示创建当前对象时创建的父类对象,任意成员方法内

  • 静态代码块和代码块分别什么时候执行
        静态代码块 相当于静态方法,类加载时执行,只执行一次
        代码块 相当于成员方法,创建对象时执行,对于一个对象,只执行一次

  • 比较两个对象有哪些方法
        判断两个引用指向的是否是同一个对象 ==
        比较两个引用指向的对象的值 equals()
        比较对象大小
        自然顺序(这样事务本身是有序的)
        实现可比较接口 Comparable接口,实现compareTo(E obj)方法
        零时根据业务逻辑做比较 比较器
        实现Comparator接口,实现compare(E obj1,E obj2)方法

  • 是否可以继承String类
        不能 被final修饰

  • final表示什么,能修饰哪些地方
        不可改变
        类        这个类不能被继承
        属性        创建完对象以后不能被修改
        变量        初始化以后不能被修改
        方法        方法不能被重写

  • static表示什么
        静态的
        所有对象共享
        属于类的
        能修饰 属性,方法,内部类,静态代码块

  • 创建对象的步骤
        在堆里分配空间
        初始化属性(0,0.0,\u0000,false,null,默认值)
        调用自己的构造方法

  • 接口和类和抽象类的区别
        类和抽象都表示的是现实的事物
        接口表示的是规范
        抽象类表示的是一个实际存在但是是抽象的事物
        接口里的所有属性是public static final
        所有方法是public abstarct
        抽象类跟普通类差不多,比普通类多了一些抽象方法
        接口没有构造方法
        抽象类有构造方法
        接口和抽象类都不能创建对象
        抽象类的构造方法给子类构造方法调用
        普通类可以创建对象
        抽象类 abstarct class
        类 class
        接口 interface

  • String对象能不能修改
        不能 String采用不变模式
        如果需要对一个字符串反复修改
        使用StringBuffer和StringBuilder

  • String和StringBuffer和StringBuilder的区别
        String 不可以改变
        StringBuffer        线程安全
        StringBuilder        线程不安全

String s1=new String("abc");        2
String s2="abc";                0
String s3="ab"+"c";                0
String s4="ab";                        1
String s5="c";                        1
String s6=s4+s5;                1
总共创建了几个String对象
        5


基本类型 包装类 String之间的转换
        参考代码

String 和日期之间的转换
        参考代码

3种表示日期
        参考代码

Object类里所有方法
        参考代码

String类的常用方法
        参考代码

  • GC是什么
        垃圾回收器
        java程序员不需要关心
        内存对象释放问题
        由jvm来负责释放内存
        如果一个对象没有任何引用指向他
        这个对象被视为垃圾,jvm会在空闲时
        释放这些空间
        而程序员不能控制,只能建议
        System.gc() Runtime.getRuntime().gc()

  • List Set Map的区别
        List 有放入顺序,可以重复
        Set 没有放入顺序,元素不可以重复
        Map 键值对
  • ArrayList LinkedList Vector的区别
        ArrayList,Vector底层都是数组
        LinkedList底层是双向链表
        ArrayList线程不安全
        Vector线程安全

  • HashMap和Hashtable的区别
        HashMap线程不安全,允许有一个key为null,value可以为空
        Hashtable线程安全,key和value都不允许为null

  • 哈希散列表怎么判断元素不重复
        调用hashCode()方法,获得hash码
        通过哈希散列运算,获得哈希表里的位置
        如果当前位置上没有元素,直接放入 return
        如果当前位置上有元素,调用equals()方法
        如果返回为true,舍弃(HashSet)或覆盖(HashMap)
        如果返回为false,以链表形式在当前位置追加

  • 局部内部类能否访问局部变量
        可以访问        局部 变量必须是final修饰的

  • 匿名内部类的功能以及语法
        实现或继承父类或父接口,创建对象
        new 父类/父接口(){}

  • 异常和错误的区别
        Exception 程序执行过程中程序员无法控制出现的问题
        Error 人可以解决,程序员不关心

  • Exception和RuntimeException的区别
        Exception强制要求写程序时处理 检测异常/非运行时异常
        RuntimeException只有在运行时才会产生异常,不要求强制处理 运行时异常/非检测异常

  • 处理异常有几种方式
        抛出异常
        捕获异常

  • ISO8859-1的字符串转成UTF-8的字符串
        new String(s.getBytes("ISO8859-1"),"UTF-8")

  • public private protected 以及不写的区别
        修饰符                当前类        同包        子类        其他
        public                1        1        1        1
        protected        1        1        1        0
        不写                1        1        0        0
        private                1        0        0        0

  • IO流的分类
        方向
                输入流 输出流
        类型
                字节流 字符流
        功能
                节点流 包装流

  • 实现对象浅拷贝和深拷贝
        clone() 对象序列化

  • 有几种方式实现多线程
        实现Runnable接口,实现run()方法
        继承Thread类,重写run()方法

  • 怎么解决同步问题
        加锁,synchronized,锁方法,锁代码块

  • 线程的生命周期
        new时为新建状态
        调用start()方法进入就绪状态
        当cpu分配了时间片进入运行状态
        时间片用完回到就绪状态
        直到运行结束进入销毁状态
        其中在运行状态遇到sleep()方法或等待io操作进入阻塞状态
        阻塞状态结束进入就绪状态,再有cpu分配时间片执行
        线程运行时如果代码被加了锁,当前线程没有获得锁,
        当前对象进入锁池,当锁被释放,线程获得了到锁回到就绪状态
        当有锁的线程调用wait()方法,当前线程进入等待池,释放锁
        直到有其他线程调用notify()或notifyAll()方法时等待的线程被唤醒,进入锁池

java调用方法是值传递还是引用传递

  • Class对象时什么,怎么创建,谁创建
        用来管理类的对象,Class类的对象我们无权自己创建,而是在类加载时有jvm创建(单例的)

  • 类与类之间的关系
        is a
        继承
        实现
        has a
        组合
        聚合
        关联
        use a
        依赖

  • 不变模式
        一个对象创建完以后,
        值不允许改变,
        对象状态单一
  • 单例模式
        程序运行期间,
        这个类有且只有一个实例
  • 简单工厂模式
        创建对象,降低调用者和实现者的耦合度
  • 适配器模式
        底层操作的数据时相同的数据,将某一一种类型转成另一种类型
  • 静态代理模式
        不改变现有代码基础上增加新的功能
  • 装饰模式
        对继承的扩展,比继承灵活
  • 观察者模式
        调用某一行为触发另一个行为
  • 模板模式
        完成一个功能的过程是固定的,而中间有几个步骤处理时会变







展开阅读全文

没有更多推荐了,返回首页