黑马程序员技术交流社区

标题: 【石家庄校区】JavaEE就业班day01-day06学习交流 [打印本页]

作者: dangligedang    时间: 2017-12-22 20:34
标题: 【石家庄校区】JavaEE就业班day01-day06学习交流
本帖最后由 小石姐姐 于 2017-12-23 10:28 编辑

JavaEE就业班day01-day06学习交流







到今天为止我们学习JavaEE已经有一个月了,在这一个月中我们在各位老师的陪伴下过这比较充实的学习生活。

下面我也对最近的JavaEE的学习做一个认真的总结:

第一天我们进行了前期知识的回顾和总结,学习了新的静态、代码块等。

static:
    * 含义
        * 静态
        * 是一个关键字
    * 作用
        * 修饰成员变量, 成员方法, 使其被该类的所有对象共享
        * 修饰类(后面讲)
    * 如何调用static修饰的变量和方法
        * `类名.静态成员属性`: `System.out`
        * `类名.静态成员方法();`: `Arrays.toString(arr);`
    * 静态的特点
        * 静态成员被所有对象共享
        * 静态成员可以直接使用类名调用
        * 静态成员的加载优先于对象
            * 静态资源在创建类时加载并初始化(在方法区中)
            * 非静态资源在创建对象时才加载并初始化(在堆内存中)
        * 静态成员生命周期
            * 随着类的加载而创建, 直到程序结束
静态的内存图解

生命周期不同
        * 静态成员: 随着类的加载而创建, 随着程序结束而销毁
        * 非静态成员: 随着对象的创建而创建, 随着对象的销毁而销毁
        * 所以, 静态成员的生命周期优先于非静态成员创建, 晚于非静态成员销毁
    * 内存中的定义位置不同
        * 静态成员: 方法区中类字节码区域的静态区中
        * 非静态成员: 堆内存中
    * 初始化时机不同
        * 静态成员: 类加载时初始化
        * 非静态成员: 对象创建时初始化

静态注意事项

注意:在静态的方法中没有this对象,因为静态的方法随着累的加载而加载优先于所有对象。
缺点:在静态的方法中只能用静态的成员
用static的时机:有一个数据所有的对象都要用它,而且用的数据类型和值都是一样的。

局部代码块
    位置:方法中
    执行时机:执行带方法中的局部代码块时
    存在于方法中控制变量的生命周期(作用域)
构造代码块
    位置    类中 方法外
    执行时机:创建一个对象时,在构造方法执行之前执行,无论是有参构造还是无参构造
    提取构造方法中的共性,每次创建方法都会执行,并且在构造方法方法之前提前执行
*静态代码块*
    位置:类中 方法外
    执行时机:加载类是执行,只执行一次
    随着类的加载而加载,只加载一次,加载类时需要做一些初始化比如加载驱动
同步代码块(多线程讲解)

继承:
    多个类有共同的成员,抽取到另外一个类中(父类)再让多个类去继承这个父类,
    我们的多个类就可以获取到父类中的成员了。可以提高程序的工作效率

关键字 extends
    作用:子类继承父类时使用
    位置:在子类类名后
    格式:class 子类名 extends 父类名{};

Java中继承的特点:
    Java语言只支持单一继承,只能继承一个父类
    Java语言支持多层继承。

变量使用原则:就近原则;有局用局,没局用子,没子用父亲,没父就错。

关键字:super 获取父类的成员变量和成员方法
方法的重写:在子类中子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),
    重写之后子类调用的就是子类中的方法
继承中成员方法的特点:
    子类中没方法调用父类
    子类中重写,调用子类
方法重写的应用场景
    父类的方法不能完全满足子类的使用,就要重写。
    并且可以使用关键字super调用父类的方法。
    这样做既有父类的功能,也有子类特有的功能
方法重写的注意事项
    不能重写父类私有的方法
    权限必须大于等于父类的权限
