A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Catherine.qing 中级黑马   /  2017-12-21 17:16  /  1746 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

就业班技术交流贴


day01


##静态 A: 被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
         B: 被static修饰的成员可以并且建议通过类名直接访问 访问静态成员的格式: 类名.静态成员变量名 类名.静态成员方法名(参数) C: 静态的加载优先于对象,随着类的加载而加载


静态的概述和特点


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


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


static的访问规则:
静态方法中
可以调用静态的成员变量
可以调用静态的成员方法
不可以调用非静态的成员变量
不可以调用非静态的成员方法
非静态方法中
可以调用静态的成员变量
可以调用静态的成员方法
可以调用非静态的成员变量
可以调用非静态的成员方法




代码块 1.局部代码块 2.构造代码块 3.静态代码块 4.同步代码块


day02


##
*继承的特点
Java中只支持单一继承,只继承一个父类(一个儿子只有一个亲爹)
Java支持多层继承(一个儿子只有一个亲爹还可以有一个亲爷爷)
*继承中成员变量的特点:
子类只能获取父类非私有成员
子父类当中成员变量的名字不一样直接获取父类的成员变量
子父类中成员变量名字是一样的获取的是子类的成员


就近原则:谁离我近我就用谁
如果有局部变量就要局部变量
如果没有局部变量,有子类的成员变量就用子类的成员变量
如果没有局部变量和子类的成员变量,有父类的成员变量就使用父类的成员变量
啥都没有,就出错了!!!


super:可以获取父类的成员变量和成员方法,用法和this相似


继承中成员方法的特点:
子类中没有这个方法:调用父类
子类中重写了这个方法:调用子类的


方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重新了父类的方法(覆盖)
    当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
方法的重载:在一个类中,有多个重名的方法,但是其参数不一样
(参数的个数,参数的类型,参数的顺序)


**方法重写的应用场景:
1.当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法
2.并可以在方法中使用关键字super调用父类的方法,这样做既可以保有父类的功能,
   也可以拥有子类持有的功能
**方法重写的注意事项:
不能重写父类私有的方法
权限必须大于等于父类方法的权限
*注解:@


继承中构造方法的执行顺序
* 在子父类中,创建子类对象,调用子类的构造方法,
* 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造
* 为什么要调用父类构造?
* 因为需要给父类的成员变量初始化
* 肯定会先把父类的构造执行完毕,在去执行子类构造中的其他代码
*
* 我是父类无参构造 --- 我是子类有参构造 --- 我是子类无参构造


this和super的区别
this:当前对象的引用
调用子类的成员变量
调用子类的成员方法
在子类的构造方法第一行调用子类其他构造方法
super:子类对象的父类引用
调用父类的成员变量
调用父类的成员方法
在子类的构造方法第一行调用父类的构造方法


##继承的优缺点:
*优点:提高了代码的复用性和可维护性
*缺点:类的耦合性增强了
  开发的原则:高内聚低耦合
  内聚:就是自己完成某件事的能力
  耦合:类与类的关系


** 匿名对象:没有名字的对象
* 匿名对象的应用场景:
* 当方法只调用一次的时候可以使用匿名对象
* 可以当作参数进行传递,但是无法在传参之前做其他的事情
*
* 注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义


final关键字:
    * 是一个修饰符, 可以修饰类, 方法, 变量, 表示其无法改变
    * 作用:
        * 修饰类: 不能被继承
        * 修饰方法: 不能被子类重写
        * 修饰变量: 自定义常量
            * 基本数据类型: 其值永不改变的常量
            * 引用数据类型: 引用一经初始化便不能修改, 且必须在使用前对其初始化
* 常量分类:
    * 字面值常量: 之前所学的如`"Hello"`, `12`
    * 自定义常量: final修饰的
        * 常量名命名规则: 字母全都大写, 不同单词用下划线分隔, 如`YOUR_AGE`


## 抽象类概述


* 什么是抽象?
    * 无法具体描述的, 但能够表示出共性
* abstract关键字:
    * 表示抽象
    * 修饰方法和类
* 抽象包括2种:
    * 抽象方法:
        * 使用abstract修饰, 没有方法体的方法, 也就是说没有`{...}`, 直接以`;`分号结尾
        * 为什么没有方法体? 某些方法对于不同子类有不同实现, 如动物的吃方法, 松鼠抱着吃, 螃蟹夹着吃
        * 抽象方法的修饰符只能是: public 或 protected
    * 抽象类:
        * 使用abstract修饰的类
        * 含有抽象方法的类**必须**定义为抽象类
* 类与抽象类的关系:
    * 抽象类也是类
    * 一个子类继承了抽象类后只有2种选择:
        1. 重写抽象类中抽象方法(可以是空实现),
        2. 将该子类也改为抽象类


## 抽象类的特点


* 抽象类的特点
    * 抽象类和抽象方法必须被abstract修饰
    * 抽象方法只能定义在抽象类中
    * 抽象类中也可以有非抽象的方法, 且也可以只有非抽象方法
    * 抽象类不能创建对象 (即不能实例化, 不能new)
        * 因为抽象类中有抽象方法不应该被对象调用
        * 但可以定义构造方法, 在子类创建对象时调用默认的super来执行抽象类的一些初始化操作
    * 抽象类和类之间也可以存在继承关系
    * 一个类继承了抽象类只有2种操作:
        * 重写抽象方法
        * 自身改变为抽象类


## 抽象类的成员特点


* 抽象类中
    * 成员变量
        * 可以有成员变量
        * 可以有常量
    * 成员方法
        * 可以有抽象方法
        * 可以有非抽象方法
    * 构造方法
        * 可以有构造方法, 用于子类通过调用`super();`使抽象类的成员进行初始化


## 抽象类的细节


* abstract不能与以下关键字共存
    * final
        * 抽象方法必须要重写, 而final指定方法不能被重写
        * 抽象类要继承, 而final指定类不能被继承
    * private
        * 抽象方法必须是非private的, 否则子类无法访问到, 从而无法重写
* 抽象类不能创建对象, 但可以有构造方法来进行初始化
* 抽象类可以没有抽象方法
    * 有时会将一个类定义为抽象类, 来防止创建对象
    * private修饰构造方法也可以用于防止创建对象




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马