1.此代码片段输出正确的值是()A
public class CharToString {
public static void main(String[] args)
{
char myChar = 'g';
String myStr = Character.toString(myChar);
System.out.println("String is: "+myStr);
myStr = String.valueOf(myChar);
System.out.println("String is: "+myStr);
}
}
String is: g
String is: g
String is: 103
String is: g
String is: g
String is: 103
String is: 103
String is: 103
看下源码,参数myChar还是char类型,根本没变,根据它的源码返回的不可能是数字。
public static String toString(char c) { return String.valueOf(c);
}
public static String valueOf(int i) { return Integer.toString(i);
}
public static String valueOf(char c) { char data[] = {c}; return new String(data, true);
}
2.在使用匿名内部类的过程中,我们需要注意如下几点:
1使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2匿名内部类中是不能定义构造函数的。
3匿名内部类中不能存在任何的静态成员变量和静态方法。
4匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
3.关于抽象类
JDK 1.8以前,抽象类的方法默认访问权限为protected
JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口
JDK 1.8以前,接口中的方法必须是public的
JDK 1.8时,接口中的方法可以是public的,也可以是default的,默认default
JDK 1.9时,接口中的方法可以是private的,默认是default
4.关于下面这段Java程序,哪些描述是正确的:( )C
public class ThreadTest extends Thread {
public void run() {
System.out.println("In run");
yield();
System.out.println("Leaving run");
}
public static void main(String []argv) {
(new ThreadTest()).start();
}
}
程序运行输出只有In run
程序运行输出只有Leaving run
程序运行输出先有In run后有Leaving run
程序运行输出先有Leaving run后有In run
程序没有任何输出就退出了
程序将被挂起,只能强制退出
yield()方法只是让当前线程暂停下,让系统的线程调度器重新调度一次。在执行该语句之前肯定是输出了In run
的,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。所以该线程应该是再次被选中输出了Leaving run。
5.关于强引用、弱引用、虚引用和软引用
一、强引用
Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收
obj = null; //手动置null
只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了
二、软引用
软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等。
在 JDK1.2 之后,用java.lang.ref.SoftReference类来表示软引用。
三、弱引用
弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用。
四、虚引用
虚引用是最弱的一种引用关系,如果一个对象仅持有虚引用,那么它就和没有任何引用一样,它随时可能会被回收,在 JDK1.2 之后,用 PhantomReference 类来表示,通过查看这个类的源码,发现它只有一个构造函数和一个 get() 方法,而且它的 get() 方法仅仅是返回一个null,也就是说将永远无法通过虚引用来获取对象,虚引用必须要和 ReferenceQueue 引用队列一起使用。
总结下就是:
1)对于一个对象来说,只要有强引用的存在,它就会一直存在于内存中
2)如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。
3)如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存
4)一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间