首页 > 编程语言 >java 常见基础题

java 常见基础题

时间:2022-12-14 19:04:45浏览次数:49  
标签:java 内部 对象 常见 基础 线程 Java 方法 HashMap


Java中==和equals和hashCode的区别

基本数据类型的​​==​​比较的值相等.

类的​​==​​​比较的内存的地址,即是否是同一个对象,在不覆盖​​equals​​​的情况下,同比较内存地址,原实现也为​​==​​​ ,如​​String​​​等重写了​​equals​​方法.

​hashCode​​​也是​​Object​​​类的一个方法。返回一个离散的​​int​​​型整数。在集合类操作中使用,为了提高查询速度。​​(HashMap,HashSet等比较是否为同一个)​

如果两个对象​​equals,Java​​​运行时环境会认为他们的​​hashcode​​一定相等。

如果两个对象不​​equals​​​,他们的​​hashcode​​有可能相等。

如果两个对象​​hashcode​​​相等,他们不一定​​equals​​。

如果两个对象​​hashcode​​​不相等,他们一定不​​equals​​。

int与integer的区别

​int​​ 基本类型

​integer​​​ 对象​​int​​的封装类

String、StringBuffer、StringBuilder区别

​String:​​ 字符串常量 不适用于经常要改变值得情况,每次改变相当于生成一个新的对象

​StringBuffer:​​ 字符串变量 (线程安全)

​StringBuilder:​​ 字符串变量(线程不安全) 确保单线程下可用,效率略高于StringBuffer

什么是内部类?内部类的作用

内部类可直接访问外部类的属性

​Java​​​中内部类主要分为​​成员内部类​​​、​​局部内部类​​​(嵌套在方法和作用域内)、​​匿名内部类​​​(没构造方法)、​​静态内部类​​(static修饰的类,不能使用任何外围类的非static成员变量和方法, 不依赖外围类)

进程和线程的区别

​进程​​​是​​cpu​​​资源分配的最小单位,
​​​线程​​​是​​cpu​​调度的最小单位。

进程之间不能共享资源,而线程共享所在进程的地址空间和其它资源。

一个进程内可拥有多个线程,进程可开启进程,也可开启线程。

一个线程只能属于一个进程,线程可直接使用同进程的资源,线程依赖于进程而存在。

final,finally,finalize的区别

​final:​​ 修饰类、成员变量和成员方法,类不可被继承,成员变量不可变,成员方法不可重写

​finally:​​​ 与​​try...catch...​​共同使用,确保无论是否出现异常都能被调用到

​finalize:​​​ 类的方法,垃圾回收之前会调用此方法,子类可以重写​​finalize()​​方法实现对资源的回收。

Serializable 和Parcelable 的区别

​Serializable​​​​Java​​序列化接口 在硬盘上读写 读写过程中有大量临时变量的生成,内部执行大量的​​i/o​​操作,效率很低。

​Parcelable​​​​Android​​序列化接口 效率高 使用麻烦 在内存中读写(​​AS​​有相关插件 一键生成所需方法) ,对象不能保存到磁盘中。

静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?

可继承 不可重写 而是被隐藏

如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为​​"隐藏"​​​。如果你想要调用父类的静态方法和属性,直接通过​​父类名.方法​​​或​​变量​​名完成。

成员内部类、静态内部类、局部内部类和匿名内部类的理解,以及项目中的应用

​Java​​​中内部类主要分为​​成员内部类​​​、​​局部内部类​​​(嵌套在方法和作用域内)、​​匿名内部类​​​(没构造方法)、​​静态内部类​​​(​​static​​​修饰的类,不能使用任何外围类的非​​static​​成员变量和方法, 不依赖外围类)

​使用内部类最吸引人的原因是:​​ 每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。

因为​​Java​​不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

哪些情况下的对象会被垃圾回收机制处理掉?

  1. 所有实例都没有活动线程访问。
  2. 没有被其他任何实例访问的循环引用实例。
  3. ​Java​​ 中有不同的引用类型。判断实例是否符合垃圾收集的条件都依赖于它的引用类型。

要判断怎样的对象是没用的对象。这里有​​2​​种方法:

  1. 采用标记计数的方法:

给内存中的对象给打上标记,对象被引用一次,计数就加​​1​​​,引用被释放了,计数就减一,当这个计数为​​0​​的时候,这个对象就可以被回收了。当然,这也就引发了一个问题:循环引用的对象是无法被识别出来并且被回收的。所以就有了第二种方法:

  1. 采用根搜索算法:

