大数据预科班8

大数据预科班8

复习

  • 面向对象的特征:封装、继承、多态
  • 封装--体现形式:函数、属性私有化----复用性、安全性
  • 继承--extends,支持单继承---复用性、安全性、结构
  • 多态--重载、向上造型、重写(两等两小一等)
  • 权限修饰符:public、protected、默认、private;使用范围,从什么时候开始
  • super--在子类代表父类对象的引用,可以通过super来调用父类中的方法和属性;super语句,子类的每个构造函数会直接或间接有super语句,所以在创建子类时先会创建父类。

Static

  • 可修饰:变量、方法、代码块、内部类
  • 静态变量

static String hobby;

这个变量称为静态变量或类变量,类加载时在方法区中的静态区并赋予初值,由于静态变量是先于对象而存在的,
可以通过对象来调用,也可通过类名直接调用,
由于该类创建的所有对象存储的是静态属性在静态区中的地址值,所有静态属性是被所有对象所共享的。

静态属性尽量少用--共享导致不安全
1.静态变量可以定义在方法中吗? --不可以,静态变量是在类加载的时候加载并初始化,方法随类加载而加载到方法区,但没有执行,在方法被调用的时候执行
2.可以在构造函数中定义静态变量吗? --不可以,因为构造函数在创建对象时才被调用
3.可以在构造代码块中初始化静态变量吗 --可以(静态先加载,构造代码块后执行)
4.this调静态变量? --可以

静态方法

  • static可以修饰方法称之为静态方法或者类方法。随着类的加载而加载到方法区的静态区--只是存储在静态区
  • 静态区的元素不归属与某个对象,而是归属于类;静态方法属于类;比对象先存在
  • 例子:System.arraycopy();Arrays.toString();

1.System.out.println();不是静态方法//out是对象
2.静态方法中可以定义静态变量吗?--不可以,静态方法加载到静态区只是存储在静态区,并没有执行,被调用到时才会到栈内存才执行,方法执行才分配空间。
3.静态方法可以直接调用本类中的非静态方法吗?--不行(非静态方法和属性通过对象来调用,静态的先于对象存在)
4.主函数可以使用this吗?--不可以(static方法中不能用this)
5.静态函数可以重载吗?--可以(重载:方法名一致,参数不一致,不要求修饰符和返回值)
6.静态方法可以重写吗?--不可以(验证:@Overrid 上造型调用)
7.父子类可以存在方法签名完全一致的静态方法吗?--可以
8.父子类存在方法签名一致的时候,要么两者都是静态要么两者都是非静态。
- 重写和重载--多态针对的是对象,从对象的层面来看的;静态是从类层面来看的 - 多态针对的是方法而言的

静态代码块

class Demo{
    static{

    }
}
  • 在类内用static{}圈住的代码
  • 类加载的时候执行,且只执行一次
  • 实际上静态代码块是随着类的加载而加载到静态区,在类创建对象获得执行方法执行一次
  • 终其一生只执行一次
  • 本类执行顺序(静态代码块-》构造代码块-》构造函数)
  • 父子类执行顺序()

**静态优于对象而存在**
**父类优于子类而存在**
1. 创建子类前,先创建父类
2. 加载父类
3. 执行父类静态代码块
4. 执行子类静态代码块
5. 父类构造代码块
6. 父类的构造方法
7. 子类构造代码块
8. 子类构造方法

代码块与变量的定义上下位置:标记

例1:
    int i=5;
    {
        i=6;
    }
    结果i=6

例2: 
    {
        i=3;
    }
    int i=1;
    编译不报错,执行结果为i=1

例3:
    {
        i=1;
        i+=1;
    }
    int i=1;
    编译报错

final

  • 修饰变量,表示这个变量的值不可更改--常量
  • final修饰的值

package com.peng.demo;

public class DE1 {
    final int i;
}
编译出错


package com.peng.demo;

public class DE1 {
    final int i;
    {
        i = 9;
    }
}
编译通过
  • 在java中说的常量往往指的是静态常量(length、in、out,NaN非数字)
  • 注:函数调用时参数的性质可能会变
  • 对于基本类型来说,不可变;对于引用数据来说,地址不可变,数据可能变了。
  • 修饰函数--表示此方法为最终方法(该方法不能被重写,可以重载)
  • 静态方法可以用final修饰
  • final修饰类,表示这是一个最终类--这个类不能被继承(eg:String类,System类)

抽象类

  • 将一些名称一致,细节不同的行为提取到父类中定义为抽象方法,抽象方法所在的类就是抽象类
  • 抽象类不能创建对象,并且子类继承它必须实现其抽象函数,或者也定义为一个抽象类
  • 任何一个类都有构造函数,不管能不能创建对象
  • 抽象类中一定有抽象函数吗? 不一定
  • 抽象类可以有静态函数
  • 抽象类中可以定义普通方法
  • 把类中的公共方法提取,并且不用写方法体
  • 不能直接创建对象(可以使用匿名内部类【类】)

abstract class Pet{
    abstract void eat();
}
class Dog extends Pet{
    void eat(){

    }
}
  • 具体的类继承抽象类时,必须实现抽象类中的抽象方法,否则声明成抽象类
  • 抽象类与普通类区别:抽象类可以有抽象方法;抽象类不能创建对象。
  • 抽象方法可以和普通方法重载
  • 抽象方法不可用static修饰--因为静态方法不能被重写,抽象方法必然被重写
  • 抽象方法不能用final修饰
  • 抽象方法可以用默认修饰吗?--可以
  • 抽象方法可以用private修饰?--不可用

子类继承不到父类的

  • private属性、方法
  • 构造方法
  • 代码块(连名字都没有,哈哈)

接口

  • 所有方法都是抽象方法
  • interface声明一个接口
  • 规范作用(理解为模板)

interface a{
    public static final int PI=3.14;

    public abstract void add(int a):
}
  • 通过implements让类与接口产生联系,然后重写抽象方法
  • 接口不能创建对象--接口的多态(向上造型)
  • 接口中没有构造函数(interface cannot constructs)
  • 接口不是类
  • 接口能定义属性public static final 类型 变量 =值;
  • 接口定义的方法public abstract,不可以用其他来修饰

java支持单继承,多实现(用,隔开),但是有冲突

package com.peng.demo;

public class DE1 implements a, b {
    /*冲突
    @Override
    public int a() {
        return 0;
    }
    */
}

interface a {
    int a();
}

interface b {
    String a();
} 
  • 接口和接口可以继承,而且还是多继承(接口中的方法为抽象方法,没有方法体)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乘风御浪云帆之上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值