javase 常见面试题

1、简述什么是 JDK、JRE 和 JVM? 
       JDK : 开发工具包
       JRE : 运行时环境
       JVM : java虚拟机

2、写出Java的四类八种基本数据类?
       整数  byte short int long
       小数(浮点)  float double
       布尔        boolean
       字符        char

3、& 和 && 的区别  
       &  符号的左右两边,无论真或假都要执行
       && 符号的左边如果为假,符号的右边不再执行,提高了代码的执行效率
   
4.switch的参数可以是什么类型
       int 及以下整数包含 字符 char  byte short int char  
       String   
       枚举     

5,简述什么是标识符,及其定义的规则
    标识符就是名字  
    数字不能开头
    不能使用关键字起名字 
    特殊符号只有 _ $
    26个大小写英文字母
    数字0-9
    其他国家的语言文字  

6、说出成员变量和局部变量的区别
    1, 物理位置
      成员变量: 类中方法外
         局部变量: 方法中或方法定义的小括号里面
    2, 内存位置
         成员变量: 在堆内存中
         局部变量: 在栈内存中
    3, 生命周期
         成员变量: 随着对象创建而产生,随着对象的消失而消失
         局部变量: 随着方法的调用而产生,随着方法调用结束而消失
    4,有无默认值 
         成员变量: 有默认值, 整数0,小数0.0 字符 ‘\u0000’ 布尔 false 引用数据类型 null
         局部变量: 没有默认值,使用的时候,必须先赋值
7、static关键字都能修饰什么? 都有什么特点
      1, 修饰成员变量, 叫静态变量 具有共享性,节省内存空间
      2, 修饰方法: 静态方法: 可以直接使用类名.进行调用,
      3, 修饰代码块: 静态代码块 ,给静态变量进行赋值
      4, 修饰类: 静态内部类
           
8 、什么是封装,为什么要封装
        就是将事物的属性和行为 通过 private进行修饰,外界无法直接进行访问,需要提供公共的setter 和 getter 进行间接的访问 
        提高代码的安全性和复用性 
    

9, 什么是面向对象,请详细说明(分别解释 封装 继承和多态)
            面向对象就是一种编程思想 它分为封装  继承  多态

        1.封装:就是将事物的属性和行为 通过 private进行修饰,外界无法直接进行访问,需要提供公共的setter 和 getter 进行间接的访问 
         提高代码的安全性和复用性

        2.继承:使用extends关键字实现继承
                  只能从一个父类继承 单继承
                  必须从一个类继承
                  继承可以多层继承
    
        3.多态:事物的多种表示形态 
                  发生的前提:
                        继承关系或实现关系
                        方法的重写
                         父类的引用指向子类对象

10,  overload和override的区别
           overload重载: 在同一个类中,方法名相同,参数列表不同 与返回类型无关
           override 重写: 在继承关系中,方法名和参数列表必须相同,权限修饰大于等于父类
    
11, final 和 finally的区别
           final 修饰符 修饰变量变成了常量,修饰方法变成了最终的方法,不能被重写,修饰类变成了最终类,不能有子类
           finally 代码块 只能与 try 连用,表示的是代码是否出现异常,都必须要执行的代码

12, this和super都能用到哪些地方
            this: 本质是一个对象的引用 谁调用this就代表谁
                      解决成员变量和局部变量同名的问题
                      在本类中构造方法调用其他构造方法 调用时this语句必须放第一句
            super
                      在子类中调用父类的成员
                      在子类的构造方法调用父类的构造方法
                      可以调用父类的成员方法

13,  接口与抽象类的区别
            抽象类                                                                           接口      
          有成员变量                                        没有成员变量,都是常量默认被 public static final修饰          
          实现方法和抽象方法                      jdk1.8之前都是抽象方法 jdk1.8之后可以有静态和默认方法
          有构造方法                                                          没有构造方法            
14,  静态变量与成员变量的区别
          内存位置:     静态: 方法区
                      成员: 堆内存
          生命周期:    静态: 随着类的创建而生成,随着类的消失而消失
                      成员: 随着对象的创建而产生,随着对象的消失而消失
          调用方式:    静态: 两种类名.直接调用对象名调用
                     成员: 只能通过对象名调用

15, throw和throws 的区别
              throws 是异常的声明,只能放到方法定义的小括号后面,可以声明多个异常,这个代码可能会出现问题,也可能不会出现问题 
              throw 是抛出异常, 真真实实的只能抛出 一个异常对象 ,代码只要运行到throw 代码就会停止,throw后面不允许跟其他的代码

16 String,StringBuilder 与 StringBuffer 的区别
         String 是长度不可变的容器,  StringBuilder,StringBuffer 是长度可变的字符序列 
         StringBuilder : 线程不安全,效率高,从jdk1.5版本开始 
         StringBuffer : 线程安全,效率低,从jdk1.0开始   

