Java语言的3大特性?
封装
属性用来描述事物的特征,方法用来描述事物的行为,封装就是把一个对象的属性和方法封装到一个模块中,方便使用,隐藏信息,实现细节。
继承
子类继承父类的特征和行为,实现代码的复用,但是提高了代码的耦合度。
多态
多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定(比如:向上转型,只有运行才能确定其对象属性)。方法覆盖和重载体现了多态性。
Java语言的特征?
面向对象、简单易学、平台无关、解释执行、高性能、多线程、安全性。
JDK和JRE的区别?
JDK: Java开发工具包,提供了Java开发环境和运行环境。
JRE: Java运行环境,为Java提供了所需的运行环境。
具体来说,JDK包含了JRE,还包含了编译Java源码的Java编译器Javac,以及很多Java程序调试和分析的工具。如果只需要运行Java程序,只需要安装JRE就可以了,如果还需要编写程序则需要安装JDK。
Java基本数据类型?
基本类型 | 大小(字节) | 默认值 |
---|---|---|
byte | 1 | (byte)0 |
char | 2 | \u0000(null) |
short | 2 | (short)0 |
int | 4 | 0 |
long | 8 | 0L |
float | 4 | 0.0f |
double | 8 | 0.0d |
boolean | 1或4 | false |
Object有哪些方法?
toString: 转为字符串。
equals: 默认是==,比较对象地址,子类一般会重写。
hashCode: 用于哈希查找。
clone: 用于对象复制。
getClass: 获取运行时Class对象。
wait: 让当前线程进入等待状态,同时释放持有的锁。
notify: 唤醒在该对象上等待的某个线程。
notifyAll: 唤醒在该对象上等待的所有线程。
Java作用域的访问范围?
作用域 | 同类 | 同包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
final、finally、finalize的区别?
final: final即是修饰符也是关键字,被final修饰的类无法被继承,
被final修饰的方法无法被重写,被final修饰的变量第一次初始化之后无法修改。
finally: finally是一个关键字,用于异常处理,无论有没有异常,finally都会执行,通常用于资源释放。如果try块没有执行或者系统退出(System.exit(0))时不会执行。finally块由return语句时,会覆盖try或者catch块的语句,所以建议不要在finally块中存在return语句。
finalize: finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。
==和equals的区别?
==:基本数据类型比较的是数值,引用数据类型比较的是内存地址。
equals: 有两种使用情况,子类没有覆盖equals方法时,通过==即比较的是对象的地址。覆盖了 equals() 方法。一般都会覆盖 equals() 方法来两个对象的内容相等;
重写equals的同时,我们需要重写hashCode()方法么?
需要,为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是在集合中的使用;
浅拷贝和深拷贝的区别是什么?
浅拷贝只是增加了一个指针指向已经存在的内存,而深拷贝就是增加一个指针并且申请一个新的内存,使这个增加的指针指向这个新的内存。
浅拷贝时,如果是基本类型,栈内存会新开辟一个内存,键值均存储在栈中,对于引用类型,键存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值。对于深拷贝,JVM会在堆内存中也开辟一个新的内存。