1 Star 0 Fork 31

tankai / Ebooks

forked from Java精选 / Ebooks 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2022年初,常见Java基础面试题汇总及答案.md 13.24 KB
一键复制 编辑 原始数据 按行查看 历史

2022年初,常见Java基础面试题汇总及答案

全部面试题答案,更新日期:01月30日,直接下载吧!

下载链接:高清500+份面试题资料及电子书,累计 10000+ 页大厂面试题 PDF

Java 基础

题1:访问修饰符 public、private、protected 及不写(默认)时的区别?

区别如下:

作用域 当前类 同包 子类 其他
public
protected ×
default × ×
private × × ×

类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。

题2:Java 中为什么要定义一个没有参数的构造方法?

Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。

如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用 super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java 程序在父类中找不到没有参数的构造方法可供执行。

解决办法是在父类里加上一个没有参数的构造方法。

题3:Java 常量命名规则是什么?

常量名:全部使用大写,最好使用下划线分割单词。

题4:Java 中 Log4j 日志都有哪些级别?

log4j定义了8个级别的log,除去OFF和ALL可以说分为6个级别。

优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。

ALL 最低级别,用于打印所有日志记录。

TRACE 很低的日志级别,一般不会使用。

DEBUG 输出细粒度信息事件有助于调试应用程序,主要用于开发过程中打印一些运行信息。

INFO 消息在粗粒度级别上突出强调应用程序的运行过程,打印一些开发者关注的或者重要的信息,用于生产环境中输出程序运行的一些重要信息,但是不能滥用 避免打印过多的日志。

WARN 表示会出现潜在错误的情况,有些信息不是错误信息,但是用于给开发人员的一些提示。

ERROR 指出虽然发生错误事件 但仍然不影响系统的继续运行,打印错误和异常信息 如果不想输出太多的日志 可以使用这个级别

FATAL 指出每个严重的错误事件将会导致应用程序的退出,这个级别是重大错误可以直接停止程序。

OFF 最高等级,用于关闭所有日志记录。

题5:Java 中 >、>>、>>> 三者有什么区别?

1、“>”表示大于,如:if(a>b)…结果是boolean类型。

2、“>>”在c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。

移位运算符组成的表达式也属于算术表达式,其值为算术值。

左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。

右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。

在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。

通俗的讲就是指需要移动的数转换成2进制,右移几位就去掉右边的几位数,左移几位就在右边加几个0,比如14右移2位就是转成二进制变成1110,去掉右边的10,变成11,11转成十进制就是3;左移2位就是111000,转成十进制就是56。

实例

int i=15; i>>2;

执行的结果是3,移出的部分将被抛弃。

转为二进制,0000 1111(15)右移2位的结果是0000 0011(3),0001 1010(18)右移位的结果是0000 0011(3)。

3、“>>>”表示无符号右移,也叫逻辑右移,即若该数为正,则高位补0,而若该数为负数,则右移后高位同样补0。

实例

res = 20 >> 2;

20的二进制为0001 0100,右移2位后为0000 0101,则结果就为res =5。

res = -20 >> 2;

-20的二进制为1110 1011,右移2位,此时高位补0,即0011 1010,结果为res =- 5。

题6:java.rmi.Naming 类扮演了什么样的角色?

java.rmi.Naming类用来存储和获取在远程对象注册表里面的远程对象的引用。

Naming类的每一个方法接收一个URL格式的String对象作为它的参数。

题7:Java 中 Request 和 Response 对象都有哪些区别?

Request和Response对象起到了服务器与客户机之间的信息传递作用。Request对象用于接收客户端浏览器提交的数据,而Response 对象的功能则是将服务器端的数据发送到客户端浏览器。

1、Request对象

QueryString:用以获取客户端附在url地址后的查询字符串中的信息。

stra=Request.QueryString ["strUserld"]

Form:用以获取客户端在FORM表单中所输入的信息。(表单的method属性值需要为POST)

stra=Request.Form["strUserld"]

Cookies:用以获取客户端的Cookie信息。

stra=Request.Cookies["strUserld"]