17, == 和 equals的区别:
        == 既可以比较基本数据类型,也可以比较引用数据类型,比较基本数据类型,比较的是具体的值,比较引用数据类型比较是地址值
       equals只能比较引用数据类型,重写之前比较的是引用数据类型的地址值,重写之后,比较的是引用数据类型的内容

18, 包装类拆箱装箱:
    包装类是指: 基本数据类型的引用数据类型
    基本数据类型转换成引用数据类型,称为包箱,
    引用数据类型转基本数据类型,称为拆箱
    在1.5后,他们都是系统内部自动进行的,称为“自动拆装箱”

19,请说出5个异常类型:
    算数异常 如 除以0
    数组下标越界异常
    空指针异常
    数据转换异常
    请求的方法不存在

20, HashSet 的去重原理:
    不同的对象,地址值肯定不同,地址不同,直接插入数据成功
    如果地址值相同,不能证明是同一个对象
    需要通过equals 的方法继续比较,比较的是对象中的每一个内容
    如果内容相同证明是同一个对象,插入失败
    如果内容不同,证明不是同一个对象,数据插入成功

21, jvm内存划分:
       jvm分为方法区,堆内存,栈内存,本地方法栈,程序计数器,
        方法区: 主要存.class字节码文件,静态变量,字符串常量
        堆内存: 主要存new出来的对象,数组也在堆内存中
        栈内存: 存正在执行的方法,局部变量也在栈内存中

22, 构造方法是否可以被重写?为什么?
     构造方法不能被重写,因为构造方法要求,方法名与类名保持一致,

23, collection  与 collections  的区别:
    collection是单列集合的顶层父接口,Collections 是处理集合的工具类

24,集合与数组的区别:
          集合与数组都是容器
          数组既可以存基本数据类型也可以存引用数据类型,数组的长度固定不能发生改变
          集合只能存引用数据类型,可以存任意的引用数据类型,长度可变

25, 多线程的三种实现方式:
       1, 继承Thread,重写run方法,最后创建Thread 的子类对象,调用start()方法开启线程任务
       2, 实现Runnable接口,重写run方法,创建Runnable 的实现类对象,通过Thread 的构造传递,调用start() 方法开启线程任务
       3, 实现Callable接口,重写call方法,创建Callable的实现类对象,将Callable 的实现类对象,传递到FutureTask的构造方法中,最后将FutureTask传递         到Thread 的构造方法中,通过start()方法开启线程任务

26, 多线程的生命周期:
    多线程的生命周期有5种状态,分别是 新建态,就绪态,运行态,阻塞态和死亡态
               新建态: 刚new出来的时候
               就绪态: 已经.start(),没有获取到cpu资源
               运行态: 获取到cpu资源进入运行态
               阻塞态: 线程遇到sleep(),遇到wait() 或者io流阻塞让cpu资源丢失
               死亡态: 线程正常结束,线程任务出现异常

27, TreeSet和HashSet的区别:
             TreeSet 和 HashSet 一样都有 无序无索引不能重复
             TreeSet 可以进行根据一定的排序规则进行排序
             HashSet 没有排序的规则

28, TreeMap如何去重:
            TreeMap去重 是利用key值的 compareTo 方法,compareTo方法为0,就证明是同一个元素,进行去重

好的,下面是一些常见JavaSE基础面试题及其答案: 1. Java中的基本数据类型有哪些? Java中的基本数据类型包括:byte、short、int、long、float、double、char、boolean。 2. String是基本数据类型吗? 不是。String是Java中的一种对象类型,它属于引用类型。 3. Java中的访问修饰符有哪些?它们的作用是什么? Java中的访问修饰符有public、private、protected和默认访问修饰符。它们的作用是控制类、属性和方法的访问权限。其中,public表示公共的,可以被任何其他类访问;private表示私有的,只能被本类访问;protected表示受保护的,可以被本类、同包及其子类访问;默认访问修饰符表示不加访问修饰符,只能被同包中的其他类访问。 4. Java中的final关键字有哪些用途? final关键字可以用来修饰类、属性和方法,它的作用如下: - final修饰类:表示该类不能被继承。 - final修饰属性:表示该属性不能被修改,即为常量。 - final修饰方法:表示该方法不能被子类重写。 5. 什么是Java中的异常? 异常是在程序运行过程中出现的一些错误或意外情况,它可以分为受检异常和非受检异常。受检异常必须在代码中进行处理或者声明抛出,否则会在编译时产生错误;非受检异常则不需要处理或声明抛出。 6. try-catch-finally语句块的作用是什么? try-catch-finally语句块用于处理Java中的异常。其中,try语句块用于执行可能抛出异常的代码;catch语句块用于捕获并处理异常;finally语句块用于在无论是否有异常抛出时都会执行的代码块。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值