/**
*
* 1如何放掉一个指定占据的内存的空间?
* A 调用free() 方法
* B 代用system.gc() 方法
* C 赋值给该对象的引用为null
* D 程序员无法明确的强制垃圾回收器运行
*
* *注解:在《java 虚拟机》一数中明确讲到,释放掉占据的内存空间是由gc完成,但程序员无法明强制运行,该空间在不被引用的时候,不一定会立即被释放,这取决于GC 本身;无法由程序员自己控制。 C 中的sysyem.gc() 函数,作用只是提醒虚拟机:程序员希望进行过一次垃圾回收,但是它不可以保证,虚拟机一定会回收,具体什么时候回收,取决于虚拟机。
* 2hashSet子类依靠()方法来区分元素的重复?
* A toString 和 equal
* B clone 和 equal
* C hashCode 和 equal
* D getClass 和 clone
*
* *注解: hashSet 的内部使用 Map 来保存数据,即 hashSet的数据作为Map 的 key 值来保存,这也是其不可以重复的原因,而Map 中保存key 值之前,先判断当前的Map 中是否含有当前的key 值对象,其内部先是通过key 的hashCode , 确定相同的hashCode 之后,再通过equal 方法判断值是否相同。
*
* 3 下列哪个数据类型是基本数据类型?
* A int
* B String
* C Byte
* D Float
*
* *注解: java 语言支持的数据类型分为:基本数据类型和引用数据类型;
* 1基本数据类型: boolean 和数值类型;
* 数值类型分为:整型和浮点型;整型: byte ,char , short , int,long;浮点: flaot , double;
* 2引用数据类型: 类,接口和数组;
* Byte 和 Flaot 属于基本数据类型的包装类型,属于引用数据类型;
* 一定要注意大小写!!!!!!
*
*4 abstract class 和 interface 有什么区别?(ABD)
* A 抽象类可以有构造方法,接口中不可以有构造方法
* B 抽象类中可以有普通的成员变量,接口中不可以有普通的成员变量;
* C 抽象类不可以有静态方法,接口中可以包含静态方法;
* D 一个类可以实现多个接口,但只能继承一个抽象类;
*
* * 注解:抽象类:
* 1 含有abstract 修饰的类即为抽象类,抽象类不可以被直接实例化对象;
* 2 含有abstract 方法的类必须定义为抽象类;抽象类中的方法不必是抽象的(也可能是属性是抽象的)
* 3 抽象类定义的方法必须在其子类中实现;如果子类中存在没有实现抽象父类中的所有的抽象方法,则子类也必须定义为抽象类;
* 接口:
* 1 接口可以说成是抽象类的一个特例:接口中所有的方法都必须是抽象方法;其方法默认为:public abstract
* 其所有的成员属性都默认为:public staticfinal
*
* 下面比较两者的语法区别:
* 1 抽象类可以有构造方法,接口不可以,因为接口中都是抽象的方法;
* 2 抽象类中可以有普通的成员变量,接口没有普通的成员变量;
* 3 抽象类中可以包含非抽象的普通的方法,接口中不可以;
* 4 抽象类中的抽象方法的修饰符可以是 publicdefault protected 接口中抽象方法只能是public abstract
* 5 抽象类中可以包含静态方法,而接口中不可以包含静态方法;
* 6 抽象类和接口中都可以包含静态的属性,抽象类中静态的属性的访问类型可以任意;而接口中的属性只能是 public static final
* 7 一个类可以实现多个接口,但只能继承一个抽象类;
*/
//抽象类中的成员方法的修饰符可以是: public default protected
abstract class Test1 {
staticint a = 100;
publicabstract void Test1();
abstractvoid Test1(int a);
protectedabstract void Test1(char a);
staticvoid Test2() {} //抽象类中可以包含静态方法
//privateabstract void Test1(String a); error
}
//抽象类中的成员属性的修饰只能是: public static final (全局常量) (即便不写也是默认这样的)
//抽象类中的成员方法的修饰只能是: public abstract (即便不写,也是默认这样的)
abstract interface Test6
{
public static final int a = 111;
public abstract void test();
//static void test3(); error
int b = 10;
void test2();
}
* 5 下列说法中正确的是?
* A class 中的constructor 不可以省略;
* B constructor和必须与class同名,但方法不可以与class同名;
* C constructor 在一个对象被new 时调用;
* D 一个class 只能定义一个constructor;
*
* *注解:B 项的困惑:在java 中,方法可以与构造函数同名;在C++ 中则不可以
*/
public class Test2 {
publicTest2()
{
//constructor
}
publicvoid Test2()
{
//function
}
publicvoid Test2(int a)
{
//function
}
}
* 7 默认的类型的等价是哪一项?
* A public String name = "default"
* B public static name = "default"
* C public static final name = "default"
* D private String name = "default"
*
* 注解:在接口中:成员变量默认为: public staticfinal 成员方法默认为: public abstract
* 接口中可以隐藏不写这些固定的修饰符,接口不可以实例化,只有子类重写了接口的“所有”方法,子类才可以实例化,否则子类还是一个抽象的类,接口只能被public 或者 abstract 修饰 .
*/
8 :
public interface Test3 {
String name = "default";
}
public class Test4 {
publicstatic void main(String[] args) {
inti = 10;
longl = 10;
floatf = 10.0f;
doubled = 10.00;
System.out.println(d== f);
System.err.println(f== l);
System.err.println(l== i);
}
}
/*
* 注解: Java 核心卷1 中43页有如下的表述:
* 两个数值进行二元操作时,会有如下的转化操作:
*
* 如果两个操作数,其中有一个是 double ,另一个操作数就会转化为double;
*
* 否则,如果其中有一个操作数是float, 则另一个操作数就会转换为float;
*
* 再否则,如果其中有一个操作数是long, 则另一个就会转换为long;
*
* 否则,两个操作数都会转换为int
* 举例:
* int= byte + byte ; ok!
* int= byte + short;
* int= short + short;
* int= int + int;
*
* long = short + byte;
* long = int + long;
* ......
*/