推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

java面试之基础(面试不要错过哦)

   2023-07-31 网络整理佚名1940
核心提示:我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。a、集合不允许存放基础数据类型,存放数字时,要用包装类型;中存储的数据是有顺序,并且允许重复;中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。特点:编写简单,可直接操作线程;适用于单继承在运行时判断任意一个对象所属的类。在运行时判断任意一个类所具有的成员变量和方法。

成员变量在类内的方法之外,局部变量在方法内

13. 静态变量和实例变量有什么区别?

A。 静态变量是由修饰符修饰的变量。 内存中只有一个内存空间。 静态变量的内存分配是在类加载过程中完成的,可以通过(类名.)直接访问。

b. 实例变量必须依赖于某个实例。 它需要先创建对象,然后通过该对象访问它。 每次创建实例对象时,都会为实例变量分配不同的内存,每个对象访问自己的实例变量。

C。 一个类无论创建多少个对象,静态变量都只初始化一次,所有实例都可以访问这个静态变量,并且可以通过类名直接访问。

14.类可以继承吗?

不能。 该类被final修饰,因此不能被继承。

15.类中常用的方法有哪些?

获取字符串的长度:()

比较字符串:()

连接字符串:()

提取字符串:()

搜索字符串:()

分割字符串:split()

忽略字符串大小写:()

将所有英文字符转换为小写:()

将所有英文字符转换为大写:( )

删除空格:trim()

16. 和 之间有什么区别?

:适合少量字符串操作

线程不安全,适合单线程下对字符缓冲区进行大量操作的情况

:线程安全,效率低,适合多线程下对字符缓冲区进行大量操作的情况

(操作就是字符串的拼接) JDBC中拼接sql

17.您对面向对象的4大特性有何理解?

封装:封装一般认为是绑定数据和操作数据的方法,只能通过定义好的接口来访问数据。 我们在类中编写的方法是对实现细节的一种封装; 我们写的类就是对数据和数据操作的封装。 可以说,封装就是把所有能隐藏的东西都隐藏起来,只向外界提供最简单的编程接口。 (减少代码冗余)

继承:继承是通过从现有类获取继承信息来创建新类的过程。 提供继承信息的类称为父类(超类、基类); 接收继承信息的类称为子类(派生类)。

多态性:多态性是指允许不同子类型的对象对同一消息做出不同的响应。 简单地说,它是使用相同的对象引用调用相同的方法,但做不同的事情。 多态性分为编译时多态性和运行时多态性。 方法重载()实现了编译时多态(也称为预绑定),而方法重写()实现了运行时多态(也称为后绑定)

抽象:抽象是总结一类对象的共同特征来构造类的过程,包括数据抽象和行为抽象。 抽象只关注对象的属性和行为,而不关注这些行为的细节。

18.方法重载和重写有什么区别? (方法重载发生在类中,方法重写发生在父类与子类之间)

方法重载和重写都是实现多态的方法。 区别在于前者实现了编译时多态,而后者实现了运行时多态。 重载发生在类中。 如果同名方法有不同的参数列表(不同的参数类型、不同的参数个数,或两者都有),则认为是重载; 重写发生在子类和父类之间,重写要求子类重写的方法与父类重写的方法具有相同的返回类型,比父类重写的方法有更好的访问权限,并且不能声明更多的异常比父类重写的方法(代码交换原理)。 重载对返回类型没有特殊要求。

方法重载规则:

1.方法名称相同,但参数列表中参数的顺序、类型和数量不同。

2.重载与方法的返回值无关,它发生在类中。

3、可以抛出不同的异常,可以使用不同的修饰符。

方法重写规则:

1、参数列表和返回类型必须与重写的方法完全一致。

2、构造方法不能重写,声明为final的方法不能重写,声明为final的方法不能重写,但可以再次声明。

3、发生在父类与子类之间时,子类的访问权限不能比父类严格。

19.(默认)有什么区别?

20. 多重继承下初始化的顺序是什么?

先父类后子类,先属性后构造方法。

