1.什么是面对对象?
面向对象编程是使用类,对象,继承性、多态性、封装性和抽象的一种程序设计方法。
注意“基于对象”和“面向对象”的区别
1.基于对象,通常是指的是对数据的封装,以及提供一组方法对封装过的数据操作。
2.面向对象,则是基于对象的基础上增加了多态性。所谓的多态,就是可以用统一的方法对不同的对象进行同样操作。
2.什么是多态?
多态即事物在运行过程中存在不同的状态。多态可以分为编译时多态和运行时多态,编译多态是指方法重载,运行多态是指方法重写
对于运行多态需要满足以下三点:
1.要有继承关系
2.子类重写父类方法
3.父对象的引用指向子类对象
多态实现的机制
其实就是依靠静态分配和动态分配
动态分配是指在运行期间才能确定变量的实际类型,典型的就是方法重写。只有在运行期间。根据实例化子类的不同,调用不同子类中重写的方法。
静态分配是指在编译时期就能完全确定,在类加载的解析阶段就会把涉及的符号转化为可确定的直接引用,不会延迟到运行期再去完成,典型的例子就是方法重载。
3.接口与抽象类的区别?
抽象类是一个包含具体方法和抽象方法的(方法未被实现)的类,抽象方法必须被该抽象类的子类实现。抽象类是可以继承的。
接口是描述类的一站蓝图或者说是类的一种契约,他包含了许多空方法,这代表着它的所有子类都应该拥有共同点。他的子类应该提供这些方法的具体实现。一个类需要用implement来实现接口,接口可以用extends集成其它接口。
4.int与integer的区别
a.Integer和new Integer()两者不会相等,因为他们在做比较的时候,不会经历拆箱过程,前者是指向栈(例如Integer =7),后者指向堆(例如Integer number=new Intager(7)),他们的内存地址不一样,所以不会相等。
b.如果两个都是new出来的则不相等,为false。
c.两个都是非new出来的Integer,如果数在-128-127之间,则为true,否则为false,java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);JDK本身会对-128到127之间的数进行缓存
d.int和Integer(无论new与否),Integer都会自动拆箱成Int再去比较,因此为true。
相关地址链接:https://blog.csdn.net/why15732625998/article/details/79437930
5.父类的静态方法能否被子类重写?
严格来说不存在静态方法重写,当一个子类继承父类,写同样的方法,只会将父类的静态方法隐藏。
6.静态属性和静态方法是否可以被继承,是否可以重写,为什么?
可以被继承,但不能重写。静态方法和属性是属于类的,调用的时候直接通过类名.方法名完成的,不需继承机制就可以调用如果子类里面定义了静态方法和属性,那么这时候父类的静态方法 或属性称之为“隐藏”,你如果想要调用父类的静态方法和属性,直接通过父类名.方法名或变量名完成,至于是否继承一说,子类是有继承静态方法和属性,但是 跟实例方法和属性不太一样,存在“隐藏”的这种情况。
7.==与equals 和HashCode的区别?
1.==该操作符生成的是一个Boolean结果 ,它是应用用于操作数的值之间的问题。例如常见的(int、double、float、byte、char、short、long等);
2.Object对象的实例方法,比较两个对象的content。(如果是实例对象必须重写其equals方法)
8.String为什么设计成不可变的?
1.字符串常量池的需要,字符串常量池的是Java堆内存中一个特殊的区域,当创建一个String对象时,假如此时已经存在于创量池中,则不会再创建一个新的对象,而是引用已经存在的对象。
2.允许String对象缓存HashCode,Java中String对象的哈希码被频繁地使用,比如在HashMap等容器中。字符串不变性保证了hash码的唯一性。
3.安全性 String被许多的Java类用来当做参数,例如 网络链接地址URL,文件路径path,还有反射机制需要的String参数等,假若String不是固定不变的会引起安全隐患。
9. String 转换成 Integer 的方式及原理?
Integer.parseInt(String string)方法调用Integer内部的parseInt(String string)方法默认基数为10,parseInt内部首先判断字符串是否包含符号(-或者+),则相对应的negative和limit进行赋值,然后再循环字符串,对单个的char进行数值计算Character.digit(char ch,int radix),在这个方法中,函数肯定进入到0-9字符的判断,(相对于string转到int),否则会抛出异常,数字就是如上面的拼接然后生成的int类型数值。