Java散落知识点总结(一)

来源:互联网 发布:爱淘宝红包不中 编辑:程序博客网 时间:2024/04/30 16:16

1.数组

    1.

<span style="white-space:pre"></span><span style="font-size:18px;">int[] arr=new int[5];      System.out.println(arr[5]);       //编译通过,发生运行时异常(数组越界异常) </span> 

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

<strong><span style="white-space:pre"></span><span style="font-size:18px;">int[][] arr=new int[2][3];      //int[2] 这块空间存储的是两个int[3]的内存地址      //注意!!两个int[3] 内存的地址是不连续的</span></strong>
            注意!!由于内存的地址是不连续的,这也就解释了为什么

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

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

2.静态代码块

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

<strong>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的静态代码块不会执行</strong>
3.构造代码块

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

<strong><span style="white-space:pre"></span>class Test{{System.out.println("first construct");}public Test(){System.out.println("second construct");}}/*output*/    first construct    second construct</strong>

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);       //编译报错不通过



0 0
原创粉丝点击