继承中构造方法的执行顺序
    在有继承关系的类中,创建创建子类的对象调用子类的构造方法,
    如果子类的构造方法的第一行代码没有调用父类的构造方法,则会默认调用父类的无参构造,
    肯定会先执行父类的构造,因为要先给父类的成员变量进行初始化,子类可能会使用到
**我们可以在子类的构造方法中使用super()来调用父类的构造方法
**在子类的构造方法中只要第一行代码中没有this或者super那就默认调用父类无参

this 和 super 的区别

this:  当前对象的引用
    调用子类的成员变量
    调用子类的成员方法
    在在的构造方法第一行调用子类其他构造方法
super: 子类对象的父类引用
    调用父类的成员变量
    调用父类的成员方法
    在子类的构造方法第一行调用父类的构造方法
继承:多个类共有的成员抽取到另外一个类中(父类),再让这个类去继承这个父类我们的多个类就可以获取到父类的-成员
    提高了代码的复用性和课维护性
    缺点:
    累的耦合性增强了
    开发的原则:高内聚低耦合;内聚:就是自己完成某件事情的能力;耦合;类与类的关系
匿名对象:没有名字的对象
应用场景:当方法只调用一次的时候可以使用匿名对象
注意:匿名对象可以调用成员变量并赋值,但赋值并没有意义,

关键字:final
final:修饰符,可以用于修饰类、成员
final所修饰的类,不能被继承,不能有子类
final修饰的方法不能被重写
final修饰的变量不可修改,是常量

常量:
    字面值常量:123....
    自定义常量:被final修饰的成员变量,一旦初始化则不可改变
注意:自定义常量必须初始化,可以选择显示初始化和构造初始化。

关键字    abstract(用于修饰方法和类)
抽象方法:不同类的方法是相似的但是具体的内容又不太一样,所有我们只能抽取他的申明,没有具体的方法体,没有具体方法体的的方法就是抽象方法   
抽象类:有抽象方法的类必须是抽象类

注意:一个类继承了抽象类需要重写他的所有抽象方法,否则这个类就是抽象类
抽象类的特点:
    抽象方法只能在抽象类里面
    抽象类和抽象方法必须被abstract修饰
    抽象类不能创建对象(不能实例化)
    抽象类中可以有非抽象的方法
    抽象类和类的关系也是继承
    一个类继承了抽象类要么重写所有方法要么他自己是抽象类
抽象类成员的特点
    成员变量:
    可以有成员变量
    可有常量
    成员方法:
    可以有抽象方法
    可以有非抽象方法
    构造方法
    可以有构造方法,给成员变量抽象类的成员变量初始化

抽象类的细节:
    抽象类的关键字不能和final、private公存
    抽象类中有构造函数,需要对成员变量初始化,子类的继承需要调用父类的构造方法
    抽象类中也可以没有抽象方法,没有抽象方法的作用是不让别人创建对象,抽象类的抽象方法不能实例化

接口:
接口的作用

    为实现类扩展出接口具有的功能
    弥补Java只能单一继承的局限性,抽象类只能单继承接口实现多实现
implements(实现)
interface(接口)
    接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法接口和类的关系是实现
格式:
    interface 接口名{}
接口的特点

    只能有抽象方法;
    只能有常量;
    默认使用public static final修饰变量(常量)
    默认且只能使用public&abstract修饰方法
   
