面试题java干货首页投稿(暂停使用,暂停投稿)

Java面试相关---知识点精简(一)

2016-08-04  本文已影响658人  清枫_小天

JDK基础

JDK,JRE,JVM的作用及关系(掌握)

java常识

关键字

标识符

数据类型

基本数据类型

    A:整数            占用字节数
        byte            1
        short            2
        int             4
        long            8
    B:浮点数
        float            4
        double            8
    C:字符
        char            2
    D:布尔
        boolean            1

注意:
整数默认是int类型,浮点数默认是double。
长整数要加L或者l。
单精度的浮点数要加F或者f。

数据转换

默认转换

    A:从小到大
    B:byte,short,char -- int -- long -- float -- double
    C:byte,short,char之间不相互转换,直接转成int类型参与运算。、

请自己实现两个整数变量的交换,不用第三个变量

用位异或实现
因为:aba=b.一个数异或两次等于同一个数
int a=10,int b=10;
a=a^b;
b=a^b;
a=a^b;

用变量相加的做法
a=a+b;
b=a-b;
a=a-b;

一句话搞定
b=(a+b)-(a=b)

请用最有效率的方式计算出2乘以8的结果

2<<3

代码块

面向对象

继承

高内聚低耦合,类里面单独实现方法,类与类之间减少关联就是低耦合

虽然子类中构造方法默认有一个super()
初始化的时候,不是按照那个顺序进行的。
而是按照分层初始化进行的。
它仅仅表示要先初始化父类数据,再初始化子类数据。

多态

多态中的成员访问特点

为什么?
因为成员方法有重写。

接口

接口的成员特点:

内部类

成员内部类常见修饰符号

成员内部类不是静态的:

外部类名.内部类名 对象名 = new 外部类名.new 内部类名();

成员内部类是静态的:

外部类名.内部类名 对象名 = new 外部类名.内部类名();

局部内部类

面试题:

局部内部类访问局部变量必须使用final修饰为什么呢?
局部变量是随着方法的调用而调用,随着调用完毕而消失。而堆内存的内容并不会立即消失,所以我们加final修饰,加入final修饰后,变量就变成了常量,既然是常量,你消失了,我在内存中存储的是数据数值,还是有数据可以使用。

匿名内部类

本质:是一个继承了该类或者实现了该接口的子类匿名对象
在Android开发中用的多,因为匿名内部类用完就是垃圾等待回收。不过它只能用一次。

API

Object

面试题

==和equals()的区别?

Scanner

Scanner scan=new Scanner(System.in);
通过这个对象先获取一个数值,在获取一个字符串,会出现问题
如下:

int i=scan.nextInt();
String s=scan.nextLine();

主要原因是:是换行符的问题。/r/n
如何解决

  1. 重新获取一个键盘录入对象
  2. 把所有类型转换成字符串类型,在转换回来。

String类(最常见的没有之一)

字符串的特点

compareTo()字符串比较

public int compareTo(String anotherString)。按字典顺序比较,可以看源码看返回结果是什么。

String s=new String("Hello")和String s="Hello";的区别

StringBuffer

线程安全---同步(有人操作时其他不能操作)--数据安全

StringBuffer和String的区别

前者长度可变,后者不可变
如果前者用字符串拼接,不会浪费太多的空间
他们都可以通过互相的构造方法转换成相互的对象,

StringBuffer.toString()也可转换成字符串.任何一个引用类型都可以通过toString转成String对象。

StringBuffer和StringBuilder

StringBuilder是线程不安全,效率高

StringBuffer和数组的区别

二者都可以看成一个容器,装其他数据。但是stringBufer的数据最终是一个字符串数据。而数组可以放置多种数据,但必须同一种数据类型。

Arrays

针对数组进行操作的工具类。里面有一系列方法对数组进行操作。

包装类

Integer类:下面两句代码做了哪些事情?
Integer i=1;//自动装箱,相当于Integer.valueOf(1)
i+=1;//自动拆箱在自动装箱

面试题

Integer i1=127;
Integer i2=127;
System.out.println(i1==i2);
Integer i3=128;
Integer i4=128;
System.out.println(i3==i4);
第一个输出语句为true.第二个为false
通过查看valuof这个源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓存池,如果数据是该范围的,每次并不创建新的空间。

注意:Integer的数据直接赋值,如果在-128到127直接按,会直接冲缓冲池里获取数据

Random:产生随机数

public Random();没有给种子,用的是默认种子,是当前时间的毫秒值
public Random(long seed);给出指定种子(给定了种子之后,每次产生的随机数相同)

System

System 类包含一些有用的类字段和方法。它不能被实例化

System.gc()垃圾回收机制

System.gc()可用于垃圾回收。当使用System.gc()回收某个对象所占用的内存之前,通过要求程序调用适当的方法来清理资源。在没有明确指定资源清理的情况下,Java提高了默认机制来清理该对象的资源,就是调用Object类的finalize()方法。finalize()方法的作用是释放一个对象占用的内存空间时,会被JVM调用。而子类重写该方法,就可以清理对象占用的资源,该方法有没有链式调用,所以必须手动实现。
从程序的运行结果可以发现,执行System.gc()前,系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的finalize()方法的调用,即先释放自己的资源,再去释放父类的资源。
但是,不要在程序中频繁的调用垃圾回收,因为每一次执行垃圾回收,jvm都会强制启动垃圾回收器运行,这会耗费更多的系统资源,会与正常的Java程序运行争抢资源,只有在执行大量的对象的释放,才调用垃圾回收最好

arraycopy(命名不规范的一个方法)

从指定数组中复制一个数组,复制从指定的位置开始,到目标位置结束。

正则表达式

符合一定规则的字符串。相关的类Pattern(在API中我们可以查看)

上一篇下一篇

猜你喜欢

热点阅读