
Java基础
面试题库
这个作者很懒,什么都没留下…
展开
-
42.Java命令行工具:javac、java、javap 的如何使用
《Java命令行工具:javac、java、javap 的使用详解》:http://www.mybatis.cn/archives/1035.html转载 2021-07-17 12:14:54 · 114 阅读 · 0 评论 -
41.JDK动态代理和CGLIB动态代理的区别?
JDK动态代理只能对实现了接口的类生成代理,而不能针对类。CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法。因为是继承,所以该类或方法最好不要声明成final。转载 2021-07-03 15:48:39 · 113 阅读 · 0 评论 -
40.静态代理和动态代理的区别?
静态代理中代理类在编译期就已经确定,而动态代理则是JVM运行时动态生成,静态代理的效率相对动态代理来说相对高一些,但是静态代理代码冗余大,一单需要修改接口,代理类和委托类都需要修改。...转载 2021-07-03 15:47:46 · 173 阅读 · 0 评论 -
39.在Java中定义一个不做事且没有参数的构造方法的作用?
1 在Java中定义一个不做事且没有参数的构造方法的作用Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会 调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类 的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为 Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事 且没有参数的构造方法。2 构造方法有哪些特性?名字与类名相同;没有返回值,但不能用void声转载 2021-06-28 14:26:24 · 428 阅读 · 0 评论 -
38.static存在的主要意义?
1 static存在的主要意义static的主要意义是在于创建独立于具体对象的域变量或者方法。 以致于即使没有创建对象, 也能使用属性和调用方法 !static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能 。static块可 以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的 顺序来执行每个static块,并且只会执行一次。为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。因 此,很多时候会将一些转载 2021-06-28 14:26:16 · 672 阅读 · 0 评论 -
37.String, Stringbuffer, StringBuilder 的区别?
一、Java String 类——String字符串常量简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内容的字符串最好不要用 String 。因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始.转载 2021-06-28 14:26:03 · 76 阅读 · 0 评论 -
36.final finally finalize的区别
final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能 被重写、修饰变量表示该变量是一个常量不能被重新赋值。 finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代 码方法finally代码块 中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。 finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一 般由垃圾回收器来调用,当我们调用System.gc() 方法的时候,转载 2021-06-28 14:25:57 · 82 阅读 · 0 评论 -
35.访问修饰符public,private,protected,以及不写(默认)时的区别?
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开 (public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对 子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。Java中,外部类的修饰符 只能是public或默认,类的成员(包括内部类)的修饰符可以是以上四种。...转载 2021-06-28 14:25:49 · 194 阅读 · 0 评论 -
34. throw 和 throws 的区别?
1. 区别throws是用来声明一个方法可能抛出的所有异常信息,而throw则是指抛出的一个具体的异常类型。此外throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。2.分别介绍throws:用于声明异常,例如,如果一个方法里面不想有任何的异常处理,则在没有任何代码进行异常处理的时候,必须对这个方法进行声明有可能产生的所有异常(其实就是,不想自己处理,那就交给别人吧,告诉别人我会出现什么异常,报自己的错,让别人处理去吧)。格式是:方法名(参数)throws 异常类1,异常类2,转载 2021-06-27 18:24:26 · 137 阅读 · 0 评论 -
33.获得一个类的类对象有哪些方式?
第一种方式:通过类本身来获得对象 Class classname = this .getClass(); 第二种方式:通过子类的实例获取父类对象 Sub sub = new Sub(); Class clazz = sub.getClass(); Class parentClass = clazz.getSuperclass();第三种方式:通过类名(类的全路径)加.class获取对象Class ForClass =转载 2021-06-27 18:15:54 · 1881 阅读 · 0 评论 -
32.Java中是如何支持正则表达式操作的?
ava中的String类提供了支持正则表达式操作的方法,包括:matches()、replaceAll()、replaceFirst()、split()。此外,Java中可以用Pattern类表示正则表达式对象,它提供了丰富的API进行各种正则表达式操作,请参考下面面试题的代码。面试题: - 如果要从字符串中截取第一个英文左括号之前的字符串,例如:北京市(朝阳区)(西城区)(海淀区),截取结果为:北京市,那么正则表达式怎么写?import java.util.regex.Matcher;import转载 2021-06-27 18:09:10 · 114 阅读 · 0 评论 -
31.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
答案是:会执行 try{}中的return执行后在没有返回数据时先去执行finally{}中的代码,然后再返回。所以说finally{}在return中间执行。public class MyTest { public int getA(){ int a = 10; try{ a = 10; System.out.println("try a = " + a); return a;转载 2021-06-27 18:06:07 · 379 阅读 · 0 评论 -
30.常见的异常类有哪些?
列举最常见的5个运用时异常。1、Error和Exception的联系和区别:Error类和Exception类是Throwable类的两个直接子类。Error类包括一些严重的程序不能处理的系统错误类,如内存溢出、虚拟机错误、栈溢出等。这类错误一般与硬件有关,与程序本身无关,通常由系统进行处理,程序本身无法捕获和处理。Exception类异常是在程序中发生后可以进行捕获处理,处理后程序正常运行,从而保证程序的稳定性及健壮性。2、常见运行时异常:ArithmeticException、 Array转载 2021-06-27 17:49:44 · 1460 阅读 · 0 评论 -
29.Error和Exception有什么区别?运行时异常与受检异常有何异同?
1 Error类和Exception类的父类都是throwable类,他们的区别是:Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止.Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。Exception类又分为运行时异常(Runtime Exception)和受检查的转载 2021-06-27 17:42:57 · 491 阅读 · 0 评论 -
28.在 jdk1.5 中,引入了泛型,泛型的存在是用来解决什么问题
1. 基本概念1.1 泛型的基本概念泛型是 Java SE 1.5 的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为 泛型类 、泛型接口、泛型方法。 Java 语言 引入泛型的好处是安全简单。在 Java SE 1.5 之前,没有泛型的 情况 的下,通过对类型 Object 的引用来实现参数的 “ 任意化 ” , “ 任意化 ” 带来的缺点是要做显式的 强制类型转换 ,而这种转换是要求开发者对 实际参数 类型可以预知的情况下转载 2021-06-27 17:42:30 · 1198 阅读 · 0 评论 -
27.java类中serialversionuid 作用 是什么?举个例子说明
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastException。具体的序列化过程是这样的:序列化操作的时候系统会把当前类的serialVersionUID写入转载 2021-06-27 17:42:14 · 72 阅读 · 0 评论 -
26.如何实现对象克隆?
对象克隆就是对象的复制操作。分为浅克隆(ShallowClone)和深克隆(DeepClone)在Java语言中,数据类型分为值类型(基本数据类型)和引用类型,值类型包括int、double、byte、boolean、char等简单数据类型,引用类型包括类、接口、数组等复杂类型。浅克隆和深克隆的主要区别在于是否支持引用类型的成员变量的复制,下面将对两者进行详细介绍。一、浅克隆:被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedExc转载 2021-06-27 17:40:53 · 2695 阅读 · 0 评论 -
25.接口和抽象类有什么区别?
很多常见的面试题都会出诸如抽象类和接口有什么区别,什么情况下会使用抽象类和什么情况你会使用接口这样的问题。本文我们将仔细讨论这些话题。在讨论它们之间的不同点之前,我们先看看抽象类、接口各自的特性。1 抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。2 接口接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不转载 2021-06-27 17:40:32 · 65 阅读 · 0 评论 -
24.抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。抽象类的就是要子类继承然后实现内部方法的。但是final修饰的类是不能再被继承和修改的。所以不能用final修饰。...转载 2021-06-26 18:41:29 · 1196 阅读 · 0 评论 -
23.一个“.java“源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。为了理解,自己动手试了一下几个类的关系。1.与public class平行的类public class MyTest { private String name; private Integer age; public MyTest (String name,Integer age) { this.name = name; this.age = age;转载 2021-06-26 18:39:11 · 778 阅读 · 0 评论 -
22.内部类分为哪几种?内部类有哪些优点和使用场景?
Java内部类是Java言语的一个很重要的概念。在阅读源码的时候发现使用了很多的内部类比如HashMap中的Node和ThreeNode。所以这里来整理一下并且总结归纳。先说一下什么是内部类,把类定义在其他类的内部,那么这个类我们就称作内部类。它体现了一种代码的隐藏机制和访问控制机制。内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类,所以没有必要专门用一个Java文件存放这个类。内部类分为四种:静态内部类、成员内部类、局部内部类、匿名内部类。1. 特点1 静态内部类public cla转载 2021-06-26 15:00:12 · 2025 阅读 · 0 评论 -
21.Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口?
回答:匿名内部类在实现时必须借助一个借口或者一个抽象类或者一个普通类来构造,从这过层次上讲匿名内部类是实现了接口或者继承了类,但是不能通过extends或implement关键词来继承类或实现接口。匿名内部类即没有名字的内部类。当我们只需要用某一个类一次时,且该类从意义上需要实现某个类或某个接口,这个特殊的扩展类就以匿名内部类来展现。一般的用途:1、覆盖某个超类的方法,并且该扩展类只在本类内用一次。2、继承抽象类,并实例化其抽象方法,并且该扩展类只在本类内用一次。3、实现接口,实例化其方法,并且该转载 2021-06-26 14:47:00 · 423 阅读 · 0 评论 -
20.静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
public class A { public String name; A(String name){ this.name = name; } public static class B{ public int getAge(){ return 1; } } class C{ public int getAge(){ return 1;转载 2021-06-26 14:42:10 · 176 阅读 · 0 评论 -
19.普通类和抽象类有哪些区别?
抽象类和普通类主要有三点比较大的区别:1.首先应该知道,抽象类是不能被实例化的,就是不能用new调出构造方法创建对象,而普通类则反之!2.抽象类的访问权限限于Public和Protected,因为抽象类的方法是需要继承之后让子类去实现的,如果为Private,则无法被子类继承,子类也无法实现该方法3.如果一个类继承于抽象类,则该子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为abstract类。...转载 2021-06-26 14:22:00 · 924 阅读 · 0 评论 -
18.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java语言的方法调用只支持参数的值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的属性可以在被调用过程中被改变,但对对象引用的改变是不会影响到调用者的。C++和C#中可以通过传引用或传输出参数来改变传入的参数的值。在C#中可以编写如下所示的代码,但是在Java中却做不到。public class Person { private int id; Person(int id){ this.id = id; }转载 2021-06-26 14:17:34 · 192 阅读 · 0 评论 -
17.构造器(constructor)是否可被重写(override)?
1重载和重写的不同1:重载(overload): 1:前提: 所有的重载函数必须在同一个类中 2:特点:函数名相同,参数列表不同,与其他的无关(访问控制符、返回值类型) 3:不同:个数不同 、 顺序不同、 类型不同2:重写(override): 1:前提: 继承 2:特点: 函数名必须相同、参数列表必须相同。 子类的返回值类型要等于或者小于父类的返回值构造器那个叫重载,不叫重写!重写是发生在子类与父类中,方法名、参数列表、返回值、访问修饰符和异常都相同转载 2021-06-26 14:12:03 · 383 阅读 · 0 评论 -
16.String能被继承吗?为什么?
不能,因为string类是被final修饰的类,final修饰过的类不能被继承、final修饰过的变量不能被修改。转载 2021-06-26 13:36:39 · 117 阅读 · 0 评论 -
15.String s = new String(“xyz“);创建了几个字符串对象?
两个对象,要理解这个,就要知道string类的工作原理。下面来慢慢分析一下:public class StringTest { public static void main(String[] args){ String s1="Hello"; String s2="Hello"; String s3=new String("Hello"); System.out.println("s1和s2 引用地址是否相同:"+(s1转载 2021-06-26 13:30:54 · 134 阅读 · 0 评论 -
14.String str=“i“与 String str=new String(“i“)一样吗?
:不一样。因为内存的分配方式不一样。String str="i"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“i”)方式,则会被分到堆内存中。public class Test { public static void main(String[] args) { String x = "mianshi"; String y = "mianshi"; // 字符串直接赋值给变量,该字符串会进入到常量原创 2021-06-21 10:13:28 · 106 阅读 · 0 评论 -
13.final 在 java 中有什么作用?
final作为Java中的关键字可以用于三个地方。用于修饰类、类属性和类方法。特征:凡是引用final关键字的地方皆不可修改!(1)修饰类:表示该类不能被继承;(2)修饰方法:表示方法不能被重写;(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。相信大家都具备基本的常识: 被final修饰的变量是不能够被改变的. 但是这里的"不能够被改变"对于不同的数据类型是有不同的含义的.当final修饰的是一个基本数据类型数据时, 这个数据的值在初始化后将不能被改变; 当final修饰的是一个引原创 2021-06-20 18:41:28 · 91 阅读 · 0 评论 -
12.有没有可能 2 个不相等的对象有相同的 hashcode?
有可能.在产生hash冲突时,两个不相等的对象就会有相同的 hashcode 值。public final class Long extends Number implements Comparable<Long> { public static int hashCode(long value) { return (int)(value ^ (value >>> 32)); } public boolean equals(Ob原创 2021-06-20 18:16:33 · 255 阅读 · 0 评论 -
11.a.hashcode() 有什么用?与 a.equals(b)有什么关系?
1 hashCodehashcode()方法提供了对象的hashCode值,是一个native方法,返回的默认值与System.identityHashCode(obj)一致。public class Object { public native int hashCode();}通常这个值是对象头部的一部分二进制位组成的数字,具有一定的标识对象的意义存在,但绝不定于地址。作用是:用一个数字来标识对象。比如在HashMap、HashSet等类似的集合类中,如果用某个对象本身作为Key,即要基于原创 2021-06-20 18:10:24 · 343 阅读 · 0 评论 -
10.两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对?
不对,如果两个对象 x 和 y 满足 x.equals(y) == true,它们的哈希码(hash code)应当相同。Java 对于 eqauls 方法和 hashCode 方法是这样规定的:(1)如果两个对象相同(equals 方法返回 true),那么它们的hashCode 值一定要相同;(2)如果两个对象的 hashCode 相同,它们并不一定相同。当然,你未必要按照要求去做,但是如果你违背了上述原则就会发现在使用容器时,相同的对象可以出现在 Set 集合中,同时增加新元素的效率会大大原创 2021-06-20 17:51:22 · 632 阅读 · 0 评论 -
9.== 和 equals 的区别是什么?
1 ==是逻辑运算符1.1 == 的基础数据类型比较对于基本数据类型 (byte,short,char,int,long,float,double,boolean)的变量”==”比较的是两个变量的值是否相等。public class Test { public static void main(String[] args) { int a = 1; long b = 1; Integer c = 1; // a 会隐式转换从in原创 2021-06-20 13:32:06 · 159 阅读 · 0 评论 -
8.switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
public class Test { public static void main(String[] args) { int a = 1; switch (a){ case 1: System.out.println(1); break; default: System.out.println("default");原创 2021-06-20 12:25:39 · 573 阅读 · 0 评论 -
7.Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?
public class Test { public static void main(String[] args) { long a = Math.round(11.5); long b = Math.round(-11.5); System.out.println(a); System.out.println(b); }}输出12-11Math.round(11.5)的返回值是12,Math.round(-11原创 2021-06-20 12:12:20 · 100 阅读 · 0 评论 -
6.&与&&的区别?
&与&&都有逻辑与的意思,但&属于“非短路”运算符,&&属于“短路”运算符。1 &&短路优先public class Test { public static void main(String[] args) { int x = 5; int y = 5; if(x > 10 && x++>11){ y +=1; }原创 2021-06-20 11:58:24 · 535 阅读 · 0 评论 -
5.int和Integer有什么区别?
intjava的8个原始数据类型之一,(bool,char,byte,int ,short,long,dubule,float);单独使用不是线程安全的,在并发场景下应该使用AtomicX系列原子对象替代。Intergerint对应的包装类,内部使用的原始类型存储数值,提供了一些数学操作和字符串转换的操作。自动装箱利用的它的Integer.valueOf(int) 方法;自动拆箱利用的它的Integer.intValue()方法;参考文档《Java基础之int和Integer有什么区别》:h原创 2021-06-20 11:39:45 · 121 阅读 · 0 评论 -
4.char 型变量中能不能存贮一个中文汉字,为什么?
能存储。char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。补充说明:unicode编码占用两个字节,所以,char类型的变量也是占用两个字节。...原创 2021-06-20 11:32:17 · 362 阅读 · 0 评论 -
3.short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
short s1 = 1; s1 = s1 + 1;short s1 = 1; s1 += 1;short s1=1,s2=1;short s3=s1+s2;参考文章《java中整数的默认为int类型的一些问题》:https://blog.youkuaiyun.com/youngyouth/article/details/79854483《short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?【Java面试题】》:https://blog.csd原创 2021-06-19 21:12:27 · 106 阅读 · 0 评论