首页 > 编程语言 >大厂的JAVA经典面试题-初中级

大厂的JAVA经典面试题-初中级

时间:2024-10-24 18:16:14浏览次数:3  
标签:面试题 JAVA 初中级 nal try static 异常 nally s1

前言

本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘

*** 12万字的java面试题整理 ***

final有哪些用法?

final也是很多面试喜欢问的地方,但我觉得这个问题很无聊
通常能回答下以下5点就不错了:

  1. 被final修饰的类不可以被继承
  2. 被final修饰的方法不可以被重写
  3. 被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.
  4. 被final修饰的方法,JVM会尝试将其内联,以提高运行效率
  5. 被final修饰的常量,在编译阶段会存入常量池中.

除此之外,编译器对final域要遵守的两个重排序规则更好:

  • 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作
    之间不能重排序 初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序.
final int y;
A() {
    y = 1; // 写入final域
    // 构造函数中的其他代码...
}

A a = new A(); // 将对象引用赋值给a

在A对象的构造函数中,对y的赋值操作必须在new A()表达式的结果被赋给a之前发生。编译器或处理器不能对这两个操作进行重排序,以确保当通过a访问y时,看到的是已经初始化好的值。(具体可以了解java编译时重排序)

static都有哪些用法?

所有的人都知道static关键字这两个基本的用法:静态变量和静态方法.也就是被static所修饰的变量/方法都属于类的静态资源,类实例所共享.
除了静态变量和静态方法之外,static也用于静态块,多用于初始化操作:

public calss PreCache{
  static{
    //执行相关操作
   }
}

外static也多用于修饰内部类,此时称之为静态内部类.

最后一种用法就是静态导包,即 import static
import static是在JDK 1.5之后引入的新特性,可以用来指定导入某个类中的静态资源,并且不需要使用类名,可以直接使用资源名,比如:

import static java.lang.Math.*;
public class Test{
  public static void main(String[] args){
    //System.out.println(Math.sin(20));传统做法
    System.out.println(sin(20));
  }
}

3*0.1 == 0.3返回值是什么

false,因为有些浮点数不能完全精确的表示出来.

a=a+b与a+=b有什么区别吗?

+= 操作符会进行隐式自动类型转换,此处a+=b隐式的将加操作的结果类型强制转换为持有结果的类型,而a=a+b则不会自动进行类型转换.如:

byte a = 127;
byte b = 127;
b = a + b; // 报编译错误:cannot convert from int to byte
b += a;

以下代码是否有错,有的话怎么改?

short s1= 1;
s1 = s1 + 1;

有错误.short类型在进行运算时会自动提升为int类型,也就是说 s1+1 的运算结果是int类型,而s1是short类型,此时编译器会报错.

short s1= 1;
s1 += 1;

+=操作符会对右边的表达式结果强转匹配左边的数据类型,所以没错.

try catch finally,try里有return,finally还执行么?

执行,并且finally的执行早于try里面的return

结论:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的
值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数
返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

Excption与Error包结构

Java可抛出(Throwable)的结构分为三种类型:被检查的异常(CheckedException),运行时异常
(RuntimeException),错误(Error)。

1. 运行时异常

定义:RuntimeException及其子类都被称为运行时异常
特点:Java编译器不会检查它。也就是说,当程序中可能出现这类异常时,倘若既没有通过throws声明抛出它",也没有用try-catch语句捕获它,还是会编译通过。
常见的五种运行时异常:
ClassCastException(类转换异常)
IndexOutOfBoundsException(数组越界)
NullPointerException(空指针异常)
ArrayStoreException(数据存储异常,操作数组是类型不一致)
BufferOverflowException

2. 被检查异常

定义:Exception类本身,以及Exception的子类中除了"运行时异常"之外的其它子类都属于被检查异常。
特点 : Java编译器会检查它。 此类异常,要么通过throws进行声明抛出,要么通过try-catch进行捕获处理,否则不能通过编译。例如,CloneNotSupportedException就属于被检查异常。当通过clone()接口去克隆一个对象,而该对象对应的类没有实现Cloneable接口,就会抛出CloneNotSupportedException异常。被检查异常通常都是可以恢复的。
如:
IOException
FileNotFoundException
SQLException

3. 错误

