day_06 刷题日记

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)一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的空间

发布了50 篇原创文章 · 获赞 5 · 访问量 5819
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览