Java基础、类和对象面试题总结

Java基础、类和对象面试题总结:
**1.问:**byte a = 127;
a+=5;
System.out.println(a); 请问输出结果是什么?
答:-124,byte取值范围是-128—127,当a+=1时就已经超过了byte的临界值,此时输出的为-128;a+=2时,输出-127,以此类推a+=5输出-124
2.问:不同类型的变量在相互赋值时,什么情况下需要进行强制类型转换?
**答:**范围大的->范围小、长->短、子类—>父类
byte->short->int->long->float->double (范围从小到大)
小范围可以自动转换小范围,而小范围要转大范围必须强转才行
**3.问:**java 的 Integer 和 int 有什么区别?
**答:**int 是 java 内置基本数据类型之一,java 为每个基本类型都提供了一个封装类,Integer 就是 int 的封装类(也叫包装类型);int 变量的默认值为 0,Integer 变量的默认值为 null,所以 Integer 可以区分出未赋值和值为 0 的区别;Integer 类内部提供了一些关于整数操作的方法,例如上文用到的表示整数的最大值和最小值。
Java 为每个原始类型提供了包装类型:
原始类型: boolean,char,byte,short,int,long,float,double(8种基本数据类型)
包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
**4.问:**String和StringBuilder的区别?StringBuffer和StringBuilder的区别是什么?
**答:**1)三者之间String的速度最慢,StringBuilder>StringBuffer>String;
2)在java中提供三个类String、StringBuilder、StringBuffer来表示和操作字符串,字符串就是多个字符的集合。
3)String是内容不可变的字符串,是一个字符串常量,Stirng底层使用了一个不可变的字符数组(final char[]),String对象创建之后就不能被改变。
String str = new String(“bbb”); ----private final char value[]
而StringBuilder和StringBuffer是内容可以改变的字符串,StringBuilder和StringBuffer底层使用的是可变数组(没有使用final来修饰)----char value[]
4)StringBuilder 是单线程,是线程不安全的,效率较高,StringBuffer 是多线程,是线程安全的,效率较低
5)最经典就是拼接字符串
1.String进行拼接String c = “a”+”b”;
2.StringBuilder或StringBuffer
StriingBuilder sb = new StringBuilder();sb.append(“a”).append(“b”);
拼接字符串不能使用String进行拼接,要使用StirngBuilder或者StringBudder
**5.问:**java对象的初始化顺序
**答:**父类静态变量(字段)、静态块;子类静态变量(字段)
父类实例变量、实例块、构造方法;子类实例变量、实例块、构造方法
**6.问:**java类的加载过程是什么
**答:**类加载主要是由jvm虚拟机负责的,过程比较复杂,类加载分三步:加载(双亲委派模型)—》连接—》初始化
(1)加载(靠加载器完成,明白加载机制)
Java虚拟机一般使用Java类的流程:编辑.java文件转换成class文件,程序运行之前jvm类加载器会把编译完成的.class二进制文件加载到内存,将它放在运行时数据区的方法区内,然后在堆区创建一个java.lang.class对象,用来封装类在方法去内的数据结构,作为访问的接口,java提供的类加载器绝大多数都继承自classLoader类(根基),他们被用来加载不同来源的字节码文件。
Jdk提供的三种类加载器:
1) BootstrapClassLoader(启动类/引导类/根加载器):主要加载JAVA_HOME/jre/lib里的jar包,该目录下的所有jar包都是运行jvm是所必需的jar包。如果一个类的加载器是BootstrapClassLoader,那么该类的getClassLoader()方法返回null。
2) ExtClassLoader(扩展类加载器):主要加载java核心扩展类,即JAVA_HOME/jre/ext目录下的jar文件。
3) AppClassLoader(应用类加载器):主要加载开发者在应用编程中编写的类,即CLASSPATH路径下的jar文件。
三者的关系:
在这里插入图片描述
案例:将用户自定义的people类所在的源文件一jar包的形式放到ExtClassLoader加载类路径下,调用people类的getClassLoader()方法,返回的是ExtClassLoader还是AppClassLoader类加载器,还是两个都返回?
答:一个普通的people类,返回AppClassLoader,放在ExtClassLoader 类加载路径下进行加载,返回的是ExtClassLoader,原因如下:
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190716143302605.png
在这里插入图片描述
(2)连接(验证、准备、解析)
连接阶段负责把类的二进制数据合并到JRE中,三个阶段:
1) 验证(文件格式验证、元数据、字节码、符号引用):确保(加载的类信息)Class文件的字节流中包含的信息符合当前虚拟机的要求,并不会危害虚拟机自身的安全。
2) 准备:准备阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。内存分配的只包括被Static修饰的变量,不包括实例变量,实例变量在对象实例化时随着对象一期分配在java堆中。(也就是为静态文件分配内存,并设置初始值)。通常情况下初始值为0值。
3) 解析:是虚拟机将常量池中的符号引用替换为直接引用的过程(将类的二进制数据中的符号引用替换成直接引用)。
(3)初始化
初始化是类加载过程中的最后一步,在准备阶段变量已经赋过一次系统要求的初始值,在初始化阶段,则是根据程序员通过程序制定的主观计划初始化变量和其他资源。
**7.问:**面向对象的三大特征思想
答:1)封装:把描述对象属性的变量及实现对象功能的方法结合起来,定义一个程序单位,并保证外界不能任意更改内部属性,不能任意调动内部的方法接口。
2)继承:具有相同属性和行为的类(单继承),通过关键字extends完成,子类获得父类的成员属性和成员方法,没有指定的父类,默认Object类,继承大大增强了代码的可复用性。
3)多态:同一方法名,根据被调对象的不同,实现不同的行为。
静多态:方法重载,方法名相同,作用域相同(发生在一个类中),参数列表不同(参数个数、参数类型、参数的顺序)
动多态:方法重写(返回值类型相同,方法名相同,参数列表相同,发生在继承类中),继承,向上造型(父类引用引用派生类对象)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Java基础面试可以包括很多方面的知识,以下是一些常见的问和答案: 1. 什么是JNI? JNI是Java Native Interface的缩写,它提供了一组API,用于实现Java和其他语言(主要是C和C++)之间的通信。JNI允许Java代码与本地已编译的代码进行交互,尽管这可能会降低平台的可移植性。\[2\] 2. JNI的步骤是什么? JNI的步骤包括以下几个部分: - 在Java类中编写带有native声明的方法。 - 使用javac命令编译Java类。 - 使用javah命令生成头文件。 - 使用C/C++实现本地方法。 - 生成动态连接库。 - 执行Java代码。\[1\] 3. 请解释一下super.getClass()方法的作用。 super.getClass()方法是用于获取当前对象的父类的Class对象。在给定的示例中,Test类继承自Date类,当调用super.getClass().getName()时,会返回Test类的名称。因此,输出的结果是"Test"。\[3\] 希望以上回答能够帮助你理解Java基础面试。如果你有其他问,请随时提问。 #### 引用[.reference_title] - *1* *2* [Java基础常见面试及详细答案(总结40个)](https://blog.csdn.net/ayouki123456/article/details/124983188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java基础面试50](https://blog.csdn.net/weixin_38337769/article/details/100560220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值