定义 : Error类及其子类。
特点 : 和运行时异常一样,编译器也不会对错误进行检查。
当资源不足、约束失败、或是其它程序无法继续运行的条件发生时,就产生错误。程序本身无法修
复这些错误的。例如,VirtualMachineError就属于错误。出现这种错误会导致程序终止运行。OutOfMemoryError、ThreadDeath。
Java虚拟机规范规定JVM的内存分为了好几块,比如堆,栈,程序计数器,方法区等

标签:面试题,JAVA,初中级,nal,try,static,异常,nally,s1
From: https://blog.csdn.net/2401_87718562/article/details/143216102

相关文章

  • BeginnersBook-Java-示例-一-
    BeginnersBookJava示例(一)原文:BeginnersBook协议:CCBY-NC-SA4.0Java程序:计算复合利率原文:https://beginnersbook.com/2019/07/java-program-to-calculate-compound-interest/在本教程中,我们将编写一个java程序来计算复合利率。复利计算公式使用以下公式计算复利:......
  • BeginnersBook-Java-集合教程-一-
    BeginnersBookJava集合教程(一)原文:BeginnersBook协议:CCBY-NC-SA4.0如何在Java中对ArrayList进行排序原文:https://beginnersbook.com/2013/12/how-to-sort-arraylist-in-java/在本教程中,我们分享了对ArrayList<String>和ArrayList<Integer>进行排序的示例。另请阅......
  • BeginnersBook-Java-IO-教程-一-
    BeginnersBookJavaIO教程(一)原文:BeginnersBook协议:CCBY-NC-SA4.0如何在Java中创建文件原文:https://beginnersbook.com/2014/01/how-to-create-a-file-in-java/在本教程中,我们将了解如何使用createNewFile()方法在Java中创建文件。如果文件在指定位置不存在并且......
  • HowToDoInJava-Java-教程-二-
    HowToDoInJavaJava教程(二)原文:HowToDoInJava协议:CCBY-NC-SA4.0JVM内存模型/结构和组件原文:https://howtodoinjava.com/java/garbage-collection/jvm-memory-model-structure-and-components/每当执行Java程序时,都会保留一个单独的存储区,用于存储应用程序代码的各......
  • StudyTonight-Java-中文教程-六-
    StudyTonightJava中文教程(六)原文:StudyTonight协议:CCBY-NC-SA4.0JavaCharacter.isLetter(char)方法原文:https://www.studytonight.com/java-wrapper-class/java-character-isletterchar-ch-methodJavaisLetter(charch)方法是Character类的一部分。此方法用于检查指......
  • StudyTonight-Java-中文教程-二-
    StudyTonightJava中文教程(二)原文:StudyTonight协议:CCBY-NC-SA4.0JavaFloat类原文:https://www.studytonight.com/java/float-class.phpFloat类将基元类型的浮点值包装在对象中。Float类型的对象包含一个类型为浮点的字段。此外,此类提供了几种将浮点转换为字符串和将......
  • HowToDoInJava-其它教程-2-二-
    HowToDoInJava其它教程2(二)原文:HowToDoInJava协议:CCBY-NC-SA4.0Java核心面试问题–第2部分原文:https://howtodoinjava.com/interview-questions/core-java-interview-questions-series-part-2/在Java面试问题系列:第1部分中,我们讨论了面试官通常问的一些重要......
  • HowToDoInJava-其它教程-1-一-
    HowToDoInJava其它教程1(一)原文:HowToDoInJava协议:CCBY-NC-SA4.0Maven本地仓库位置以及如何更改?原文:https://howtodoinjava.com/maven/change-local-repository-location/在本教程中,学习更改Maven本地仓库的位置。Maven是构建和依赖项管理工具。它将所需的项目......
  • ZetCode-Java-教程-二-
    ZetCodeJava教程(二)原文:ZetCode协议:CCBY-NC-SA4.0Java语法结构原文:http://zetcode.com/lang/java/lexis/像人类语言一样,计算机语言也具有词汇结构。Java程序的源代码由令牌组成。令牌是原子代码元素。在Java中,我们具有注释,标识符,字面值,运算符,分隔符和关键字。Ja......
  • 计算机毕业设计项目推荐:大学生实习成绩评价系统的设计与实现38147(开题答辩+程序定制+
    摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对大学生实习成绩......