10-12Java刷题

1、(C#、JAVA)扩展方法能访问被扩展对象的public成员。
2、在这里插入图片描述
解析:一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:

  • Bootstrap ClassLoader 负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等

  • Extension ClassLoader 负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class

  • App ClassLoader 负责加载当前java应用的classpath中的所有类。
    classloader 加载类用的是全盘负责委托机制。 所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。
    所以,当我们自定义的classlo ader加载成功了 com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。
    在这里插入图片描述
    3、JUnit主要用来完成单元测试。
    5、在这里插入图片描述
    解析:效率:StringString(大姐,出生于JDK1.0时代) 不可变字符序列 <StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列 。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized 修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,JVM运行程序主要的时间耗费是在创建对象和回收对象上。
    6、以下代码输出的是:
    在这里插入图片描述
    解析:Java中String类型变量是immutable(不可变的)。尽管change()方法中的str与sv.str都是新的对象实例成员变量值“6”的引用,由于String类型的不可变性,change()方法中的str="10"语句实际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但原数据引用sv.str的引用值(也就是“6”的内存地址)并没有发生改变,因此sv.str指向的值仍旧为6.
    java中的方法传递都是值传递,java中的数据类型有基本类型和引用类型,他们都是值传递方式。基本类型传递的是它的值,因此方法中的改变参数的值,不会影响方法外。引用类型传递的是一个地址,因为引用类型在生成对象实例时,里面的值是一个地址,指向了对象实例。在传值的时候实际上传的是一个地址,他们指向了同一块地址,所以在方法内的改变会影响方法外的参数。 这里比较乱人心的是包装类型,因为包装类型也是引用类型,这里应该就是和包装类型的实现有关了,在包装类型中,比如Integer a=1,有一个自动装箱的操作。其实a=1,如果现在令a=2,不会令2覆盖1(即1本身是不会变的),真正改变的是a被赋给了一个新地址,这个地址指向了2。因此方法内的改变包装类型的值就相当于改变了形参里面的地址,相当于重新new了一遍。而方法外面的实参仍旧指向含1的那个地址,一次方法内的改变不会影响方法外的实参。
    7、以下代码执行后输出结果为

    public class Test{
            public static void main(String[] args){
                      System.out.println("return value of getValue(): "+getValue());
           }
            public static int getValue(){
              try{
                   return 0;
               }finally{
                   return 1;
               }
            }
       }
    

解析:根据官方的JVM规范:
如果try语句里有return,返回的是try语块中变量值。详细执行过程如下:
(1)如果有返回值,就把返回值保存到局部变量中;
(2)执行jsr指令条到finally语句里执行;
(3)执行完finally语句后,返回之前保存在局部变量表里的值。
如果try,finally语句里均有return,忽略try的return,而是用finally的return。
8、在这里插入图片描述
解析:A.Java中涉及到byte、short和char类型都可哟强制转化为int,符合返回类型
B.方法中定义为void应该没有返回值,但返回值为布尔型 错
C.方法中类型为int,应该返回为int类型值
D.方法应该定义为int(int a,int b)
9、java.exe是java虚拟机
javadoc.exe是用来制作java文档
jdb.exe是java的调试器
javaprof.exe是剖析工具
10、以下代码将打印出:
在这里插入图片描述
解析:打印出///////MyClass.class
由于replaceAll方法的第一个参数是一个正则表达式,二".“在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成”/"。如果想替换的只是".",那么就要写成"\."。‘.’在这里是被认作了正则表达式,对应的作用范围就是All字符串,然后目标的字符串就都成///了。如果只是要换‘.’的话,先用【.】说明搁这儿的点就是普通的点,跟正则表达式那个家族没关系!可是,‘\’在JAVA里又是另一个大家族【转义字符】里的一员,所以还得再转义一下,说明它在这里只是为了改变‘.’的既定命运罢了。

猜你喜欢

转载自blog.csdn.net/Cystal_ll/article/details/83023716