前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java基础中的面试题(一),你能接几招(附答案(不带答案的面试题都是耍流氓))

Java基础中的面试题(一),你能接几招(附答案(不带答案的面试题都是耍流氓))

作者头像
一缕82年的清风
修改2021-12-13 09:35:50
2010
修改2021-12-13 09:35:50
举报
文章被收录于专栏:lsqingfeng
  1. Java中的数据类型有几种? Java中的数据类型分为基本数据类型和引用数据类型两大类,基本数据类型中分为八种,分别是byte,short,int ,long,float,double,boolean ,char。 引用数据类型的定义是除了基本数据类型以外的所有类型,主要包括,类,接口, 数组, 枚举,注解等。
  2. java中的基本数据类型的长度范围? byte(1字节) , short(2字节) ,int(4字节), long(8字节),float(4字节) , double(8字节), boolean(1字节), char(2字节)
  3. 给出下列程序的输出结果: System.out.println(3+4); //7, 没什么可解释的 System.out.println(3+'4');// 55, char值参与运算使用ascii进行运算,'4'的ascii 是52 System.out.println('3'+'4');//103,51+52 System.out.println(3+"4");//34,字符串参与运行,就是拼接
  4. 面向对象的特征 封装, 继承 , 多态, 抽象
  5. 抽象类和接口的区别
    1. 抽象类中既可以定义常量有可以定义变量,接口中定义的变量默认为常量(默认都是用pubilc static final 修饰)
    2. 抽象类中既可以定义抽象方法,也可以定义非抽象方法;接口中只能定义抽象方法(默认用public abstract修饰,jdk8以后接口可以定义非抽象方法,但是必须用default或 static修饰)
    3. 一个类最多是能继承一个抽象类,但是可以实现多个接口
    4. 抽象类是对事物根源的抽象,接口侧重对功能的扩展
    5. 接口不能实现接口,只能继承接口,并且可以多继承
  6. switch中支持的数据类型 switch中可以使用byte,short,char,int 或者对应的包装类和枚举类型。jdk7以后开始支持String类型,不支持long类型
  7. float f = 18.5; double d = 12.3; 这两种写法正确么? 小数的默认类型是double, 所以像18.5 和 12.3其实都是double类型的, 把double类型赋值给float 是有问题的,因为有可能装不下。 所以第一种写法错误,第二种写法正确。简单来说,就是定义float类型的小数结尾必须加f. 正确写法: float f = 18.5f;
  8. 方法重载和方法重写的区别 方法的重载(overload): 说的是一个类中的事。 一个类中可以存在多个名字相同的方法,但是必须保证参数的类型或个数不同,这几个方法叫做重载的方法,与返回值无关。 方法的重写(override): 说的是父类和子类中的事,子类中出现了和父类中一模一样的方法,就是重写的方法,可以在子类的方法上加 @Override注解验证。 关于重写有一些特殊情况需要注意: 私有和静态方法不能重写。 子类重写父类中的方法访问权限不能更低。子类抛出的异常不能比父类大。
  9. equals 和 == 的区别 equals 是 Object类中的方法,所以代表所有的对象中都可以调用这个方法。如果没有重写equals方法,那么调用的时候相当于都是在调用父类Object中的equals方法, Object类中的equals就是使用 == 实现的。==在连接基本数据类型的时候,比较的是值。 连接引用数据对象的时候比较的是地址值。
  10. 数组初始化的两种方式: 静态初始化: int[] arr = new int[10]; 动态初始化: int[] arr = new int[]{1,2,3,4,5}; 可简写为: int[] arr = {1,2,3,4,5};
  11. Object类中有哪些方法?介绍一下equals和 hashCode() 方法的区别及注意事项 Object类中有 hashCode(), equals(Object), toString(), clone(),wait(), notify(), notifyAll() 等方法。 hashCode:可以看做是当前对象的一个地址值经过计算后得到的值,所以我们可以根据两个对象的hashCode值是否相等来判断二者是不是同一个对象。native方法,底层使用c语言实现。 equals: 判断对象是不是同一个对象。默认的equals是== 也就是比较地址值。我们可以重写equals方法。 两个方法都可以用来比较对象是否相同。但是由于hashCode 底层是用c语言实现的,所以速度较快,但他的缺点是由于使用算法生成的,可能在某些极端的情况之下出现两个不同的对象经过算法后得到的hashCode值相同。所以一般我们比较的时候,一般先比较hashCode是否相等,如果hashCode不相等,说明肯定不是同一个对象,如果hashCode相等,也不能代表是同一个对象,因为上面说了存在一些极端情况,所以在使用equals比较。像hashSet, HashMap中都是使用这样的比较方式,也是业界公认的比较方式。这也是为什么我们在重写hashCode的时候也要重写equals, 因为大家都这么用,我们必须要保证他们两者返回结果的一致性。否则就会出问题。
  12. HashMap的实现原理: HashMap底层是使用hash表(数组+链表) 的形式进行存储。 当一个键值对存储到HashMap中的时候,会先根据key通过hash算法计算出一个值,这个值就是代表存储到数组中的那个位置,如果多个key得到的值相同,代表这几个数据要存储到同一个数组的位置上,这种情况叫做哈希冲突,此时会以链表的形式将hash冲突的元素连接起来。 hashMap有个负载因子,默认是0.75, 当hashMap中存储的元素对数超过数组程度*负载因子时,会触发自动扩容。jdk1.8以后,当链表长度超过8会自动转为红黑树,当红黑树的个数小于6会转为链表。 当key值完全相同时(通过hashCode,equals比较), value会覆盖。
  13. 实现多线程的方式
    1. 继承Thread类,重写run方法,调用start() new Thead(()->{}).start();
    2. 实现Runnable接口,重写run方法,创建Thread对象,传入Runnable, 调动start() new Thread(new Runnable()-{}).start();
    3. 使用线程池,传入Runnable:
  14. 获取Class对象的几种方式:
    1. 类名.class: Class clazz = Person.class;
    2. 对象名.getClass(); Class clazz = person.getClass();
    3. Class.forName(全类名); Class clazz = Class.forName("com.test.Person");// 有异常需要处理
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档