1.面向对象的特征   2.JDK和JRE的区别   3.Java的特点   4.Java和C++的区别   5.Java的基本数据类型有哪些   6.什么是值传递,什么是引用传递   7.自动装箱和拆箱   8.String为什么是不可变的   9.String,StringBuilder和StringBuffer的区别   10.Object常用方法有哪些   11.两个对象的hashCode()相同,则equals()是否也一定为true   12.java创建对象的方式   13.equels和==的区别   14.接口和抽象类的区别   15.方法重载和重写的区别   16.final类的细节   17.反射   18.jdk1.8有哪些新特征           1.面向对象的特征                封装:将类的信息封装在类的内部,不允许外部直接访问,而是通过该类的方法实现对隐藏信息的操作和访问                   继承:从已有的类派生出新的类,新的类继承父类的属性和行为,并能扩展出新的能力,大大的增加了程序的重用性和易维护性                   多态:同一个行为具有不同表现形式的能力。实现多态的三要素:继承,重写,父类引用指向子类对象              2.JDK和JRE的区别                JDK:java开发工具包。包含了java的运行环境和java工具                   JRE:java运行时环境。包含了jvm标准和java核心类库              3.Java的特点                面向对象                   平***立性和移植性。一处编写到处运行,JVM                   稳健性。强语言类型和异常处理              4.Java和C++的区别                Java是纯粹的面向对象语言,所有的对象都继承于java.lang.Object,C++兼容C,既支持面向对象也支持面向过程                   C++有指针,Java的引用相当于安全指针                   Java自动回收垃圾,C++需要手动                   Java通过虚拟机从而实现跨平台,C++依赖于特定的平台                   java不支持多继承,需要实现多个接口来达到目的。C++支持多继承              5.Java的基本数据类型有哪些       byte 1字节       char 2字节       short 2字节       int 4字节       lang 8字节       float 4字节       double 8字节       boolean 1字节       6.什么是值传递,什么是引用传递                值传递:对于基本数据类型。传递的是变量的副本,改变不会影响原值                   引用传递:对于对象型变量。会进行复制,但复制后的引用变量还是指向内存的同一个对象,函数对其修改会影响到原值              注:引用类型的String的值是放在常量池中,我们改变副本不会影响原来的值       7.自动装箱和拆箱                装箱:将基础类型转换成包装类型                   拆箱:将包装类型转换成基础类型              8.String为什么是不可变的       因为String类是final修饰的,而且它的成员变量也全是final修饰的       为什么要使用final修饰?                线程安全:同一个字符串实例可以被多个线程共享,因为字符串不可变,本身就是安全的                   hash不变:不可变的特性也使得hash值不会改变,不需要重新计算                   字符串常量池优化:String对象创建之后,会缓存到字符串常量池,下次需要创建同样的对象,直接返回缓存即可              9.String,StringBuilder和StringBuffer的区别       线程安全:String和StringBuffer是线程安全的,String被final修饰,StringBuffer添加了synchronized       可变:String不可变,StringBuilder和StringBuffer可变       10.Object常用方法有哪些                toString():默认输出地址对象                   equals():默认比较两个引用变量是否指向同一个对象                   hashCode():将与对象相关的信息映射成一个哈希值,默认的实现hashCode值是跟据内存地址换算出来                   clone():java赋值是复制对象引用,如果我们想要得到一个对象的副本,使用赋值操作是无法达到目的的                   getClass():返回此Object的运行时类,常用于java反射机制                   wait():当前线程调用对象的wait()方法之后,当前线程会释放对象锁,进入等待状态。                   notify():唤醒等待的线程              11.两个对象的hashCode()相同,则equals()是否也一定为true       两个对象的hashCode()相同,equlas()不一定为true。       hashCode()方法主要是用来提升对象比较效率的,我们先进行hashCode的比较,如果不相同,那么就不必要进行equals的比较,这样就大大减少了equals比较的次数       对于重写的问题:之所以重写equals()要重写hashcode(),是为了保证equals()方法返回true的情况下hashcode值也要一致,如果重写了equals()没有重写hashcode(),就会出现两个对象相等但hashcode()不相等的情况。这样,当用其中的一个对象作为键保存到hashMap、hashTable或hashSet中,再以另一个对象作为键值去查找他们的时候,则会查找不到。       12.java创建对象的方式                new                   反射                   反序列化                   第三方库                   克隆              13.equels和==的区别       ==比较的是原生类型,equlas重写前用于检查对象的相等性,重写后一般比较值。       对于基本数据类型:只有==       对于引用类型:==比较的是对象在堆内存中的地址值是否相等       对于字符串:==比较的是内存地址,equals比较的是值       14.接口和抽象类的区别       抽象类:       JDK1.8以前:抽象类的方法默认访问权限为protected       JDK1.8时:变成default       不能被实例化,但可以在类的实体定义成员变量,构造方法       接口:       JDK1.8以前:接口的方法必须是public       JDK1.8时:变成default或public       JDK1.9时:变成private       除了static,final不能有其他变量       区别:                抽象类是被子类继承,接口是被类实现                   抽象类能做方法实现,接口不能                   抽象类允许定义普通变量,接口只能定义静态常量                   接口主要用于对类的行为进行约束,实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系              15.方法重载和重写的区别                方法重载:同个类中的多个方法可以有相同的方法名称,但有不同的参数列表(参数类型,参数个数,参数顺序有一个不同就是参数列表不同)                   方法重写:描述的是父类和子类的之间的。当父类的功能无法满足子类的需求时,子类可以重写父类的方法              16.final类       final类可以修饰                类:这个类不能被继承                   方法:不能修改它的含义                   基础数据类型:变成了常量                   引用类型:初始化后不能指向其他对象,但内容可以变化              final修饰的静态常量,在编译的时候就可以确定的值,类不需要被加载。       final 修饰的是静态变量的对象,在运行时才能确定它的值,需要加载类。       17.反射       反射机制的作用:                在运行时判断任意一个对象所属的类                   在运行时构造一个类的对象                   在运行时判断任意一个类所具有的成员变量和方法                   在运行时调用任意一个对象的方法,生产动态代理              与反射相关的类:                Class:表示类,用于获取类的相关信息                   Field:表示成员变量,用于获取实例变量和静态变量                   Method:表示方法,用于获取类中的方法参数和方法类型                   Constructor:表示构造器,用于获取构造器的相关参数和类型              18.jdk1.8有哪些新特征       1)lambda表达式       允许把函数作为一个方法的参数       用法示例:   //对集合进行排序 //jdk1.7 List<Integer> list = Arrays.asList(10,5,25,-15,20); Collections.sort(list, new Comparator<Integer>() {    public int compare(Integer o1, Integer o2)         {    return o1 - o2; } }); //jdk1.8 list.sort((i1, i2) -> {return i1 - i2;});     2)Stream       把真正的函数式编程风格引入到java中。这种风格将要处理的元素集合看成一种流,流在管道中传输,并且可以在管道的节点上进行处理,比如排序,筛选       Stream操作的三个步骤:                创建Stream:一个数据源,获取一个流                   中间操作:一个操作链,对数据源的数据进行处理                   终止操作:执行操作链并产生结果                                            
点赞 6
评论 1
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务