21、使用运行时多态开发的思路是什么?

A。 编写父类

b. 写一个子类,子类重写父类方法

C。 运行时,使用父类的类型和子类的对象

Pet pet = new Dog();

22.类中的向上转型和向下转型有什么区别?

向下转型:超类转换为子类(使用强制转换)(对象类或接口)

向上转换:子类使用父类的类型,子类的对象转换为父类(自动类型转换)

23. 接口和抽象类有什么区别?

差异一:语法方面

1、继承实现((抽象类单继承,接口多实现)接口还可以继承其他接口)

2、成员变量

①. 抽象类中可以有普通成员变量,但接口中不能有普通成员变量

②. 抽象类和接口都可以包含静态成员变量

3. 方法

①. 抽象类可以有构造函数,但接口不能有构造函数。

②.抽象类可以包含非抽象普通方法,接口中的所有方法都必须是抽象的,并且不能有非抽象普通方法。

③. 抽象类中的抽象方法的访问类型可以是默认类型,但接口中的抽象方法只能是类型,默认是类型。

④. 抽象类可以包含静态方法,但接口不能包含静态方法。

差异 2:概念方面

抽象类体现了继承关系。 要使继承关系合理,父类和派生类之间必须存在“is-a”关系,即父类和派生类的概念本质上应该是相同的。 接口的情况并非如此。 它不要求接口的实现者在概念上与接口定义一致,而只需实现接口定义的契约,即“has-a”关系。

设计接口时要注意稳定性,方法的参数和返回值不能随意改变。

差异三:设计方面

抽象层次不同,抽象类是类的抽象,接口是行为的抽象。 抽象类将整个类抽象为一个整体,包括属性和行为,而接口抽象了类的各个部分(行为)。 抽象类是自下而上抽象的,接口是自上而下设计的。

24.java中常见的异常类型?

25、编写多个异常的注意事项?

A。 catch语句的排列顺序:先子类,后父类

b. 发生异常时按顺序一一匹配

C。 只执行与异常类型匹配的第一个catch语句

(不要“吃异常”,父类有底线)

在catch中,需要输出异常信息,并打印异常发生处的堆栈信息。 如果没有输出,就会导致异常发生,但由于没有相关错误信息的输出,所以异常发生的情况未知。 这种情况被称为“饮食异常”。

26. 错误和错误有什么区别?

Error类和该类的父类都是类,它们的区别如下:

Error类一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、内存空间不足、方法调用栈溢出等。 对于这种错误导致的应用程序中断,程序本身无法恢复和预防。 遇到此类错误时,建议让程序终止。

类代表程序可以处理、捕获并可能从中恢复的异常。 遇到这样的异常,应该尽可能的处理异常,恢复程序,不能随意终止异常。

27.和有什么区别?

运行时异常( ) 编译可以通过,但一运行就终止。 程序不会处理运行时异常。 如果发生此类异常,程序将终止。 (bug的来源,需要检查运行时异常)(父类)

检查异常 ( ) 或使用 try。 。 。 catch catch,或者用语句抛出,交给其父类处理,否则编译不通过。 (父亲)

28. Final、 和 有什么区别?

Final:用于声明属性、方法、类,分别表示属性不可变、方法不可重写、类不可继承。

:异常处理语句结构的一部分,表示始终执行。

:类的方法。 待回收对象的这个方法会在垃圾收集器执行时被调用。 可以重写此方法以在垃圾收集期间提供其他资源回收,例如关闭文件。 这是一个被动方法(实际上是一个回调方法),我们不需要调用。

29.投掷和投掷有什么区别?

扔:

A。 该语句用在方法体中,表示抛出异常,由方法体中的语句处理。

b. 它是一个专门抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定抛出了某种异常。

:

A。 就是声明在方法声明之后使用异常语句,表示如果抛出异常,则方法的调用者将处理该异常。

b. 主要是声明该方法将抛出某种类型的异常,以便其使用者需要知道需要捕获的异常类型。

