1、
public可以被当前类,子类,包,其他包,访问,
protected可以被当前类,子类,包访问
default可以被可以被当前类,包内访问;
private只能被当前类访问
2、在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。
3、
4、以下 _____ 不是 Object 类的方法
5、
6、
7、
8、
A. 在方法中,修改一个基础类型的参数不会影响原始参数值1234567891011public static void main(String []args){ int i = 5; func(i); System.out.println(i);}static void func(int j){ j = 10;} //输出结果5在主方法调用func(int j) 时 , 参数i是实际参数 , 值为5 , 参数j是形式参数 , 值是i给的 , 也是5 , i和j没有任何关系 , 是两个独立的参数 , 所以修改j的值时与i没有关系 , 仍然输出5。
B. 在方法中,改变一个对象参数的引用不会影响到原始引用12345678910111213public static void main(String []args){ User rabbiter = new User(); rabbiter.setName("rabbiter"); func(rabbiter); System.out.println(rabbiter.getName());}static void func(User user){ user = new User(); user.setName("zhangsan");} //输出结果rabbiter在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 只是指向的对象一致 , 所以并不违反值传递的理论。此时 , 如果修改形参user , new一个新的对象并让user指向它 , 修改的只是形参保存的地址 , 与实参rabbiter无关 , rabbiter指向的对象仍然是之前的那个对象。
C. 在方法中,修改一个对象的属性会影响原始对象参数123456789101112public static void main(String []args){ User rabbiter = new User(); rabbiter.setName("rabbiter"); func(rabbiter); System.out.println(rabbiter.getName());}static void func(User user){ user.setName("zhangsan");} //输出结果zhangsan在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 指向的对象一致 , 所以并不违反值传递的理论。那么user对其指向的对象的属性name进行修改 , rabbiter指向的对象的name属性也就被修改了。
D. 在方法中,修改集合和Maps的元素不会影响原始集合参数集合和Maps都是对象 , 所以此项跟C选项的解析一致。
9、
10、
11、
12、
A,D考的一个知识点,final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。
B,finally表示总是执行。但是其实finally也有不执行的时候,但是这个题不要扣字眼。
1. 在try中调用System.exit(0),强制退出了程序,finally块不执行。
2. 在进入try块前,出现了异常,finally块不执行。
C,finalize方法,这个选项错就错在,这个方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。第二次进入回收队列的时候,不会再执行其finalize方法,而是直接被二次标记,在下一次GC的时候被GC。
放一张图吧
13、
A Class类在java.lang包
B 动态代理技术可以动态创建一个代理对象,反射不行
C 反射访问私有成员时,Field调用setAccessible可解除访问符限制
D CGLIB实现了字节码修改,反射不行
E 反射会动态创建额外的对象,比如每个成员方法只有一个Method对象作为root,他不胡直接暴露给用户。调用时会返回一个Method的包装类
F 反射带来的效率问题主要是动态解析类,JVM没法对反射代码优化。
14、
A:Java中所有错误和异常的父类是java.lang.Throwable
B:基本数据类型不是对象,不能用new的方法获取,但是每个基本数据类型都对应着封装类型,这些封装类型为了解决基本数据类型面向对象用的。
C:Java垃圾回收器负责回收无用对象占据的内存资源,但对象没有使用new获取了一块特殊区域,这块特殊区域的回收使用finallize()
D:Java跨平台是因为有JVM的存在,Java的三个版本的运行需要各自不同的环境。
E.java是跨平台的语言,这个主要是由于有针对不同平台的JVM,而JVM可以无差别的执行字节码(.class文件).但是,平台无关并不意味着版本无关,对于高版本编译器编写的java程序可能无法在低版本的java平台中运行。
F.Synchroized修饰非静态方法,是对调用该方法的对象加锁,Synchroized修饰静态方法,是对类加锁(因为类会调用它)