Java4班题库-传智专修学院Java面试题库三

版权声明:嫣子的播客 https://blog.csdn.net/weixin_44067762/article/details/85294399

Java4班题库
=-=-=-=-=-此 处 分割线=-=-=-=-=-
biubiubiu~觉得不错可以继续阅读其他博客哟
此播客如有侵权请联系我改正哦,日常在线,如不在线未及时回复请包涵等待
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

1.Java中创建对象的几种方式(李源)

答:五种;分别是 使用new关键字创建、使用Class类的newInstance方法、使用Constructor类的newInstance方法,
使用clone方法、使用反序列化创建;
前三种调用了构造函数,后两种没有调用构造函数。
备注clone :
Java中所有的类都默认继承自Object类,而Object类中提供了一个clone()方法,这个方法的作用是返回一个Object对象的复制,这个复制方法返回的是一个新的对象而不是一个引用。

(
1. 使用new 关键字
使用 new 关键字创建对象,实际上是做了两个工作,一是在内存中开辟空间,二是初始化对象。但是new 关键字只能创建非抽象对象。

2. 使用反射创建对象
反射是对于任意一个正在运行的类,都能动态获取到他的属性和方法。反射创建对象分为两种方式,一是使用Class类的new Instance() 方法,二是使用Constructor类的new Instatnce() 方法。

两者区别在于: 
Class.newInstance() 只能够调用无参的构造函数,即默认的构造函数; 
Constructor.newInstance() 可以根据传入的参数,调用任意构造构造函数。

3. 使用clone方法
要拷贝的对象需要实现Cloneable类,并重写clone()方法。

4. 使用反序列化方式
当序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。为了反序列化一个对象,需要让类实现Serializable接口。然后在使用new ObjectInputStream().readObject() 来创建对象。
)

2.修饰符的访问权限(李源)

答: java中4中修饰符分别为public、protect、default、private

访问权限   类   包  子类  其他包
  public     ∨   ∨   ∨     ∨
  protect    ∨   ∨   ∨     
  default    ∨   ∨          
  private    ∨               

private
访问限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。(只允许在本类中访问)

default
“默认访问模式“,即不加任何访问修饰,只允许在同包中进行访问。(子类和外包均不可访问)

Protected
“保护形”,被其修饰的类、属性及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。(不可访问外包)

Public
供所有的类访问。(本包,外包,子类,本类均可访问)

3.常见的运行时异常(李源)

答:

(1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象
(2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发异常
(3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符
(4)java.lang.IndexOutOfBoundsException 数组角标越界异常;
(5)java.lang.IllegalArgumentException 方法传递参数错误
(6)java.lang.ClassCastException 数据类型转换异常
(7)java.lang.NoClassDefFoundException 未找到类定义错误
(8)SQLException 操作数据库异常
(9)java.lang.InstantiationException 实例化异常
(10)java.lang.NoSuchMethodException 方法不存在异常

4.Java中的集合(李源)

答:
1.Set:,无序,元素不可重复(但是元素在 set 中的位置是有该元素的 HashCode 决定的,其位置其实是固定的)
2.List:有序,列表存储,元素可重复
3.Map:无序,元素可重复

5.介绍一下封装(李源)

答:因为从我们学习JAVA开始,就基本上接触了封装,因为JAVA中的所有程序都是写在类中的,类也能当做一种封装。

在面向对象中封装是指隐藏对象的属性和实现的细节,仅对外提供公共访问方式。在类定义中用private关键字来实现封装。封装有什么好处?

一是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法唯一的途径就是通过类本身,类才有资格调用它所拥有的资源(方法,数据项属性等等)。所以第一个好处就是数据的安全性提高了。

二是通过隐藏隔离,只允许外部对类做有限的访问,开发者可以自由的改变类的内部实现,而无需修改使用该类的那些程序。只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就可以自由改变,各取所需,利于分工。

三就是提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤。

把现实中需要处理的事物通过数据的方法表达出来就是抽象

把事物的数据和方法用类的方式集合起来就是封装

封装的数据和方法通过继承来实现重用,同个方法通过方法的重载实现不同的逻辑即多态

6.多线程run和start的区别(李源)

答:启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,
这意味着它可以由 JVM 调度并执行,这并不意味着线程就会立即运行。
run()方法是线程启动后要进行回调(callback)的方法。

(
在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡:
   第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
  第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
  第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
  第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个事件的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。
  第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。
)

7.什么是死锁(李源)

答:两个进程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是两个进程 都陷入了无限的等待中。

8.抽象类能实例化吗?(李源)

答:抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中

9.写代码一般会哪些报异常(李源)

前面有同款题目,略

10.字节流和字符流的区别(李源)

答:
1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8 码表中是 3 个字节)时。
先去查指定的编码表,将查到的字符返回。
2.字节流可以处理所有类型数据,如:图片,MP3,AVI 视频文件,而字符流只能处理字符数据。
只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

11.单例模式(李源)

答:
一、单例模式定义:

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。
这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,
以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,
以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

二、单例模式特点:
  1、单例类只能有一个实例。
  2、单例类必须自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

单例模式保证了全局对象的唯一性,比如系统启动读取配置文件就需要单例保证配置的一致性

12.自定义异常(李源)
答:在代码中使用自定义的异常类,可以对异常进行统一的封装处理。使得整个项目的异常处理更规范、更统一、更优雅。同时,使得日志的记录上更加清晰,便于后续查日志定位问题。
需要自定义一个类,继承自系统的异常类。具体需要什么样类型的异常类,就继承自相应的系统类。

如果希望写一个检查性异常类,则需要继承 Exception 类。
如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。
创建构造方法,传递自定义异常信息。

在需要抛出异常的地方使用throw new 自定义异常(异常信息),将异常抛出。或在方法名后使用  throws 自定义异常  来声明

13.Byte的取值范围(李源)

答:-128~127

14.Integer的paseInt()方法传入字符串会发生什么?(李源)

答:
parseInt(String s )方法是类Integer的静态方法,它的作用就是将形参 s 转化为整数,
比如:
Interger.parseInt(“1”)=1;
Integer.parseInt(“20”)=20;
Integer.parseInt(“324”)=324;

当然,s 表示的整数必须合法,不然是会抛异常的

15.final关键字(刘子健)

final的意思就是不可更改
1)修饰变量,被final修饰的变量必须要初始化,赋初值后不能再重新赋值。
2)修饰方法,被final修饰的方法代表不能重写。
3)修饰类,被final修饰的类,不能够被继承。
4)final和static的区别:static作用于成员变量用来表示只保存一份副本,
而final的作用是用来保证变量不可变

=-=-=-=-=-此 处 分割线=-=-=-=-=-
biubiubiu~觉得不错可以继续阅读其他博客哟
此播客如有侵权请联系我改正哦,日常在线,如不在线未及时回复请包涵等待
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

猜你喜欢

转载自blog.csdn.net/weixin_44067762/article/details/85294399
今日推荐