29.内部类
1.内部类可以声明为 private或是protected,但是,如果内部类是private的话,那么外部类之外 将无法访问这个内部类了。
2.内部类的创建方式只能“外部类.内部类”,无论是在外部类中里外,并且一定要在外部类对象的基础上:
OutClass oc = new OutClass(); OutClass.InClass oi = new oc.new InClass();
3.内部类是static,创建方式:
OutClass.staticClass os = new OutClass.static();
4.内部类中可以直接访问外部类的所有成员,包括private protected ,但不能通过内部类对象来访问外部类的成员。而外部类中无法访问内部类的成员,外部类的对象也不能访问内部类的成员。如下图所示 :
32.equals方法
默认:
public boolean equals (Object obj){ return (this == obj); }
比较的是两个对象引用在内存中是否指向同一个对象。
33 .匿名类没有名称,也没有构造方法。
34.toString方法:
默认:所属类名@(一个无符号的十六进制数,一般是对象所在的内存地址)
35.“克隆”
1. newObject = oldObject.clone();
这名话的意思是:将oldObject 复制到 一个新的内存地址中去,并让newObject的引用指向新的对象。
2.默认情况下,java中自定义的类都不具有克隆能力,必须实现Cloneable接口之后才行。否则会抛出异常:CloneNotSupportException。
3. 注意深拷贝和浅拷贝。
36. 语句 obj instanceof A : obj是否是A类或其子类的对象。
37. 字符串转化成Boolean类型
Boolean b1 = new Boolean("true"); //=>true
Boolean b2 = new Boolean("yes"); // =>false
38.round()的返回值
对于float,方法返回的是四舍五入后的int值
对于double,方法返回的是四舍五入后的long值
39.
String s1 = "Hello!";
String s2 = s1.concat("World");
有关字符串的方法,操作后不改变s1的值。
40.String中的一些方法
indexOf:
String s = "My name is nileader"; int i1 = s.indexOf("na"); //i1 = 2; int i2 = s.indexOf("is",3); //i2 = 8; int i3 = s.lastIndexOf("ni",15); //i3 = 11;
substring(int begIndex, int endIndex)
没有endindex参数的时候,默认是从begIndex到结尾,如果有了这个参数,则是从begIndex到endIndex-1
41.有关String,始终记住:
1.String类对象是个常量,其值在创建之后不可改变。
2 .String类中的任何一个方法如果要修改String对象的值,都是创建一个包含修改结果的新的String对象并返回。
42.String s = "Hello"+"nileader"+"!";
对于如上语句的执行,java编译器不会生成三个字符串后在给s,而是:
String s = new StringBuilder("Hello").append("nileader").append("!").toString();
43. 声明数组时,只声明 一个用来操作数组的引用,不分配实际内存大小,所以:
int[8] a; //这样的语句是错误的,在声明数组时是不可以指定数组的大小的
44.数组中要注意的一点是,
Integer[] i = new Integer[3]; //此时,i 中每个元素都是null
复合类丰创建完其对象时,全天候元素均是null。
45.数组创建过程中:
length 代表的只是数组中可能存在的最大元素个数,并不是实际对象的个数。
46.有关Arrays的fill()方法。
这是因为,当fill方法操作的是一个复合类型时,那么实际上是将这个对象的引用赋给数组中待复制的元素。
说得通俗点:
以上程序的相关语句可以描述如下: