Java 和 C++的区别?
都是面向对象的语言,支持封装、继承、多态
java不提供指针来直接访问内存,程序内存更安全
java类是单继承,c++是多继承,java接口是多继承
Java 有自动内存管理机制,不需要程序员手动释放无用内存
重载和重写的区别?
重载是同一个类下,同一个方法名,不同的参数,不同的响应结果

重写是发生在父类与子类,子类继承父类的方法,相同的参数,不同的响应结果

构造器 Constructor 是否可被 override?
父类的构造方法和私有属性成员是无法被继承的,所以无法重写
,但是构造方法可以重载,所以一个类一般有一个以上的构造方法
谈谈 Java 面向对象编程三大特性: 封装 继承 多态
封装是指把一个类的成员变量私有化,使外界无法访问
继承是指子类复用父类的可访问的成员变量及方法,子类可以拥有自己的成员变量实现功能扩展
多态是指程序中定义的引用变量所指向的具体类型和 通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。向上转型,子类转父类。
String StringBuffer 和 StringBuilder 的区别是什么?String 为什么是不可变的?
String类底层是一个字符数组,用final修饰,不可改变
StringBuffer和StringBuilder的底层也是一个字符数组,不过没用char修饰,StringBuffer是的几个对元素操作的方法都是线程安装的
StringBuffer适用于多线程操作大量数据
StringBuilder适用单线程操作大量数据
接口和抽象类的区别
接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。
一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字扩展多个接口。
接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。
从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。
== 与 equals(重要)
== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型比较的是值,引用数据类型比较的是内存地址)。
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:
情况 1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
情况 2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来两个对象的内容相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)String类。
hashCode 与 equals (重要)
hashCode主要是为了获取对象的散列码,以hashset为例子,hashcode主要是计算新加入的对象的散列码,和其他的已存在的对象散列码进行对比,如果对比成功后,则会调用equals方法比较两个对象是否相等,如果相等则加入失败,如果不相等则可以加入成功
什么是反射机制?反射机制的应用场景有哪些?
反射机制是指在程序运行过程中动态获取一个类的属性和方法
反射机制优缺点:
优点:运行时动态加载类,提高代码的灵活性
缺点:性能瓶颈:反射相当于一系列解释操作,通知 JVM 要做的事情,性能比直接的 java 代码要慢很多。
反射是框架设计的灵魂。
在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明反射机制没有用,实际上有很多设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态代理设计模式也采用了反射机制,还有我们日常使用的 Spring/Hibernate 等框架也大量使用到了反射机制。
举例:① 我们在使用 JDBC 连接数据库时使用 Class.forName()通过反射加载数据库的驱动程序;②Spring 框架也用到很多反射机制,最经典的就是 xml 的配置模式。Spring 通过 XML 配置模式装载 Bean 的过程:1) 将程序内所有 XML 或 Properties 配置文件加载入内存中;
2)Java 类里面解析 xml 或 properties 里面的内容,得到对应实体类的字节码字符串以及相关的属性信息; 3)使用反射机制,根据这个字符串获得某个类的 Class 实例; 4)动态配置实例的属性
反射实现:类名.class 、getclass()方法,classfrom加路径

7666

被折叠的 条评论
为什么被折叠?



