java基础 面向对象 简答题

​​​​​

1.面向对象的特征有哪些

封装:是指将数据和他的数据处理过程包装起来,隐藏类的内部细节

继承:新创建的类继承现有类的成员属性和方法,提高代码复用和扩展性

多态:两个特征向上造型和向下转型,一个将父类型的对象指向子类型的引用,另一个将父类型的引用强转为子类型的引用

2.访问修饰符有哪些,他们有什么区别

private        只有本类

default       只有同包类

protected   只有同包类及其他包子类可使用

public   在所有类均可使用

3.float f = 3.4; 是否正确?

float f=3.4f;

4.short s1 = 1; s1 = s1 + 1;有错码? short s1 = 1; s1+=1;有错吗?

前者有错改成 s1= (short)(s1+1)等同于后者

5.Java有没有goto?

保留关键字  

goto   

const

6.&和&&的区别 

逻辑运算短路与 &&

&表达两种意思  

一种是运算&

一种是按位&

a7.解释内存中栈(stack)、堆(heap)和方法区(method area)的用法

栈stack中存入变量名 变量地址  变量类型

堆heap中存入变量值

方法区存入类 的 字节码文件  , 静态方法 ,静态变量

在Java虚拟机(JVM)内存中,栈(stack)、堆(heap)和方法区(method area)是不同的内存区域,用于存储不同类型的数据和执行程序的相关信息。

  1. 栈(stack):

    • 栈用于存储线程执行方法时的局部变量、方法调用和方法返回的信息。

    • 每个线程都有自己的栈,当线程启动时,会创建一个初始的栈帧(stack frame),随着方法的调用和返回,栈帧会被依次压入和弹出。

    • 栈的大小和生命周期都是由编译器或虚拟机进行管理的,通常比较小。

    • 栈的分配和释放是自动进行的,不需要手动管理。

  2. 堆(heap):

    • 堆是用于存储对象实例和数组的区域。

    • 所有通过new关键字创建的对象都存储在堆中。

    • 堆的大小和生命周期是动态的,由垃圾回收器(garbage collector)进行管理。

    • 堆的分配和释放是相对较慢的,但可以存储大量的数据。

  3. 方法区(method area):

    • 方法区用于存储类的信息、静态变量、常量池、方法字节码等数据。

    • 方法区是所有线程共享的,存储的是类的结构信息,不存储对象的实例数据。

    • 方法区的大小和生命周期是由虚拟机进行管理的,可以进行调整。

 

8.switch是否能作用在byte上,能否作用在long上,能否作用在String上?

byte short int char  String

不能作用float  long boolean

9.用zuiyouxiaolv的方法计算2乘以8

System.out.print(2<<3);

10.在Java中,如何跳出当前的多重嵌套循环

OUT:

循环体

break OUT;

while(true){

        if( n ==1){

        return 1;}

f(n) = f(n-1)+f(n-2);}

11.构造器是否可以被重写?

不可以,构造器不能被继承,父子类不存在同一构造方法来进行方法覆盖重写

12.重写和重载的区别,重载的能法能否根据返回值类型进行区分?

重写☞方法签名一致只有方法体不同  是父子类中的。

重载☞方法签名不一致其他都一样   是一个类当中的特殊方法  没有返回值  ,方法名是类名,

只要满足以上条件就一定是重载方法。

13.【华为面试题】为什么不能根据返回类型来区分重载?

重载目的是为了创建实例对象,不能返回给未创建对象数据类型。

重载的定义是其他都相同,只有方法签名不同,返回类型就毫无意义区分。

14.阐述静态变量和实例变量的区别

静态变量有默认值,不可以被改变;

实例变量是创建出来的变量,可以改变类型 ,值 ,地址

15.一个“.java”源文件中是否可以包含多个类?有什么限制

只有一个public类  并且public修饰的类名与java文件名一致

其他类可以有多个 内部类可以有多个public

16.用Java写一个折半查找

二分查找

arr[ 9 ]  = { 1,3,4,5,2,6,9,7,8};

int number = arr.length; 

for ( int i = 0 , i < arr .length , i++){

int a = arr[ number/2  ] 

if ( arr[i]  >  a ){

arr[ number/2 ] = arr [i ];

arr [ i ] =  a;

}

17.阐述静态变量和实例变量的区别

java基础 面向对象 简答题_第1张图片

 

  18.描述一下JVM加载class文件的原理机制

  1. JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的, Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。

  2. 由于Java的跨平台性经过编译的Java源程序,并不是一个可执行程序,而是一个或多个类文件,当Java程序需要使用某个类时JVM会确保这个类已经被加载、连接(验证,准备和解析),和初始化。类的加载就是指把.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象,加载完成后Class对象还不完整,所以此时的类还不可用,当类被加载后就进入连接阶段,这一阶段包括验证,准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:

    1. 如果没存在直接的父类,并且这个类还没有被初始化,那么就先初始化父类。

    2. 如果类中存在初始化语句,就依次执行这些初始化语句

  3. 类的加载是由类加载器完成的类加载器,包括:根加载器(BootStrap)、扩展加载器(Extension),系统加载器(System)和用户自定义类的加载器(java.lang.ClassLoader的子类)。

  4. 从Java1.2 开始类加载过程,采取了父亲委托机制(PDM),PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器,类的加载,首先请求父类加载器加载,父类加载器无能为力时,才由其子类加载器自行加载,JVM不会像Java程序提供对Bootstrap的引用,下面是关于几个类加载器的说明:

    1. Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar)。

    2. Extension:从java.ext.dirs系统属性所指定的目录中加载类库。他的父加载器是Bootstrap;

    3. System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器,它从环境变量classpath或者系统属性java.class.path 所指定的目录中加载类,是用户自定义加载器的默认父加载器。

你可能感兴趣的:(面试问题83问,java,开发语言)