建议:手动加public和abstract
**注意**
    不能创建对象(不能实例化
    类与接口的关系是实现关系,一个类的实现一个接口必须实现他所有的方法(因为所有的方法都是抽象方都是抽象方法)

     
    类与类:继承关系,单一继承,多层继承
    类与接口:实现关系,多实现
    接口与接口的关系,继承,多继承


接口的优点
    类与接口的关系,实现关系,而且是多实现一个类可以实现多个接口打破了局限性
    对外提供规则(USB)接口
    降低了程序的耦合性
接口和抽象类的区别
    共性:不断地抽取,抽取出抽象的概念
    区别:
    1:与类的关系
        类与接口是实现关系,而且是多实现,一个类可以实现多个接口
        类与抽象类的是继承关系,Java中的继承是单一继承,一个类只能有一个父类
    2:成员的区别
        成员变量:
        抽象类可以有成员变量,也可以有常量
        接口只能有常量
        成员方法:
        抽象类可以有抽象方法也可以有非抽象方法
        接口只能有抽象方法
        构造方法:
        抽象类有构造方法
        接口没有构造方法
多态的前提:
    子类的继承关系
    方法的重写
    父类引用指向子类对象

    动态绑定:运行期间调用的方法,是根据其具体的类型

多态的成员特点:
    编译时看的是左边,运行时成员方法看的是右边,其他(成员变量和静态方法)看的都是左边
    变量没有重写的概念,也没有动态绑定的问题
多态的向上转型和向下转型
    引用类型之间的转换
        向上转换
            由小到大
        向下转型
            由大到小

多态的有缺点
    缺点:无法直接问子类的特有成员
    优点,可以提高可维护性,(多态所保证的)提高代码的可扩展性
包的特点:
    可以有多层
    不同的包下文件名可以重复
    包的声明必须在第一行
不同包之间的访问
    使用类的全名
    使用关键字import将类导入

注意
    --*代表的是通配符,代表导入了这个包下的所有的类,并没有导入子包下的类

权限修饰符
    public 当前类,相同包下不同的类,不同包下的类
    default 当前类,相同包下的不同类(默认但是不要自己去写)
    private 当前类
    protected 当前类,相同包下不同类
    default:当前包下使用
    protected:让子类对象使用

常见规则(并不一定):
        类:
        使用public来修饰,一个Java文件中只有一个如果有多个类,类名和文件名一样的类必须用public修饰

        以后所有的成员变量都使用private修饰
        所有的方法都使用public修饰,不想让别的类访问就用private修饰,想让子类使用就用protected
        以后所有的构造方法public修饰    不想让创建对象就用private

内部类:
    成员内部类:
        位置:在类的成员位置,和成员变量及成员方法的位置是一样的
        使用时机:可以在外部类的成员方法中创建对象
        在内部类中,可以直接访问外部类的成员,包括私有成员

我们可以用权限修饰符来修饰成员内部类,private来修饰的只能在当前类中使用,其他类访问不到
我们可以使用static修饰成员内部类,不用创建外部类的对象了

也可以使用abstracted final修饰成员内部类




collection接口(集合的最顶层,是层次结构的最顶层,定义了一些规范和规则)
| boolean add(Object e)//返回Boolean值,永远为true因为ArrayList允许重复
| void clear()//清空集合
| boolean cotains(Object o)是否包含指定元素
| boolean isEmpty()是否为空有一个就返回false
| boolean remove(Object o)删除成功就true没有就返回false
| int size() 返回集合中元素个数
| Object[] toArray() 将集合转换成Object类型的数组(因为不知道什么类型)
|****
迭代器的概述
| Iterator:可以用来遍历集合
| E next() 返回下一个元素
| boolean hasNext()  :判断是否有元素可以获取
|Exception in thread "main" java.util.ConcurrentModificationException:并发修改异常
    迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则抛出异常
|泛型:是一种广泛的类型,把明确数据类型的工作提前到了编译时期,借鉴了数组的特点
* 泛型好处:
*             避免了类型转换的问题
*             可以减少黄色警告线
*             可以简化我们代码的书写
|- List
|    ListIterator:可以对集合进行增删改查操作
   ArrayList

LinkedList类(底层是链表, 查询慢, 增删快)
    void addFirst(E e): 添加元素到集合的开头
    void addLast(E e): 添加元素到集合的末尾
    E getFirst(): 获取集合开头的元素
    E getLast(): 获取集合末尾的元素
    E removeFirst(): 删除开头的元素, 并返回
    E removeLast(): 删除末尾的元素, 并返回









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2