从一个根出发,搜索所有的可达对象,这样剩下的那些对象就是需要被回收的。

静态代理和动态代理的区别,什么场景使用?

​静态代理类:​​ 由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。

​动态代理类:​​ 在程序运行时,运用反射机制动态创建而成。

Java中实现多态的机制是什么?

方法的重写​​Overriding​​​和重载​​Overloading​​​是​​Java​​多态性的不同表现

​重写​​​​Overriding​​是父类与子类之间多态性的一种表现

​重载​​​​Overloading​​是一个类中多态性的一种表现.

HashMap和HashTable的区别

​HashMap​​​ 不是线程安全的,效率高一点、方法不是​​Synchronize​​的要提供外同步,有​​containsvalue​​和​​containsKey​​方法。

​hashtable​​​ 是线程安全,不允许有​​null​​的键和值,效率稍低,方法是是​​Synchronize​​的。有​​contains​​方法方法。​​Hashtable​​继承于​​Dictionary​​ 类。

HashMap与HashSet的区别

​hashMap:​​​​HashMap​​实现了​​Map​​接口,​​HashMap​​储存键值对,使用​​put()​​方法将元素放入​​map​​中,​​HashMap​​中使用键对象来计算​​hashcode​​值,​​HashMap​​比较快,因为是使用唯一的键来获取对象。

​HashSet​​​ 实现了​​Set​​接口,​​HashSet​​仅仅存储对象,使用​​add()​​方法将元素放入​​set​​中,​​HashSet​​使用成员对象来计算​​hashcode​​值,对于两个对象来说​​hashcode​​可能相同,所以​​equals()​​方法用来判断对象的相等性,如果两个对象不同的话,那么返回​​false​​。​​HashSet​​较​​HashMap​​来说比较慢。

标签:java,内部,对象,常见,基础,线程,Java,方法,HashMap
From: https://blog.51cto.com/u_15461374/5938258

相关文章

  • 【matlab基础】使用simulink同步CAN数据
    前言最近分析CAN报文数据,不同CAN通道的数据时间和size不一致,使用matlab中的simulink工具实现不同时间戳周期数据的对齐和同步。平常用得少,担心自己忘记了用的时候麻烦别人......
  • Java中的抽象与封装
    封装形式封装是四个基本的OOP概念之一。其他三个是继承,多态和抽象。Java中的封装是一种将数据(变量)和作用于数据(方法)的代码包装为一个单元的机制。在封装中,一个类的变量将......
  • Java基础之变量
    变量变量为可以变化的量。java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单位,其要素包括:变量名,变量类型和作用域。 数据类型变量名=......
  • 使用java 实现mqtt两种方式
    前言在开发MQTT时有两种方式一种是使用PahoJava原生库来完成,一种是使用springboot来完成。PahoJava库实现EclipsePahoJavaClient(opensnewwindow)是用Java编......
  • 16 Java内存模型与线程_Java内存模型
    目录1Java内存模型背景2主内存与工作内存3内存间交互及约束4volatile变量特性5原子性、可见性、有序性5.1原子性5.2可见性5.3有序性6先行发生原则7总结特别说明......
  • java Date和Timestamp类型的相互转换
    重要的概念:日期类和时间戳类都是用一个时间数值——日期相对于基准日期(1970年1月1日GMT时间(格林尼治时间)0时0分0秒)的时间间隔(以毫秒为单位)long类型来构造的通过Date对象......
  • 【Java】Spring Cache 缓存
    SpringCache一、Spring缓存抽象Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支......
  • Java: 在Excel中插入和提取图片
    在编辑Excel文档时,为了丰富文档内容或者更好地说明文档内容,有时我们会在单元格中插入图片。此外,整理文档内容时,也可以通过编程的方式将图片从Excel中提取出来。接下来我就将......
  • Java继承构造方法的注意点
    父类:注意(x,y是private,不能继承到子类中)classPar{privateintx;privateinty;inta;publicPar(){}publicPar(intx,inty){t......
  • JAVA中子类继承时构造方法注意事项
    JAVA中子类继承时构造方法注意事项类的继承不容易理解的一种情况:父类只存在有参构造,子类的构造方法必需要做相应的处理,比如说也创建有参构造,为什么?1、任何类,如果无显......