共计 2208 个字符,预计需要花费 6 分钟才能阅读完成。
1. 值传递和援用传递的区别?
1. 值传递:在办法调用中,实参会把它的值传给形参,形参只是用实参的值初始化一个长期的存储单元,因而形参加实参虽有雷同的值,但却有着不同的存储单元。因而对形参的扭转不会影响实参的值。2. 援用传递:在办法调用中,传递的是对象(地址值),这时形参加实参执行同一块存储单元,因而对形参的扭转会影响实参的值。
2. 什么是不可变类?
当创立了这个类的实例后,就不容许批改它的值了。也就是说一个对象一旦被创立进去,在其整个生命周期中,它的成员变量就不能被批改了。
3.Instanceof 有什么作用
判断一个援用类型的变量所指向的对象是否是一个类的实例。
4.static 关键字有哪些作用?
1. 为特定数据类型或对象调配繁多的贮存空间,而与创建对象的个数无关;2. 实现某个办法或属性与类(而不是对象)关联在一起。static 次要有 4 中应用状况:4.1 润饰成员变量。static 润饰的变量叫动态变量 / 类变量 / 全局变量。随着类的加载而加载到办法区中的动态区,并且在动态区赋予了初始值。动态变量优先于对象加载,通过类名. 来调用;4.2 润饰成员办法。static 润饰的办法叫静态方法,也叫类办法。也是随着类的加载而加载到办法区中的动态区。通过类名. 来调用;4.3 润饰动态代码块。动态代码块在类中是独立于成员变量和成员办法的代码块,它不在任何一个办法体内,jvm 在加载类时会执行动态代码块,动态代码块优先于结构代码块执行,在类加载时执行,且只执行一次;4.4 动态外部类。动态外部类能够不依赖于外部类实例对象而被实例化,通常的外部类须要在外部类实例化后能力实例化。动态外部类不能与外部类有雷同的名字,不能拜访外部类的一般资源,只能拜访外部类的动态资源。因为动态只能调用动态的。
5. 双亲委派机制
双亲委派机制的工作原理是:如果一个类加载器收到了类加载申请,它并不会本人先去加载,而是把这个申请委托给父类的加载器去执行,如果父类加载器还存在其余父类加载器,则进一步向上委托,顺次递归,申请最终达到顶层的类加载器。如果父类的加载器能够实现加载工作,就胜利返回,假使父类加载器无奈实现此加载工作,子类加载器才会尝试本人去加载。
6. 谈谈 jvm 的内存构造和内存调配
java 虚拟机将其管辖的内存大抵分为 3 个逻辑局部:办法区、栈和堆
6.1 办法区是动态调配的,编译器将变量绑定在某个存储地位上,而这些绑定不会在运行时扭转。常数池,String 常量和 static 变量保留在办法区;6.2 栈:是一个逻辑概念。特点是先进后出,后进先出,就行子弹匣。一个栈的空间能够是间断的也能够是不间断的。最典型的利用就是办法调用,java 虚拟机没调用一次办法就创立一个办法帧(frame),退出该办法时则对应的办法帧被弹出。栈中存储的数据是运行时确定的。6.3 堆调配意味着以随便的程序,在运行时进行贮存空间调配和回收的内存治理模型。堆中贮存的数据往往是大小、数量和生命周期在编译时无奈确定的。java 对象的内存总是在堆中调配
java 内存调配:1. 根本数据类型间接在栈空间调配;2. 办法的形参间接在栈空间中调配,当办法调用实现后从栈空间回收;3. 援用类型,须要用 new 来创立,在栈中调配一个地址空间,在堆中调配对象的类变量;4. 办法的援用参数,在栈中调配一个地址空间,并指向堆空间的对象区,当办法调用完后从栈空间回收;5. 局部变量 new 进去时,在栈和堆中调配空间,局部变量生命周期完结后,栈空间立刻被回收,堆空间区域期待 GC 回收;6. 数组在栈空间调配数组名称,在堆空间调配数组的理论大小。
7. 如何通过反射创建对象
1. 通过类对象调用 newInstance() 办法,例如 String.class.newInstance()
2. 通过类对象的 getConstructor() 或 getDeclaredConstructor() 办法取得结构器对象并调用其 newInstance() 办法创建对象。
8.java 如何实现序列化,有何意义
8.1 序列化是一种用来解决对象流的机制。对象流就是将对象的内容进行流化。能够对流化后的对象进行读写操作,也能够将流化后的对象传输于网络之间。8.2 要实现序列化,须要让类实现 Serializable 接口,该接口是一个标识性接口,标注该类对象是能够序列化的。而后用一个输入流来结构一个对象输入流并通过 writeObject() 办法就能够实现对象的写出;如果须要反序列化,就用一个输出流来建设一个对象输出流,而后通过 readObject 办法从流中读取对象。8.3 序列化解决了对象流读写操作时引发的乱序问题。序列化除了实现对象的长久化之外,还可能用于对象的深度克隆。
9 请说出与线程同步以及线程调度相干的办法
wait():使一个线程处于期待(阻塞)状态,并开释所持有的对象的锁;sleep():使一个正在运行的线程处于休眠状态,是一个静态方法,调用此办法要解决 InterruptedException 异样;notify():唤醒一个处于期待状态的线程,在调用此办法时,并不能确切的唤醒某一个期待状态的线程,而是有 JVM 确定唤醒那个线程,而且与优先级无关;notityAll():唤醒所用处于期待状态的线程,调用该办法并不是将对象的锁给所用线程,而是让他们竞争,只有取得锁的线程能力进入就绪状态。线程的 5 个状态:新建状态 - 可运行状态 - 运行状态 - 阻塞状态 - 终止状态
正文完