Java散落知识点总结(一)

1.数组

    1.

	int[] arr=new int[5];
      System.out.println(arr[5]); 
      //编译通过,发生运行时异常(数组越界异常)  

      2.二维数组:要理解二维数组的内存存储结构,数组是引用数据类型,因此是堆中开辟空间

	int[][] arr=new int[2][3];
      //int[2] 这块空间存储的是两个int[3]的内存地址
      //注意!!两个int[3] 内存的地址是不连续的
             注意!!由于内存的地址是不连续的,这也就解释了为什么

          int[ ][ ] arr=new int[2][ ]; //编译通过

          int[ ][ ] arr=new int[ ][3]; //编译不通过

2.静态代码块

   随着.class的加载执行,优先main函数的执行,且只执行一次

	class Testw{
		static int num;
		static {
		System.out.println(num);
			}
		}

	public class Test01 {
			
		static {
		     System.out.println("a");
		}
		public static void main(String[] args) {
	            Test f=null;
		}
	}   
	/*output*/
	        a  只输出a 
        应为在Test01的main函数中并没有加载 Testw.class文件,因此Testw的静态代码块不会执行
3.构造代码块

    在构造函数之前执行,每新建一个对象就会执行构造代码块    

	class Test{
		{
			System.out.println("first construct");
		}
		public Test(){
			System.out.println("second construct");			
		}
	}
	/*output*/
	    first construct
	    second construct

4.对象创建过程

  1.首先加载.class文件创建对象

   2.如果有静态代码块先执行静态代码块

   3.堆中开辟内存为成员变量赋默认值

   4.堆中开辟内存为成员变量赋初始值

   5.执行构造代码块

   6.执行构造函数

   7.对象在堆中的地址传给栈中的引用

5.super和this的对比

   1.this是指向当前的对象的引用,表示当前对象

    2.super表示超类意思

    3.当成员函数中(非静态)的局部变量与成员变量同名时,使用this解决同名问题

          eg: public void setName(String name){

               this.name=name; }

    4.super是为了解决子类覆盖父类的成员函数或者成员方法,解决被屏蔽的问题使其可见。

    5.在子类构造函数中,首先要调用构造函数(super() 调用可以省略)但是有一点一定要注意!

当父类的构造函数已经被显示声明时候(也就是说默认构造函数已经消失),必须要显示声明父类的默认构造函数

否则子类在构造函数时候如果不显示声明时,就会报错。

    6.System.out.println(this);           //输出的是当前对象的地址

       System.out.println(super);       //编译报错不通过



你可能感兴趣的:(Java)