1 在Java中,没有 2 3 定义名称时尽量避免使用 package com.laixintao.Test;
public class Outer$Inner {
public static void main(String[] args) {
Outer o = new Outer();
Outer.Inner i = o.new Inner();
i.innerPrint();
}
}
class Outer {
class Inner {
void innerPrint() {
System.out.println("Inner Print!");
}
}
}在编译( 4 Unicode转义字符处理的非常早,在解析程序之前。例如:// char c1 = 'u00a';
// char c2 = 'u00d';在程序中出现这两行代码编译报错。这两个Unicode码分别表示”换行”和”回车”,所以,在编译器编译的时候,代码是这样的: // char c1 = '
';
// char c2 = '
';5 Unicode码使用16位字符编码,在Java中用 6 当 7 注意 8 在整型数据间的扩展转换中,如果操作数是 9 整型数据之间的收缩转换,仅仅是截断并丢弃高位,不做任何其他处理。 10 0.1+0.2不等于0.3. 11 float类型可以保留7~8个有效数字,而double类型可以保留15~16个有效数字,因而当int类型或long类型数值多于double或float地有效数字时,该值的一些最低有效位就会丢失,从而造成精度丢失,这时,就会采用IEEE754最近舍入模式,提取与该整型值最接近的浮点值。 尽管整型向浮点型的转换属于扩展转换,但当数值很大或很小(绝对值很大)时,就会产生一定的精度丢失。 12 13 i++和++i其实都是先+1,再赋值。 ++i,没什么好说的;i++,以 14 +0与-0在浮点类型变量存储中,符号位是不同的。当-0和+0参与浮点类型的相关运算(例如相除与求余运算)时,可以产生不同的结果。 15 浮点的相除与求余运算不同与整型的相除与求余运算,当除数为0时,浮点运算不会产生 16 17 由于 18 在 19 20 当两个或多个方法的名称相同,而参数列表不同时,这几个方法就构成了重载。重载方法可以根据参数列表对应的类型与参数的个数来区分,但是,参数的名称、方法的返回类型,方法的异常列表与类型参数不能作为区分重载方法的条件。 21 究竟选择哪个方法调用,顺序是这样的:
22 重写和隐藏的本质区别是:重写是动态绑定的,根据运行时引用所指向对象的实际类型来决定调用相关类的成员。而隐藏是静态绑定的,根据编译时引用的静态类型来决定调用的相关成员。换句话说,如果子类重写了父类的方法,当父类的引用指向子类对象时,通过父类的引用调用的是子类方法。如果子类隐藏了父类的方法(成员变量),通过父类的引用调用的仍是父类的方法(成员变量)。 23 构造器是递归调用的,子类的构造器会调用父类的构造器,直到调用Object类的构造器为止。 24 构造器没有创建对象,构造器是使用new创建对象时由系统调用的,用来初始化类的实例成员。从顺序上说,先是创建对象,然后再调用构造器的。 (构造器并没有产生新的对象) 25 默认的构造器不为空,该构造器会调用父类的无参构造器,并可能执行实例成员变量的初始化。所以,默认的构造器至少调用了父类的构造器,它做的工作还可能更多,包括实例变量声明初始化与实例初始化块,都是在构造器中执行的。 26 当==或!=运算符的两个操作数的类型一个是基本数据类型,另一个是包装类引用类型时,将引用类型拆箱转换为基本数据类型,然后比较两个基本数据类型的值是否相等。 27 在Java中,数组也是类,数组声明的引用变量指向数组类型的对象。所有的数组都继承 28 接口是完全抽象的设计,不能实例化。使A用 29 如果两个接口声明了相同的变量x,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误。 30 如果两个接口中声明了相同名称的方法m,并且两个方法没有构成重载,则当某接口能够同时继承这两个接口,或者某类能够同时继承这两个接口时,必须存在一种方法签名,使得该签名同时为两个m方法签名的子签名,并且在方法的返回类型上,必须存在一种类型,使得该类型同时为两个m方法返回类型的可替换类型。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|