Java-Problems

Java-Problems,第1张

Java-Problems

这里写自定义目录标题
  • Java面向对象测试题
    • 1、说说你对面向对象思想的理解?
    • 2、Java 对象初始化顺序
    • 3、Overload 和 Override 的区别?Overload 的方法是否可以改变 返回值的类型?
    • 4、int 和 Integer 有什么区别?
    • 5、char 型变量中能不能存贮一个中文汉字,为什么?
    • 6、Java 中,Serializable 与 Externalizable 的区别?
    • 7、抽象类和接口有什么区别?
    • 8、String 和 StringBuilder、StringBuffer 的区别?
    • 9、阐述 final、finally、finalize 的区别?
    • 10、Java 中的异常处理机制的简单原理和应用?

Java面向对象测试题 1、说说你对面向对象思想的理解?
   在java语言中有句话叫”万事万物皆对象”。如果让我自己来理解,对象是有属性和兴伟的,我需要通过类与对象的比较进行说明,首先类是抽象的,而对象是具体的,可以说类是对象的模板,对象是类的一个个体,对应的一个实例。
2、Java 对象初始化顺序

1、先创建对象 People p=new People();
2、在堆上为 People 对象分配足够的存储空间,所有属性和方法都被设置成默认值(数字为 0,字符为 null,布尔为 false,而所有引用被设置成 null);
3、执行构造函数检查是否有父类,如果有父类会先调用父类的构造函数,没有父类,z则 执行默认值字段的赋值即方法的初始化动作。
4、执行构造函数。

3、Overload 和 Override 的区别?Overload 的方法是否可以改变 返回值的类型?
 Overload是重载的意思,表示在同一个类中,允许存在一个以上的同名函数,只要他们的参数个数或者参数类型不同即可。
 Override是覆盖的意思,也就是重写,它与返回值类型无关,只看参数列表。
 两者不同主要体现在:

1,目的
overload用于增加程序的可读性(做法不同,但是做的同一事情)。
override用于提供其超级类已经提供的方法的特定实现。
2,范围
overload 在相同的类范围内内执行。
override发生在两类具有继承(继承)的关系。
3, 参数
overload参数必须不同。
override参数必须相同。
4,多态性
overload 静态多态,调用的函数在编译时被选中。
override 是运行时多态性的。
5,返回类型
overload中可以相同或不同。但你必须改变参数。
override必须是相同的或协变的。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中定义的方法,这相当于把父类中定义的那个完全相同的方法给覆盖掉了,这也是面向对象编程的多态的一种表现。子类覆盖父类方法时只能抛出父类的异常或者异常的子类或者父类异常的子集,因为子类可以解决父类的一些问题,但不能比父类有更多的问题。

重载overload的特点就是与返回值无关,只看参数列表,所以重载的方法是可以改变返回值类型的。所以,如果两个方法的参数列表完全一样,是不能通过让他们的返回值类型不同来实现重载的。
4、int 和 Integer 有什么区别?
int 是java的基本数据类型。
Integer 继承了Object类,是对象类型,是 int 的包装类。

