java面试基础(一)

java面试基础(一)        2016年5月3日

面向对象编程特性:抽象、封装、继承、多态


方法作用域: public 当前类、同包、子孙类、其他
protected 当前类、同包、子孙类
default 当前类、同包
private 当前类

八大基本数据类型:byte、short、int、long、float、double、char、boolean

float型赋值需要加入强制转换:float  f=(float)3.4

short s = 1;s=s+1; //错误需要强制转换short s = 1;s = (short) (s + 1);
或者自动类型提升:short s = 1;s += 1;

goto为保留字符

String是引用类型(区别在于是否可用null)
原始类型:byte、short、int、long、float、double、char、boolean
封装类型:Byte、Short、Integer、Long、Float、Double、Character、Boolean


'&' '|' '^'(化作16位二进制进行运算)逻辑操作、'&&'、'||'为条件操作(不说了,会短路,当判断前面为假,后面直接短路不判断)
三者都是位运算,分别代表且、或、异或 计算方式:1&1=1,其他为0。0|0=0,其他为1。0^1或1^为1,其他为0


stack和heap:栈和堆,栈是一种线性集合、增删改同一时间完成、后进先出。堆是栈组成的一个元素


Math.round(11.5)=12(计算方式+0.5求其floor,最接近的长整形)
Math.round(-11.5)=-11
源码如下:
public static long round(double a) {
        if (a != 0x1.fffffffffffffp-2) // greatest double value less than 0.5
            return (long)floor(a + 0.5d);
        else
            return 0;
}


switch是一个整形表达式,因此传递过来的应该是int、short、char


'~':取反运算:~1=0,~0=1(取反:小于或等于0的,取反+1,大于0的取反-1)
~9=~0000 0000 0000 0000 0000 0000 0000 1001
  =~1111 1111 1111 1111 1111 1111 1111 0110(取反,32位操作系统)
  =1111111111111111111111111111111111111111111111111111111111110110(64位操作系统)
  =-10


负数变正数是通过补码:
-33要知道其内存中储存方式,先找出33的
0(代表正负数,0为正数)000 0000 0010 0001
取反之后+1
1111 1111 1101 1110
1111 1111 1101 1111


'<<'(高位丢弃,地位补0)9<<3=72将9的位数向左移动三位(-9)<<3=-72(计算技巧,数据较小:左移n位相当于x*2^n)
'>>'(最高位为0,则补0,反之亦然)9>>=1(计算技巧,数据较小:右移n位相当于x/2^n)
最快的算出2*8等于几 2<<3


数组有length属性,字符串有length()方法


label跳出多重嵌套循环


构造器Constructor不能被继承,故不能重写其Override方法


两个equals相同,其一定有相同的hashcode,因为其equals是用hashcode来判断是否相等的


String是final最终类,不能被继承


哈希算法:
(char)97=a //由哈希码转换为字符串
a.hashCode() //由字符串转换为哈西码


"abc".hashCode()=96354 //97=a,98=b,99=c。而96354是如何得到的呢?


java计算hashCode:
private int hash; // Default to 0
    public int hashCode() {
        int h = hash; //0
        if (h == 0 && count > 0) {
            int off = offset; //0
            char val[] = value; //abc
            int len = count; //3


            for (int i = 0; i < len; i++) { //0 i<3 | 1 1<3 | 2 2<3
                h = 31*h + val[off++]; //h=31*0+97=97
            } //h=31*97+98=3105
//h=31*3105+99=96354
            hash = h;
        }
        return h;

    }


原创笔记。若有错误,请及时告知

猜你喜欢

转载自blog.csdn.net/qq_39471933/article/details/80876524