C。 表示有可能出现异常,但不一定会出现这种异常

30、什么是装箱和拆箱,以及包装的应用场景?

拆箱 - 包装类变量可以分配原始类型

装箱 - 原始类型的变量可以分配一个包装类

封装类的应用场景:

主要用在集合类中。 (集合不允许存储基本数据类型。存储数字时,使用包装类型)

包装类的作用:

A。 集合不允许存储基本数据类型。 存储数字时,使用包装类型;

b. 包装类提供了一系列实用的方法

31.List、Set、Map有什么区别?

①.List和Set是存储单列数据的集合,Map是存储键、值等双列数据的集合;

②. List中存储的数据是有序的并且允许重复;

③. Map中存储的数据是无序的,它的key不能重复,它的value可以重复。

④. Set中存储的数据是无序的,不允许重复,但是元素在集合中的位置是由元素决定的,位置是固定的(Set集合是基于数据存储的,所以位置是固定,但位置不受用户控制,因此集合中的元素对于用户来说仍然是乱序的)

32.有什么区别?

实现了一个变长数组,并且在内存中分配了连续的空间。 遍历元素和随机访问元素的效率比较高。

使用链表存储。 插入和删除元素时效率更高。

33、如果一个存储有很多值,但不知道KEY是什么,如何遍历所有的KEY和VALUE?

Get:接口的()方法

* 方法

* (): 判断是否还有其他可访问的元素

* next():返回下一个要访问的元素

(),返回这个map中包含的映射(键值)

() 方法获取密钥; ()方法获取值

(),返回键集

取出所有key的集合,获取对象,取出key,根据key取出对应的value

34.进程和线程有什么区别?

进程是指在内存中运行的应用程序。 每个进程都有自己独立的内存空间,一个进程中可以启动多个线程。 例如,在系统中,一个正在运行的exe就是一个进程。

线程是指进程中的一个执行过程,一个进程中可以运行多个线程。 例如,java.exe进程中可以运行许多线程。 线程总是属于一个进程。

进程中包含线程,线程必须属于某个进程。 一个进程中的多个线程共享该进程的内存,两者之间是一对多的关系。

35、线程的实现方法有哪些?

①. 继承类

特点:编写方便,可以直接操作线程; 适合单继承

②. 实现接口

特点:避免单一继承的限制; 促进资源共享

③. 编写实现类

特点:需要实现call()方法。 call方法与run方法不同,call方法有返回值。

36、多线程中调用start方法和run方法有什么区别?

调用run()方法:主线程只有一条执行路径; 没有启动新线程(普通方法调用)。

调用start()方法:多条执行路径,主线程和子线程并行交替执行; 启动一个线程。

调用start方法就是线程的启动。 调用后,线程进入就绪状态。

Run方法编写了线程要实现的功能。 一般不直接调用,而是由系统调用。 如果调用的话,就是普通的方法调用。

37. 多线程有问题吗?

什么时候使用多线程开发?

①. 程序需要同时执行两个或多个任务。 例如:手机淘宝中“我的界面”的后台程序,开启多个线程从不同系统获取数据,组合发送给前端APP。

②. 程序需要实现一些需要等待的任务,例如:导出过大的Excel文件。

③. 需要一些程序在后台运行,例如:Java垃圾收集器程序。

线程安全注意事项:

1、出现线程安全问题:当多个线程共享数据时,由于其中一个线程还没有完成对共享数据的操作,其他线程就会参与进来,因此出现了数据篡改的问题。

2、如何解决线程安全问题:要保证一个线程操作共享数据时,其他线程必须在外面等待,直到操作共享数据的线程执行完毕,其他线程才能操作共享数据。

3、同步方法的锁是当前对象this,同步代码块需要指定锁对象(必须唯一); 相比之下,同步代码块可以更精确地控制所管理的代码。

另:调试多线程的排查方法是输出多条日志,而不是Debug。 使用log4j输出中间处理结果来排查问题。

38.有什么区别?

全部实现Map接口,继承类,继承类

