Java
什么是面向对象
面向过程注意函数内部细节的细节,每一步的步骤和顺序、每一步逻辑是具体怎么实现的。
面向对象是一种相对于面向过程,更注重参与者(对象),各自需要做什么 的设计方式。特点是封装,继承和多态。
面向过程更加直接高效,面向对象更加易于维护,复用和拓展。
封装的特点:内部细节对外部调用隐身,外部调用不需要关心内部逻辑怎么实现的。
比如JavaBean的属性私有,提供get set方法对外访问。属性的获取和修改只能由JavaBean本身决定,不能由外部修改
再比如ORM框架,操作数据库,我们不需要关心sql是如何执行的,只需要引入Mybatits,调用方法既可、
,不需要知道框架具体做了什么。
继承的特点: 继承父类的方法和属性,做出自己的改变或拓展,不需要再定义父类的方法或属性。一个类只能直接继承一个父类。
多态的特点:父类引用指向子类对象,外部对同一个方法的调用,基于对象所属类的不同,实际执行的逻辑也不同。多态定义一个对象时,使用变量名.方法名()调用子类的方法(即调用等号右边真实类型,new什么就是什么类的方法),无法调用子类特有方法。成员变量不具备多态性,系统总是试图访问子类编译类型定义的成员变量(即等号左边)。
内部类是什么?
内部类是Java中类的一种定义方式,内部类有四种:分别是成员内部类,静态内部类,匿名内部类和局部内部类
多线程是什么?
多线程是指在同一程序中有多个顺序流在执行
多线程的三种创建方式
继承Thread并且重写run方法,实现Runnable接口,实现Callable接口
Thread1 a=new Thread1();
a.start();
MyRunnable myRunnabble=new MyRunnable();
Thread a=new Thread(myRunnabble);
a.start();
MyCallable 实现callble接口,创建FutureTask,参数放入mycallable,futuretask有俩方法isdone()和get();
前者不会阻塞,用来判断是否结束;后者会阻塞 ,获得返回结果
Callable接口支持返回执行结果,此时需要调用FutureTask.get()方法实现,此方法会阻塞主线程直到获取‘将来’结果;当不调用此方法时,主线程不会阻塞
说说==和queals的区别
==:
比较的是变量(栈)内存中存放对象的(堆)内存地址,用来判断两个对象地址是否相同,即是否是同一个对象
equals:
Object类中默认使用 ==,可以重写。
String类中被重写为 比较两个对象中字符串的内容是否相等
HashCode作用:
hashCode()作用是获取哈希码,也称散列码,(字符串key通过一个函数(可能是补码集)变成数字累加跟数组size取余)根据对象的内存地址返回一个Int整数。作用是确定该对象在hash表中的索引位置。
HashSet如何检查重复来说明HashCode作用
Java的集合有两类,一类是List,还有一类是Set。前者有序可重复(可以放任意Null),后者无序不可重复(一个Null),前者可以get,itertor,后者不可,只能itertor.
以上是附加分:
当一个对象加入HashSet时,会调用这个对象的Hashcode()得到一个值,通过这个值找到一个物理地址,这个物理地址上如果有其他元素,则进行equals比对,相同就不存了,不同就散列到其他地址,如果没有,直接存储在这个物理地址位置上。
List和Set区别
前者有序可重复(可以放任意Null),后者无序不可重复(一个Null),前者可以get,itertor,后者不可,只能itertor.
什么是散列表
根据key值进行直接访问的数据结构,由数组和链表组成。
instanceof关键字作用
用来检测一个对象是否是一个类的实例,用法为:
boolean result=obj instanceof Class
obj为一个对象,Class为一个类
什么是字节码
我们编写的.java文件,经过编译后,生成.class字节码文件,虚拟机将字节码解释执行。好处是字节码具有与平台无关性,字节码不针对某种机器而针对虚