int 与 Integer 的区别
1、值的存储
int 存储在栈中
Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。
2、初始化
int 初始化值为0。
Integer 初始化值为null。
3、传参
int 是值传递,栈中的数据不可变。
Integer 对象是引用传递,引用不可变,就是引用指向的堆空间地址,地址中的值是可以改变的(常量池)。
4、泛型支持
泛型不支持int,但是支持Integer。
5、运算
int 可以直接做运算,是类的特性。
Integer 的对象可以调用该类的方法,需要转化为基本类型int,进行拆箱后才能进行运算。
相同值下 int 和 Integer 的比较结果
1、两个通过new生成的变量,结果为false。
2、int 和 Integer 的值比较,若两者的值相等,则为true。
(注意:在比较时,Integer会自动拆箱为int类型,然后再做比较。)
3、new 生成的Integer变量 和 非new 生成的Integer变量比较,,结果为false。
(注意:new 生成的Integer变量的值在堆空间中,非new 生成的Integer变量的值在在常量池中。)
(注意:非new生成的Integer变量,会先判断常量池中是否有该对象,若有则共享,若无则在常量池中放入该对象;也叫享元模式,后面再说。)
4、两个非new 生成的Integer对象比较,则结果为true。
(注意:此处需要一个前提:值的范围在 -128 ~ 127 之间。
涉及到java对 int 与 Integer 的自动装箱和拆箱的一种模式:享元模式—flyweight,为了加强对简单数字的重复利用。
在赋值时,其实是执行了Integer的valueOf()方法。
当值在 -128 ~ 127之间时,java会进行自动装箱,然后会对值进行缓存,如果下次再有相同的值,会直接在缓存中取出使用。缓存是通过Integer的内部类IntegerCache来完成的。
当值超出此范围,会在堆中new出一个对象来存储。
PS:自动装箱与拆箱是在JDK1.5中出现的。

5、内部类IntegerCache
通过此类可以缓存简单数字。
缓存的数大小可以由 -XX:AutoBoxCacheMax = 控制。
jvm初始化时,java.lang.Integer.IntegerCache.high属性可以设置并保存在私有系统属性中。
规定了low属性的值:-128

5、char 型变量中能不能存贮一个中文汉字,为什么?

可以, char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字。
在Java中,char类型可以存储一个中文汉字,因为Java中使用的编码是Unicode(不选择任何特定的编码,直接使用字符在字符集中的编号,这是统一的唯一方法),一个char类型占2个字节(16比特),所以放一个中文是没问题的。

6、Java 中,Serializable 与 Externalizable 的区别?

Serializable 接口是一个序列化 Java 类的接口,以便于它们可以在网络上传输
或者可以将它们的状态保存在磁盘上,是 JVM 内嵌的默认序列化方式,成本高、
脆弱而且不安全。Externalizable 允许你控制整个序列化过程,指定特定的二进
制格式,增加安全机制。

7、抽象类和接口有什么区别?
  1. 抽象类要被子类继承,接口要被类实现。
  2. 接口只能做方法声明,抽象类中可以作方法声明,也可以做方法实现。
  3. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
  4. 接口是设计的结果,抽象类是重构的结果。
  5. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。
  6. 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量。
  7. 抽象类主要用来抽象类别,接口主要用来抽象功能。
8、String 和 StringBuilder、StringBuffer 的区别?

String: 适用于少量的字符串 *** 作的情况。
StringBuilder: 适用于单线程下在字符缓冲区进行大量 *** 作的情况。
StringBuffer: 适用多线程下在字符缓冲区进行大量 *** 作的情况。

9、阐述 final、finally、finalize 的区别?

final: 可以用于修饰变量,方法,类,被修饰的变量的值不能被改变,被修饰的方法不能被重写,被修饰的类不能被继承,它和abstract是反义词。
finally: 通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常运行还是发生异常,这里的代码只要JVM不关闭都会执行,可以将释放外部资源的代码写在finally块中。
finalize: Object类的方法,Java中允许使用finalize()方法在垃圾回收器将对象从内存中清除出去之前做必要的清理工作,这个方法是由垃圾回收器在销毁对象时调用的,通过重写finalize()方法可以整理系统资源或者执行其他清理工作。

10、Java 中的异常处理机制的简单原理和应用?
java中Throwable这个类可以被作为异常抛出的类,继承它的分为异常Exception和错误Error.

Exception表示程序需要捕捉和处理的的异常;
Error表示系统级别的错误和程序无需处理的。
我们所需要关心的是Exception.,Execption可以分为java标准定义的异常和程序员自定义异常2种.
(1)一种是当程序违反了java语规则的时候,JAVA虚拟机就会将发生的错误表示为一个异常.这里语法规则指的是JAVA类库内置的语义检查。
(2)另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是Thowable的子类。
异常处理是与程序执行是并行的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存