线程安全,效率低下,key和value都不允许为null。

它是非线程安全的,高效,并且键和值都允许为空。

为什么线程安全效率低下:

线程安全是以牺牲效率为代价的。 它是(一种同步锁,用于共享数据,一次只有一个线程可以访问共享数据),所以线程安全不需要多线程访问时使用。 实现同步。

39.Join和yield有什么区别?

Yield:(礼貌)当前线程贡献CPU使用权,但当前线程仍有可能再次获得CPU使用权。

Join:该方法出现时,挂起当前线程,执行其他进程,等待其他线程执行完毕后再执行挂起的进程。

40.线程的状态?

线程的状态

在某些条件下,线程的状态会发生变化。 一个线程有以下几种状态:

1.新建状态(New):一个线程对象被新创建。

2.就绪状态():线程对象创建后,其他线程调用该对象的start()方法。 该状态的线程位于“可运行线程池”中,变为可运行状态,只等待获取CPU的使用权。 即处于就绪状态的进程拥有其运行所需的除CPU之外的所有资源。

3、运行状态():处于就绪状态的线程获取CPU并执行程序代码。

4、阻塞状态():阻塞状态是指线程由于某种原因放弃了CPU的使用权,暂时停止运行。 直到线程进入就绪状态,才有机会进入运行状态。

阻塞分为三种类型:

(1)、等待阻塞:正在运行的线程执行wait()方法,该线程会释放所有占用的资源,JVM会将该线程放入“等待池”中。 进入该状态后,无法自动唤醒,必须依赖其他线程调用()或()方法才能被唤醒。

(2)同步阻塞:当运行的线程获取对象的同步锁时,如果同步锁被其他线程占用,JVM就会将该线程放入“锁池”中。

(3)其他阻塞:当正在运行的线程执行sleep()或join()方法时,或者发出I/O请求时,JVM会将线程置于阻塞状态。 当sleep()状态超时时,join()等待线程终止或超时,或者当I/O处理完成时,线程再次转入就绪状态。

5、死亡状态(Dead):线程执行完毕或因异常退出run()方法,线程结束生命周期。

41.获取Class对象的三种方法是什么?

第一种方式:

不带new,根据类的class属性获取Class对象(类名.class)

第二种方式:

new的情况下,通过.()方法获取Class对象

第三种方式:

通过Class.("包名+类名")方法获取Class对象

42.什么是反射?

Java反射是指在运行状态下,对于任何一个类,都可以知道这个类的所有属性和方法; 对于任何对象,您可以调用它的任何方法和属性; 并且您可以更改其属性。

反映()机制

它可以动态获取类的信息,动态调用对象的方法。

反射机制主要提供以下功能

在运行时确定任何对象的类。

在运行时构造任何类的对象。

在运行时确定任何类的成员变量和方法。

在运行时调用对象的任何方法。

对反射的理解:

1、通常我们创建对象的时候都是通过New class来创建的,但是通过反射技术,我们可以通过Class来创建实例。 (类的完整路径),例如:加载JDBC驱动程序时,我们使用反射技术。

2.反射主要用于平时开发中框架层的开发。 例如,框架内部使用反射技术来创建实例。

43.工厂模式和单例模式?

单例模式:应用该模式的类只能有一个实例。 它必须自己创建这个实例,它必须将这个实例提供给整个系统本身。 从具体实现来看:首先,单例类只提供了私有构造函数; 其次,类定义包含该类的静态对象私有对象; 第三,类提供静态公共函数用于创建或获取自身的静态私有对象。

工厂模式:简单来说,对象的创建传统上都是交给工厂类来创建,然后通过工厂类的工厂方法可以自己获取对象。 适用场景是对象创建步骤繁琐,过程相对复杂。

工厂模式和单例模式的区别:

区别一:工厂模式可以创建不同类型的对象实例,而单例模式只能创建一种类型的对象实例;

区别二:工厂模式创建的对象实例没有在内存中只创建一份的要求,而单例模式创建的对象实例在内存中只有一份。

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON