今天学完IT十八掌第五天java基础课程:


学习内容:

1,jvm栈空间设置

堆空间设置:    java -Xmx<size>

                    java -Xms<size>

栈空间设置: java -Xss<size>

死循环不会导致栈溢出,因为在不断的压栈,弹栈

方法不断迭代会导致栈溢出,不断的在压栈(方法帧)


2,继承

构造函数:

                    为什么没有返回值。

                    因为构造函数就是为了返回对象的,固定了,所以没必要定义返回值类型。

代码块

-----------------------

构造代码块

|-----先于构造函数调用

1,局部代码块

在函数内部定义,格式为{ }

不能使用static修饰,//因为静态代码块随着类的加载而加载,在函数内部没办法初始化。

2,构造代码块

|---也是类的成员,和成员变量,成员函数同级。

 构造对象时,先调用构造代码块,然后是构造函数。

 构造代码块+static修饰符 ---->静态代码块

 静态代码块在类加载的时候执行,而且只执行一次

静态代码块

----------------------------

哪些时候使用静态呢?

1,不涉及对象操作的数据

2,所有对象操作的共享数据。 

手动控制类加载使用Class.forName("classname"),默认加载类时,执行代码块。

        Class.forName(String,boolean initialize,ClassLoader)可以控制加载时是否初始化。


继承(上)

-----------------------------------

        1,将共性内容抽取

        2,很好的进行重用

        3, extends

                        class B extends A { . . . .}

        4,java只支持单继承,不支持多继承

        5, java支持多层继承(继承体系)           

                    |---    class A

                    |--- class B extends A

                    |--- class C extends B

        6,super关键字:超类的,父类的

        7,父类的私有属性不能被子类继承,私有方法也不能被子类覆盖。

javabean的规范

------------------

    私有的属性,

    公有的getter/setter.



函数重写(override)

-------------------------------------------------

特别注意:子类在覆盖父类的方法时,权限是放大或不变的过程,不允许权限降低

比如父类方法为public ,子类覆盖的方法权限为private;总之,覆盖时,子类方法权限一定不小于父类方法权限。

final

--------------------

    1.修饰类,表示类不能被继承。

    2.修饰方法,表示方法不能被重写。

      私有方法可以加final,没有意义,编译通过。(不可能发生)

    3.修饰变量,只能被赋值一次。如果不赋值,编译通不过。


3,抽象类    由abstract修饰,将诸多子类的共性抽取,但没有明确的功能主体。

    1,抽象类不能被直接创建实例,

    2,抽象方法没有功能主体,必须在抽象类中 , 为什么?

              (反证,如果抽象方法在非抽象类中,那么就可以被对象调用,而该方法没有功能主体,所以必须定义在抽象类中)


    3,抽象类中可以没有抽象方法,而且抽象类中的非抽象方法可以调用本类中的抽象方法,为什么?

              (因为抽象类不能直接实例化,所以非抽象方法不会被本类实例调用,抽象方法自然也不会被调用了,所以符合抽象规则)


    4,抽象类的非抽象子类必须实现(重写)该抽象类中的所有抽象方法,因为非抽象子类实例需要具备从父类继承的方法的具体实现。

            而抽象类的抽象子类可以不实现该抽象类中的所有抽象方法。


    5,抽象类的非抽象子类在创建对象时,会先调用父类的构造函数(默认调用的是空参数构造),然后调用自己的构造函数。

                相当于super(),也可以显式调用带参的父类构造函数,super(args1,args2,....)


    6,     abstract + static            非正常的修饰符组合        ,抽象是为了不让创建对象调用,封住入口,加static,可以通过类名.调用,矛盾

           abstract + final             非正常的修饰符组合            抽象方法在非抽象子类中必须重写(具体实现),加final不能被重写,矛盾

           abstract + private         非正常的修饰符组合           抽象方法在非抽象子类中必须重写(具体实现), 加private,该抽象类的非抽象子类没有权限访问。


4,接口                    面向接口编程目的,降低耦合度。

    interface 

    特点:

                1,接口是对外暴露的规则。

                2,接口是程序的功能扩展

                3,接口的出现降低耦合性

                4,接口可以用来多实现

                5,类在继承其他类的时候可以实现多个接口

                6,接口之间可以有继承关系



遇到的问题:

1,构造函数,构造代码块,静态代码块的执行顺序是怎样的,为什么

静态代码块随着类的加载执行,对类进行初始化动作,创建对象时,先执行构造代码块,然后执行构造函数

一般执行构造代码块初始化对象共有属性,构造函数,初始化对象特有属性

2,super和this作用以及用法以及注意事项?

见作业

3,白富美接口案例

需要帮助的问题

白富美案例。