image.png

    解析:
    编译不会编译注释。

    image.png

    解析:
    局部变量使用之前必须初始化,否则报错。
    但是!! 如果是静态变量,可以不用初始化,因为在类的加载的准备阶段,会为静态变量赋默认初值。

    1. public class TestInitParameter {
    2. static int i;
    3. public static void main(String[] args) {
    4. System.out.println(i);
    5. }
    6. }
    7. // 输出0

    此外!!! 如果是成员变量,在new对象的过程中也会赋默认初值,因此也可以不用初始化,重要调用了new就可以用了。

    public class TestInitParameter {
        int j;
        public static void main(String[] args) {
            TestInitParameter obj = new TestInitParameter();
            System.out.println(obj.j);
        }
    }
    

    image.png

    解析:
    没有jinfo这个命令

    jmap查看内存映射,映射就是map,记住

    jhat是内存分析工具

    jstat是性能监控工具。

    image.png

    解析:
    char类型的默认值是’\u0000’

    image.png

    解析:
    标识符不能以数字开头,只能以字母,_ 和 $开头。

    image.png

    image.png

    image.png

    解析:
    image.png

    image.png

    解析:
    System.arraycopy调用的是本地方法,所以最快。

        public static native void arraycopy(Object src,  int  srcPos,
                                            Object dest, int destPos,
                                            int length);
    

    clone也是本地方法,但是比System.arraycopy稍微慢

    Array.copyOf本质还是调用System.arraycopy,排第三

        public static boolean[] copyOf(boolean[] original, int newLength) {
            boolean[] copy = new boolean[newLength];
            System.arraycopy(original, 0, copy, 0,
                             Math.min(original.length, newLength));
            return copy;
        }
    

    for遍历最慢。

    image.png

    解析:
    如果是成员方法,确实是运行new出来的对象的方法;

    但是如果是静态方法,就是运行左边类对应的方法。

    public class TestStaticExtends {
        public static void main(String[] args) {
            FatherTest f = new SonTest();
            f.staticMethod();
            f.normalMethod();
        }
    
    }
    
    class FatherTest {
        public static void staticMethod() {
            System.out.println("Father's static method");
        }
    
        public void normalMethod() {
            System.out.println("Father's normal method");
        }
    }
    
    class SonTest extends FatherTest {
        public static void staticMethod() {
            System.out.println("Son's static method");
        }
    
        public void normalMethod() {
            System.out.println("Son's normal method");
        }
    }
    
    输出:
    Father's static method
    Son's normal method
    

    image.png

    解析:
    A错是因为JAVA是跨平台的,包和操作系统没有任何关系,而是虚拟文件系统;

    B错是因为,并没有拷贝过来执行,而是告诉编译器有使用外部文件,去找外部文件。

    C错的明显

    D,有人可能以为用private修饰类,那在同一个包下就不能访问,但是!外部类不能用private修饰!只要内部类可以。!!

    image.png

    解析:
    虚拟机并不知道泛型,因为在编译过程中,会进行泛型的擦除;所以A和B正确;

    创建泛型对象时要指明类型,让编译器尽早进行参数检查,而不是等到运行时抛错,因此C正确;

    D错误,因为可以通过反射的方式获得实际类型。

    image.png

    解析:
    count = count++:

    1. 先将count保存到副本里,即temp = count;
    2. 将temp赋值给count, 即count = temp; 因此count仍然为0;
    3. 完成temp的++,而不是count的++,因此temp为1, count为0.

    注意,如果改成++count,就不会出现这种问题:

    public class TestSelfIncrement {
        public static void main(String[] args) {
            int count = 0;
    
            for (int i = 0; i < 10; i++) {
                count = ++count;
            }
    
            System.out.println(count);
        }
    }
    
    输出为10
    

    原因是:

    1. 先将count保存到副本里,temp= count;
    2. temp自增,temp = 1;
    3. 将temp赋值给count,那么count = 1;

    可以看到,2和3的顺序调换了。

    image.png

    解析:

    1. 被final修饰的是常量,b6 = b4 + b5可以直接看出b6 = 4 + 6 = 10; 不涉及类型的转换;
    2. 但是没有被final修饰的byte, short, char,在进行计算时,都会变转化成Int类型,因此b3 = b1 + b2会编译出错,因为b3是byte类型的,而b1 + b2返回的是int类型的。
    public class TestByte {
        public static void main(String[] args) {
            byte b1, b2, b3;
            b2 = 1;
            b3 = 1;
            b1 = b2 + b3;
        }
    }
    

    image.png

    image.png

    解析:
    interface类只能缺省或者用Public修饰。

    image.png

    解析:
    Stream结尾都是字节流;

    Reader,writer结尾都是字符流。

    二者实际使用的时候差不太多,如果在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。

    image.png
    解析:
    Map下线程安全的有HashTable(目前不咋用了),和ConcurrentHashMap;

    此外,可以通过Collections.synchronizedXXX()包装成线程安全的集合。

    image.png

    解析:
    A错误是因为是字符串,要用双引号;

    B错误是因为要用str.length()方法,不是属性,只有数组才是属性;

    C错是因为没有进行强制转型,类型不匹配;

    D正确是因为会当做字符串的拼接处理,等号两边仍然是字符串。