JavaSE再学习笔记(2)

来源:互联网 发布:linux 修改 oracle sid 编辑:程序博客网 时间:2024/05/02 02:27
1.定义成员变量的时候,可以对他初始化,也可以不初始化,如果不初始化,java会进行一个默认的初始值,所有引用类型,不进行初始化,默认都为null。局部变量,必须要初始化。
2.基本类型在内存中只有一块,引用类型在内存中占两块。
3.方法只有在调用的时候内存才分配空间,对象只有运行期间动态分配内存。
4.方法结束后,方法的局部变量申请的内存空间就全部消失了。栈内存中,如果方法结束后,是立即消失的。堆内存的产生的对象,并不是立刻消失的,是等到垃圾回收器回收的时候消失。
5.方法重载的时候,参数个数和参数类型有一种不一样就可以。但是两个方法方法名,参数都一样,而返回值的类型不一样,这样不能构成重载。是会出现错误的,两个方法的方法名一样,重名了。因为调用一个方法,对于其返回值可以用也可以不用,比如int max(int a, int b) 和 void max(int a, int b) 。如果只是调用方法,test.max(3,4),这样根本就不知道调用哪个方法。
6. 打包所写的文件  jar -cvf xxx.jar *.*     *.*的意思表示把当前目录下的所有文件都进行打包
7.重写 必须具有相同的方法名称,参数类型,返回结果类型,因为是从父类继承的方法。重写的方法不能具有更严格的访问权限。
8.子类继承父类,在new 子类的时候,在子类对象内部有一个父类对象。在子类的内存中,相当于其中的某一块包含了父类。
9. 子类构造过程中,必须调用父类的构造方法。因为构造一个对象,必须先构造其父类对象,所以先调用父类的构造方法。子类可以在自己的构造方法内使用super(argument_list)调用父类的构造方法。使用this(argument_list)调用本类其他的构造方法。如果显式调用了super,必须在构造方法的第一行。
10.如果子类没有显式的调用父类的构造方法,则默认调用父类没有参数的构造方法。如果父类不存在没有参数的构造方法,则编译出错。
11.equals方法基本每个类要重写。因为,如果不重写,他继承的是Object的equals方法,他和 ==  一样。JDK提供的一些类,String,Date基本所有类都重写了这个方法。
12.对象的引用 instanceof 类型,来判断 引用所指向的对象,是否属于该类或该类的子类。
Dog Cat 继承与Animal , dog instanceof Animal,dog instanceof Dog都是true
13.一个父类的引用不可以访问其子类对象新增的属性和方法。如果要访问,需要进行强制类型转换。
14. 子类对象可以当做父类的对象来使用成为 向上转型,反之成为向下转型。 强制类型转换时向下转型。
15. 动态绑定是指"在执行期间(而非编译期)"判断所引用对象的实际类型,根据实际类型调用其相应的方法。动态绑定也就是多态。
多态的存在有三个必要条件:1>要有继承2>要有重写3>父类引用指向子类对象。
----------------------------------------------------------------------------------
1. int[] a;    //这个时候只有栈里面有,堆内存还没有分配空间
   a = new int[3];  //这个时候分配
   Date[] days ;
   days = new Date[3];  栈内存指向堆内存中,堆内存中三个格又分别是 三个date对象的引用。
2. main方法里面的String[] args数组。这个数组用来存放命令行参数。
  java TestArgs  as  bb cc 1e134     后面的就是命令行参数
  比如输入 java TestArgs 9 3 2 1 6 7 8   其实就是相当于从命令行输入了一个数组
    for(int i=0; i<args.length;i++)
    {
System.out.println(args[i]);
    }
3. 一般来说,System.exit(-1);传一个-1进去,表示非正常退出;System.exit(0);传一个0进去表示正常退出。
4. Java中多维数组的声明和初始化,必须从高维到低维。(也就是从左到右)。java中的多维数组就是 数组的数组。
    int[][] a = new int[3][];
    a[0]=new int[2];  a[1]=new int[3] ..


    int[][] t1 = new int[][4] ; 这样是错误的。因为第一维在堆内存还没分配内存空间,不可能为后面的分配空间。
    静态初始化:
        int[][] a = {{1,3},{2,3},{3,4,5}}
int[3][2] b ={{1,3},{2,3},{3,4,}}  //不要这样写,是非法的。前面[]内不要写值。
    动态初始化:
int[][] a = int[3][5];
5. 数组的拷贝试用System.arraycopy()方法。效率比较高,因为数组在内存中的地址是连续的。
6. 要牢记数组中内存分配的情况。
原创粉丝点击