ServerVariables:用以获取客户端发出的HTTP请求信息中的头信息及服务器端环境变量信息。

stra=Request.ServerVariables["REMOTE_ADDR"]//返回客户端IP地址

ClientCertificate:用以获取客户端的身份验证信息

stra=Request.ClientCertificate["VALIDFORM"]//对于要求安全验证的网站,返回有效起始日期。

2、Response对象

Response对象用于动态响应客户端请示,控制发送给用户的信息,并将动态生成响应。Response对象提供了一个数据集合cookie,它用于在客户端写入cookie值。若指定的cookie不存在,则创建它。若存在,则将自动进行更新。结果返回给客户端浏览器。

语法格式:Response.Cookies(CookieName)[(key)|.attribute]=value。这里的CookiesName是指定的Cookie的名称,如果指定了Key,则该Cookie就是一个字典,Attribute属性包括Domain,Expires,HasKeys,Path,Secure。

response的方法:

Write:向客户端发送浏览器能够处理的各种数据,包括:html代码,脚本程序等。

Redirect:response.redirect("url")的作用是在服务器端重定向于另一个网页。

End:用来终止脚本程序。

Clear:要说到Clear方法,就必须提到response的Buffer属性,Buffer属性用来设置服务器端是否将页面先输出到缓冲区。语法为:

Response.Buffer=True/False

Flush:当Buffer的值为True时,Flush方法用于将缓冲区中的当前页面内容立刻输出到客户端。

题8:​final 关键字的基本用法?

在Java中final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。下面从这三个方面来了解一下final关键字的基本用法。

1、修饰类

当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。

2、修饰方法

下面这段话摘自《Java编程思想》第四版第143页:

“使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。在最近的Java版本中,不需要使用final方法进行这些优化了。“

因此,如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的。即父类的final方法是不能被子类所覆盖的,也就是说子类是不能够存在和父类一模一样的方法的。

final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private,将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。(注:类的private方法会隐式地被指定为final方法。)

3、修饰变量

final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。

final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。

当函数的参数类型声明为final时,说明该参数是只读型的。即你可以读取使用该参数,但是无法改变该参数的值。

题9:Java 中常量有哪几种类型?

final修饰符用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

1、按照数据类型进行分类

1)基本数据类型

整数类型 byte、short、int、long 234 小数类型 float、double 12.5 字符类型 char 'A' 布尔类型 boolean true false

2)引用数据类型

空常量null,代表不指向任何的地址 数组 类,字符串常量String"字符串内容" 接口 枚举 注解

2、可以从表现形式上进行分类

字面值常量:看到这个常量后,就知道其值为多少。

符号常量:是用符号进行表示,看到这个常量后,能够知道其表示什么意思,但是不能知道其值为多少。

题10:Java 中 @XmlTransient 和 @Transient 有什么区别?

1、@XmlTransient

1)@XmlTransient注解解决JavaBean属性名称与字段名称之间的名称冲突,或者用于防止字段/属性的映射。

2)阻止将JavaBean属性映射到XML表示形式。

2、@Transient

1)表示属性不需要映射到数据库表,即使数据库存在该字段也不会映射。

2)通常用来修饰属性,使用时修饰get方法即可。

题11:string-s-=-new-string("abc");-创建了几个string对象

题12:java-和-c-有什么区别

题13:java-中-3*0.1-==-0.3-返回值是什么

题14:java-有没有-goto

题15:java-中标识符有哪些命名规则

题16:面向对象编程有哪些特征

题17:string-编码-utf-8-和-gbk-有什么区别?

题18:java-中什么是重载overload

题19:为什么静态方法中不能调用非静态方法或变量

题20:java中抛出-throwable-结构有哪几种类型

题21:非对称加密主要有哪些实现方式

题22:java-中实现多态的机制是什么

题23:java-中-int-a[]-和-int-[]a-有什么区别

题24:重载和重写有什么区别

题25:switch-中能否使用-string-作为参数

大厂面试题

大厂面试题

大厂面试题

Java
1
https://gitee.com/tankkai/ebooks.git
git@gitee.com:tankkai/ebooks.git
tankkai
ebooks
Ebooks
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891