测试开发面试题----JAVA基础

JAVA面向对象有哪些特征

封装

封装是指将对象属性和方法打包在一个类中,只向外界暴露必要的接口,它通过访问修饰符来控制访问权限。

  • Public:可以在程序的任何地方访问
  • Private:只能在类内访问
  • Protected:可以在类内、子类和同一包中访问
  • 默认:包私有,只能在同一包中访问

继承

继承是指一个类继承另一个类的属性和方法

  • this和super的区别:this是指当前对象的实例(实例变量与形参相同时),引用当前对象的实例变量;调用当前对象的构造函数;返回当前对象的引用。super是引用父类对象,访问和调用父类属性和方法。

多态

多态允许一个接口或者方法在不同类中有不同的实现,它依靠方法重载和方法重写来实现。

  • 方法重载:发生在一个类的内部,要求函数的参数列表不同(类型、顺序、个数);返回值的类型可以相同也可以不同。
  • 方法重写:发生在父类和子类直接,子类重写父类方法,要求参数列表必须相同;返回类型可以相同或者子类返回类型是父类返回类型的子类型;子类访问级别不能比父类更低;子类抛出异常不能比父类更广泛。

抽象

抽象是指将对象的共性提取出来定义一组通用的行为或者属性,不关心具体的实现细节。

  • 抽象类(abstract):不能被实例化的类;可以包含抽象方法和具体方法;可以有成员变量和构造方法。
  • 接口(interface):只包含抽象方法(Java 8以后有默认方法),它定义一组方法,这些方法必须由实现接口类完成。没有成员变量;一个类可以实现多个接口。
  • 抽象类用于提供一组相关类的属性和方法,接口用于定义类应该实现的行为规范。

final关键字

final表示最终的,不可改变的。当它修饰类的时候表示这个类不能被继承(String类);修饰方法的时候表示方法不能被重写;修饰基本数据类型的时候表示该变量为常量,不能修改;修饰引用数据类型时,表示引用对象不变,但是对象的值可以改变。

String为什么使用final修饰

  1. String是不可变类型,它是线程安全的。
  2. String的使用范围太广泛,如果可以对它修改会导致安全问题。
  3. String不能被继承,如果继承会破坏它的不可变。

Static关键字 

static关键字用于定义静态变量、静态方法和静态代码块。它减少了内存的使用,因为所有对象共享一个静态成员。

  • 静态变量:属于类,可以直接通过类名进行访问;无论创建多少对象,静态变量在内存中只有一个副本,所有对象共享这个副本;在类加载时初始化,程序执行期间一直存在。
  • 静态方法:属于类,可以通过类名直接访问;只能访问静态变量和调用静态方法,因为它在对象实例创建前已经存在。
  • 静态代码块:类加载时运行,用于初始化静态变量。

String创建字符串对象的方式

  • 使用字符串常量池:JVM在字符串常量池中查找有没有相同的值,如果有则返回引用,如果没有先创建一个放在字符串常量池中再返回引用。
  • 使用new创建:在堆内存中创建一个,即使有内容相同的值也创建。

字符串常量池的作用

  • 避免重复创建相同对象。
  • 在字符串常量池中,相同的字符串使用同一个引用,可以实现快速比较。
  • 因为减少在堆空间中创建对象,所以减少垃圾回收压力。

String中常用方法

length():求长度;chatAt():求指定索引处的字符;substring():求子串;repalce():替换;trim():去掉前后空白;split():划分字符串

JDK和JRE的区别

  • JDK:JAVA开发工具,包含开发和调试JAVA程序所需要的工具和资源,它由JRE、开发工具和API组成,用于开发编译调试工具,供开发者使用
  • JRE:JAVA的运行环境,提供了运行JAVA程序的所需要的库、JVM和其他组件;JVM:JAVA虚拟机,解释和执行JAVA字节码,用于运行JAVA程序,供用户使用

continue、break和return的区别

  • continue:跳过当前循环,立即进入下一次的循环。
  • break:退出循环结构
  • return:终止当前方法的执行,直接返回结果

JAVA中的IO流

  • 字节流,可以分为字节输入流(InputStream)和字节输出流 (OutputStream);其中字节输入流有FileInputStream和DataInputStream,字节输出流有FileOutputStream和DataOutputStream。
  • 字符流,可以分为字符输入流(Reader)和字符输出流(Writer);其中字符输入流有FileReader和DataReader,字节输出流有FileWriter和DataWriter。
  • 节点流,直接与数据源或者目的地连接,FileInputStream,FileOutputStream
  • 过滤流,在已经存在的流上构建,提供额外的功能,如缓冲和数据格式转换,DataInputStream,DataOutputStream

File中常用方法

createFile()创建文件;createDirectory()创建目录;delete()删除文件;copy()复制文件;move()移动文件;readAllbytes()读取文件所有字节;readAlllines()读取文件所有行;write()文件写入;list()遍历文件;watch()监控文件;

面向对象和面向过程编程

  • 面向对象:使用对象和类封装数据的行为,通过对象之间的交互实现程序功能;可以重复使用代码;通过类和对象将程序划分为独立模块,提高代码可维护性;代码更加灵活,易于扩展和修改。
  • 面向过程:通过一系列步骤和函数来处理数据和实现功能,从上到下按照顺序执行;简单直观,效率高。 

深拷贝和浅拷贝

  • 深拷贝:复制对象本身和引用类型指向的对象,引用类型指向不同的对象,对象之间完全独立;改变对象引用不会对复制前的对象有影响。
  • 浅拷贝:复制对象本身和非引用对象,对于引用类型直接复;改变对象引用对复制前的对象有影响。

JAVA中的异常

JAVA中的异常父类为Throwable类,它里面包含Error和Exception。Error是指严重错误,程序无法控制和恢复,如内存溢出,栈溢出。Exception是指可以通过捕获来恢复程序,它包含受检异常(在编译时必须处理,如IO异常、SQL异常)和非受检异常(运行时异常,编译时不要求处理,如空指针、数组边界)

处理异常的过程

在JAVA中可能是通过一系列方法的调用才会抛出异常,这些方法称为调用栈。JAM会顺着调用栈查看是否有可以处理异常的代码,如果有则调用处理,如果没有则交给默认的异常处理器,默认异常处理器会打印异常信息并终止程序。一般通过try-catch-finally和try-with-resources来处理异常。try-with-resources能够确保资源不再被需要的时候正确关闭,减少了忘记资源的可能性,避免了资源泄露。

finally在以下情况不会被执行

  • 在finally语句块中发生异常
  • 在前面代码中使用System.exit()退出程序
  • 程序所在线程死亡

反射

反射是指在运行时,对于给定类的名字可以得到这个类的所有信息。它的常见用途是:动态调用方法;动态创建对象;访问和修改字段;查看注解。

  • 优点:轻松获取类的信息;提高代码的复用性;增加程序灵活性,在运行时动态对类进行修改。
  • 缺点:会绕过一些限制访问属性;可读性差;动态解析性能差。

反射的使用场景

  • 在JDBC连接数据库时,使用反射加载数据库驱动文件。
  • 使用反射将XML文件装载Bean文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值