Day2 java面试12-30小题

12.数组中有没有length()方法?String有没有length()方法?
答:数组没有length()方法,有length属性。String有length()方法。(集合求长度用size()方法)
import java.util.ArrayList;
import java.util.List;

public class Length_Size {
public static void main(String[] args) {
String[] strings = {"aaa","bbb","ccc"};
String string = "aaabbbccc";
List<integer> list = new ArrayList<integer>();
list.add(1);</integer></integer>

    System.out.println("String[].length="+strings.length);
    System.out.println("String.length()="+string.length());
    System.out.println("List.size()="+list.size());    
}

}

13.在java中,如何跳出当前的多重嵌套循环?
答:在最外层循环前加一个标记如A,然后用break A;可以跳出多重循环。
参考网址:https://blog.csdn.net/singit/article/details/47708797

14.构造器(constructor)是否可以被重写(override)?
答:构造器不能被继承,因此不能被重写,但可以被重载。
(参考网址:https://blog.csdn.net/qsbbl/article/details/91345179)

15.两个对象值相同(x.equals(y) == true),但却有不同的hash code,这句话对不对?
答:不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同;(2)如果两个对象的hashCode相同,它们并不一定相同。(https://www.cnblogs.com/zhangkai0106/p/4997351.html)

16.是否可以继承String类?
答:String类是final类,不可以被继承。
补充:继承String本身就是一个错误的行为,对String类型最好的重用方式是关联关系(Has-A)和以来关系(User-A)而不是继承关系(Is-A)。

17.当一个对象被当作参数传递到一个方法后,此方法可以改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
答:是值传递。java语言的方法调用只支持参数的值传递。(1)java中没有指针,所以也没有引用传递。
(参考网址:https://yq.aliyun.com/articles/607572)
18.String和StringBuilder、StringBuffer的区别?
答:java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,他们可以存储和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StrignBuilder类表示的字符串对象可以直接进行修改。
速度(StringBuilder>StringBuffer StringBuffer线程安全,StringBuilder线程不安全)
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。

19.重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?
答:(1)方法的重载和重写都是实现多态的方式,区别在于重载是编译时多态,重写是运行时多态。
(2)重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同,参数个数不同,参数类型和参数个数都不同)则视为重载;重写发生在子类和父类之间,重写要求子类被重写方法与父类被重写方法有相同的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常(里氏替换原则)。重载对返回类型没有特殊的要求。
参考网址(https://blog.csdn.net/qq_41835956/article/details/82492623)

20.描述一下jvm加载class文件的原理机制?(先做了解)
答:JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。
由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。
类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。从Java 2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明:
Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);
Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;
System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。
(参考网址:https://www.cnblogs.com/Qian123/p/5707562.html)

21.char型变量中能不能存储一个中文汉字,为什么?
答:char类型可以存储一个中文汉字,因为java中使用的编码是Unicode编码,一个char占2个字节(16位),所以放一个中文是没有问题的。
https://blog.csdn.net/u012110719/article/details/46317029

22.抽象类(abstract class)和接口(interface)有什么异同?
答:
相同点:抽象类和接口都不能直接实例化,如果要实例化,只能通过子类进行实例化。
不同点:
a.抽象类可以有构造方法,接口中不能有构造方法。
b.抽象类中可以有普通成员变量,接口中没有普通成员变量,只有公共的静态变量。
c.抽象类中可以包含非抽象普通方法,接口中的所有方法必须是抽象的,不能有非抽象方法。
d.抽象类中的访问权限可以是public、protected和default,接口中的抽象方法只能是public 类型的,并且默认即为public abstract类型。
e.接口可以继承接口,并可以实现多个接口,但抽象类只能单根继承。
f.抽象类是重构的结果,接口是设计的结果。
https://baijiahao.baidu.com/s?id=1619705880454658260&wfr=spider&for=pc

23.Java中会存在内存泄漏吗,请简单描述。
答:理论上java因为有垃圾回收机制(GC)不会存在内存泄漏问题;然而在实际开发中,可能会存在无用但可达的对象,这些对象不能被GC回收,因此也会导致内存泄漏的发生。

24.描述静态变量和实例变量的区别。
答:静态变量属于类的级别,而实例变量属于对象的级别。
主要区别有两点:
(1)存放位置不同
静态变量随着类的加载存在于方法区中,实例变量随着对象的建立存在于堆内存中。
(2)生命周期不同
类变量的生命周期最长,随着类的加载而加载,随着类的消失而消失;
实例变量随着对象的消失而消失。

25.GC是什么?为什么要有GC?
答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语言没有提供释放已分配内存的显示操作方法。

26.String s = new String(“xyz”);创建了几个字符串对象?
答:两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

27.接口是否可以继承(extends)接口?抽象类是否可以实现(implements)接口?抽象类是否可以继承具体类(concrete class)?
答:接口可以继承接口,而且支持多重继承。抽象类可以实现(implements)接口,抽象类可继承具体类也可以继承抽象类。

28.java中的final关键字有哪些用法?
答: (1)修饰类:表示该类不能被继承;
(2)修饰方法:表示方法不能被重写;
(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)

29.Error和Exception有什么区别?
答:
Error表示系统级的错误和程序不必处理的异常,是恢复很困难的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况;
Exception 表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

30.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后?
答:会执行,在方法返回调用者前执行。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务