1 什么是字节码?采用字节码的大好处是什么
java是先编译再解释的语言,而不是边编译变解释,程序运行中需要先进行 源代码的编译,编译成字节码 .class文件 ,即只有虚拟机可识别的文件,然后在虚拟机jvm上根据不同环境进行解释 然后再运行 字节码 的好处是 效率提升+java程序无序重新编译,可跨平台运行
Java源代码‐‐‐‐>编译器‐‐‐‐>jvm可执行的Java字节码(即虚拟指令)‐‐‐‐>jvm‐‐‐‐>jvm中 解释器‐‐‐‐‐>机器可执行的二进制机器码‐‐‐‐>程序运行。
2 面向对象三大特性
-
封装 : 封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法
-
继承 : 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新 的数据或新的功能,也可以用父类的功能。
-
多态 : 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出 的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到 底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的 方法,必须在由程序运行期间才能决定。
在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接口 (实现接口并覆盖接口中同一方法)。
要实现多态需要做两件事:
-
方法重写(子类继承父类并重写父类中已有的或抽象的方法);
-
对象造型(用父类型引用子类型对象,这样同样的引用调用同样的方法就会根据 子类对象的不同而表现出不同的行为)。
3 重载和重写
方法重载(overload)实现的是编译时的多态性(也称为前绑定),而方法重 写(override)实现的是运行时的多态性(也称为后绑定)。
重载:发生在同一个类中,方法名相同参数列表不同(参数类型不同、个数不 同、顺序不同),与方法返回值和访问修饰符无关,即重载的方法不能根据返回类型进行区分
重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类(里氏代换原则)
4 面向对象五大基本原则是什么
-
单一职责原则SRP(Single Responsibility Principle)类的功能要单一
-
开放封闭原则OCP(Open-Close Principle)
一个模块对于拓展是开放的,对于修改是封闭的 -
里式替换原则LSP(the Liskov Substitution Principle LSP)子类可以替换父类出现在父类能够出现的任何地方。
-
依赖倒置原则DIP(the Dependency Inversion Principle DIP)高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
-
接口分离原则ISP(the Interface Segregation Principle ISP)
根据不同需求提供不同的接口5 ==和equals
== 和equals 其实是一样的 都是比的栈中的地址(引用地址),但是equals 是可被重写的,很多,比如string 就是重写了equals 而比较的不是引用地址了
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
6 垃圾回收机制与其他语言的不同
java 消除了程序员回收无用空间的职责,可以自动的进行垃圾回收 ,有一个垃圾收集器,程序员无法精准回收和干预。减少了因为内存没有释放的内存泄漏的情况
7