菜鸟学习Java(3)

final、static等在类中使用的关键字总结

final

final单词的含义是最终的,在Java中final可以修饰类,方法,变量(实例变量,局部变量)。

1、final修饰类

  • final修饰类:说明类是最终的类,即类不能有子类。换句话说就是类不能被继承。

2、final修饰方法

  • final修饰方法:说明方法是最终的方法,即方法不能被子类重写。

3、final修饰变量(实例变量、局部变量)

  • final修饰变量:说明变量是最终的,即变量的值不能发生变化。变量也可看成常量(如果变量没赋值,有一次赋值机会)。
  • final修饰数组,数组地址不可变,若数组元素未被final修饰,数组元素可变

static

static单词的含义是静态的。在Java中static可以修饰属性、方法、代码块、内部类。—代码块、内部类以及static修饰他们,后面讲解。

1. static修饰属性

  • 如果属性用static修饰,那么这个属性不再是实例变量,而是类变量。
  • 实例变量,即实例的变量,有多少个实例就有多少个变量
  • 类变量,即类的变量,这个类所有的实例共用这个变量。
  • 被static修饰的属性,既可用对象访问,也可以用类访问。类属性应该使用类去访问,不要使用对象去访问(尽管可以)。

2、static修饰

  • 如果方法用static修饰,那么这个方法不再是实例方法,而是类方法。
  • 实例方法:实例的方法,即对象的方法。由对象来调用方法。有对象就有类,有类不一定有对象。
  • 类方法:类的方法,这个类所有的对象共用这个方法。
  • 被static修饰的方法,既可以被对象访问,也可以被类访问。类方法应该使用类去访问,不要使用对象去访问(尽管可以)。
  • 不能修饰构造方法,因为要this

3、静态方法中不能访问实例变量

  • 静态方法中,访问实例变量会报错。之所以报错是因为,静态方法是类方法,不是实例方法,因此访问实例变量的时候,不知道是访问的是哪个对象的实例变量。
  • 静态方法中,访问实例方法会报错。之所以报错是因为,静态方法中访问实例方法,不知道访问的是哪个对象的实例方法。
  • 静态方法中,不能使用this。this是一个代表当前方法调用者的对象。因为类通常是用类名调用的,不是具体的对象,所以不能用this。

4、类直接能调用static方法

  • 类名.方法名

5、静态方法不能被重写,可以重载,可被继承

6、静态方法(类)不能直接调实例方法(对象)要类名 对象名 = new 类名();,实例方法可以调静态方法

代码块

1、局部代码块

  • 定义在方法体内的代码块

    • 代码块外定义的变量可以在代码块中使用,但代码块内定义的变量不能在代码块外使用,即代码块内的变量作用域仅限于代码块内。
    • **局部代码块平时很少使用。**switch…case中具体的case可以使用,可以避免多个case定义相同的变量出现重名的问题。

2、初始化代码块

  • 初始化代码块是定义在类中的代码块。它和属性、方法、构造方法属于是一个层级的东西。由于通常用它来做初始化,所以叫做初始化代码块。

  • 作用

    • 1、可以为属性赋值----等价于构造方法。
    • 2、可以做公共初始化。----如果多个构造方法,他们有共同的代码,共同的代码可以提到初始化代码块中。
  • 特点

    • 1、初始化代码块定义格式和方法类似,只不过只有{},没有参数,没有返回值。
    • 2、初始化代码块不能主动调用,创建对象的时候自动执行,先于构造方法执行。
    • 3、一个类中可以有多个初始化代码块,写在上面的初始化代码块先执行。尽管可以定义多个,一般最多定义一个。

3、静态代码块

  • 用static修饰的代码块称为静态代码块。

  • 静态代码块是类的代码块,随着类的加载而调用,因为类只会加载一次,所以静态代码块也只执行一次。

  • 特点

    • 1、静态代码块的书写格式和初始化代码块的格式类似,在前面加一个static关键字即可。
    • 2、静态代码块不能主动调用,类加载的时候自动调用。因为类只加载一次,所以只调用一次。
    • 3、静态代码块可以有多个,写在上面的先执行。一般最多只写一个。
    • 4、静态代码块中不可以使用实例变量,不可以调用实例方法。
    • 5、静态代码块比初始化代码块先执行。

继承关系里,代码块的执行顺序

  • 在继承关系里,创建子类对象时,会先加载类,再创建对象。
  • 加载类时,先加载父类,再加载子类。— 类只有首次用的时候才加载,加载之后就一直在内存中。
  • 创建对象时,先执行父类的初始化代码块和构造方法,再执行子类的初始化代码块和构造方法。

abstract

  • abstract单词的含义是抽象。它可以用来修饰方法,也可以用来修饰类。被abstract修饰的类称为抽象类,被abstract修饰的方法称作抽象方法。
  • 有些时候,父类只是为了被子类继承,在用的时候,我们希望别人用子类,而不是用父类,这个时候,我们就可以把父类定义成抽象类。抽象类和普通类的唯一区别就是不能创建对象。
  • 抽象类属于类的设计层面上的问题。它是为了设计类而存在,不是为了创建对象而存在。它最佳的使用场景就是多态。
  • 抽象类声明子类必须要实现的方法(即自身的抽象方法),子类根据自己特征实现父类中声明的抽象方法。在创建和使用对象的时候,借助多态,用父类引用指向子类对象。这样可以充分发挥多态的优势。抽象方法:被abstract修饰的方法。抽象方法必须定义在抽象类中!
  • 抽象方法不能有方法实现!

访问修饰符

private

  • 同一个类中

缺省

  • 同一个包中

protected

  • 除了没有继承关系的其他包下的类。。

public

  • 所有类都可以访问

修饰类class

1、 public

2、 final

3、 缺省

4、 abstract

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值