对象与内存
1 class N 2 { 3 int num2; 4 static int num1; 5 6 }
1.实例变量属于类JAVA对象,例如 int num2,必须实例化才能访问N n=new N(); n.num2;
2.类变量属于类的本身的变量,一般被static修饰例如 static int 1,是直接通过类名来访问 N.num1
3.实例变量在初始化时顺序:非静态初始化块->构造器—>定义实例变量指定的初始值
4. 程序先调用父类的初始化块和构造器再调用本类的初始化块和构造器。
5.当执行N n=new N();时内存就已经被分配下来,然后再是构造器对其赋值
6.访问对象的实例变量时,是由声明该变量的类型决定,访问对象的方法时是有实际所引用的对象来决定.
7.子类只继承了父类的方法。
8.如果在子类中的变量与父类中的变量名字相同,那么子类会隐藏父类中的变量,隐藏并不是覆盖,依然可以通过super来调用弗雷 的变量。
二、final修饰符
1.被final修饰的变量必须赋初始值,以后再不能对final变量重新赋值。赋值的地方有1.定义final变量是对其赋值,2.在非静态初始化块中赋值,3.在构造器中赋值
2.final修饰符一个重要用途是定义“宏变量”。
1 public class StringJoinTest 2 { 3 public static void main(String[] args) 4 { 5 String s1 = "疯狂Java"; 6 String s2 = "疯狂" + "Java"; 7 System.out.println(s1 == s2); 8 //定义2个字符串直接量 9 String str1 = "疯狂"; 10 String str2 = "Java"; 11 //将str1和str2进行连接运算 12 String s3 = str1 + str2; 13 System.out.println(s1 == s3); 14 } 15 }
程序的第七行的结果为true因为编译器会直接对“疯狂”和“java”进行连接,而第13行则为false,因为在编译的时候str1和str2只是两个变量,但是将代码修改成
1 final String str1 = "疯狂"; 2 final String str2 = "Java";
这是final相当于C中的宏定义,在执行到12行时编译器会认为str1就是"疯狂",str2就是“Java”。需要强调的是只有在定义final变量赋初值时,才能被当成宏定义。
3.被内部类访问的局部变量都必须使用final修饰。
浙公网安备 33010602011771号