基础语法_2
※ 描述一下JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader是一个重要的java运行时系统组件。它负责在运行时查找和装入类文件的类。
※ char型变量中能不能存储一个中文汉字,为什么?
能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文没问题。
※ 静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
Static Nested Class 是被声明为静态的(static)内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
※ Java 中会存在内存泄漏吗,请简单描述。
会;存在无用但可达的对象,这些对象不能被GC回收,导致消耗内存资源。
※ 抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
都不能。
※ 静态变量和实例变量的区别。
静态变量也成为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问;而实例变量必须依赖于某一实例,只能通过对象才能访问到它。
※ 是否可以从一个静态(static)方法内部发出对非静态(non-static)方法的调用?
不可以,如果其中包含对象的method(),不能保证对象初始化。
※ 如何实现对象克隆?
Clone有缺省行为;superr.clone(),他负责产生正确大小的空间,并逐位复制。
※ GC是什么?为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员最容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾回收器会自动管理。也可以调用System.gc()或Runtime.getRuntime().gc()请求垃圾回收。
※ 垃圾回收的优点与原理。并考虑两种回收机制。
Java语言中一个显著特点就是引用了垃圾回收机制,是C++程序员最为头疼的内存管理的问题迎刃而解,它使Java程序员在编写程序时不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有”作用域“。垃圾回收可以有效的防止内存泄漏 ,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别线程的线程运行,不可预知的情况下对内存堆中已经死亡或长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收期对某个对象或所有对象进行垃圾回收,回收机制有分代复制垃圾回收和标记垃圾回收、增量垃圾回收。
※ 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是“可达的”,哪些对象是“不可达的”。当GC确定一些对象为“不可达”时,GC就有责任回收这些内存空间。程序员可以动手执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。
※ String s = new String("xyz");创建了几个字符串对象?
两个对象,一个是"xyz",一个是指向"xyz"的引用对象s。
※ 接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concrete class)?
接口可以继承接口;抽象类可以实现(implements)接口,抽象类可以继承实体类,但前提是实体类必须有明确的构造函数。
※ 一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?
可以;必须只有一个类名与文件名相同。
※ Java的接口和C++的相同之处与不同之处。
由于JAva不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方法或属性,现有的单继承机制不能满足要求。与继承相比,接口有更高的灵活性,因为接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法和属性,并且接口里面的属性在默认状态下都是public static ,所有方法默认情况下是public一个类可以实现多个接口。