Java三大修饰符

Java三大修饰符

1、static静态的

	静态成员 = 静态属性+静态方法		
  • 修饰属性

:被 static 修饰的属性称为 静态属性、静态变量、类变量,全类共有
语法:static 与访问权限修饰符的顺序无要求,都要在 数据类型之前
class 类型{
static 数据类型 属性名;
}
语法:对象.类变量
类名.类变量 —推荐使用 更符合类变量的特性
静态变量/静态属性/类变量是 依赖于类的变量,和创建多少对象没有关系,被每一个对象共享。
实例属性:属性的值跟随着对象走,每一个对象的这个属性值是不一样的
静态类属性:用来描述整个类的特征的

	static 属性和实例属性的差别: 
	static 属性在整个类中只有一份值,实例属性有多少个对象就有多少个值;
	static 属性在类加载的时候被实例化,实例属性在生成对象的时候被实例化;
	对静态属性的访问,直接通过类名去访问。
  • 修饰方法

:静态方法,静态方法中不能直接访问非静态的方法和属性
静态方法只能被静态方法覆盖,并且没有多态
静态的方法或者属性不依赖于对象:类名.方法名(属性名直接访问)
静态方法中不能使用 this 和 super 关键字
父类中的静态方法可以被子类继承 子类类名.父类静态方法名(实参);

  • 修饰静态代码块

:在类加载下执行 定义在类以内,方法以外,被 static 修饰的
static{
可执行代码:给静态属性赋值,声明局部变量,打印内容,调用静态方法…
}
作用:在一个类进行类加载时,会按照静态初始化代码块的声明顺序,依次执行里面
类加载:JVM第一次使用一个类的时候,通过classPath(类路径)找到所需要的 类对应的 .class 文件,
读取并获取类对应信息(包名、类名、属性、构造方法、成员方法、父类等信息),将类的信息保存到JVM内存中,
一个类类加载进行一次。

  • 第一次使用一个类:

     a. 第一次调用类中静态成员(静态属性和静态方法)
     b. 第一次创建一个类的对象:先进行类加载,再完成对象的创建
     c. 子类类加载 会 先 导致其父类进行类加载
     注意:只是声明引用,不会导致类加载
    

2、final最终的

  • 修饰变量

:变量包含:局部变量 成员(实例)变量 (静态)类变量
final修饰的变量,具有不可变性,也被成为常量:
不可变性:只可以被赋值一次
a.final修饰八种基本数据类型时,只能被赋值一次,值不可变
b.final修饰引用类型的变量时,只能被赋值一次,地址不可改,对象中的内容可改常量(值不可以改变,只能赋值一次),
修饰属性时,要么直接给初始值,或者在构造方法中赋值

  • 修饰方法:

final修饰的方法,被称为最终的方法,可以重载(依然遵循方法重载的语法要求),可以被继承 但不可以被 覆盖

  • 修饰类

:final修饰的类,被称为最终类(断子绝孙类) 不能被继承

3、abstract:抽象的

  • 修饰类


语法: abstract class 类名{

	 }
	抽象类类名 引用名 = new 子类类名(形参);强制使用多态	
	抽象类在编译过后也会生成.class文件
	有构造方法,但是不能创建对象
	抽象类可以有属性 也可以有普通的非抽象方法 
	抽象类可以被继承 但是其子类必须实现它所有的抽象方法,否则其子类仍然是一个抽象类
  • 修饰方法


语法:
修饰符 abstract 返回值类型 方法名();
抽象方法,只有声明,没有实现public abstract void m1();
访问权限修饰符 和 其他修饰符 都是修饰符所以没有顺序要求,但是都要写在方法的返回值类型之前
在子类中重写抽象方法时,和重写普通成员方法的语法要求是一致的
注意:
①抽象类中可以没有抽象方法
②如果一个类中有抽象方法,那么他必须是抽象类
③如果一个类继承了抽象类,但不想成为抽象类,那么这个类必须实现抽象类中的所有抽象方法

总结

  • (1) abstract 、static 、final 可以修饰哪些内容?

     abstract: 可以修饰类、方法
      static:可以修饰属性、方法、静态代码块
      final:可以修饰 变量(局部变量、实例变量、静态变 量)、方法、类
    
  • (2) abstract 、static 、final 都不能用于修饰构造方 法。

     ① abstract:抽象方法只能有方法的声明,没有方法实 现,实现部分让子类完成;
     但是构造方法是不能被子类继承,如果构 造方法被 abstract修饰,则子类无法完成构造方法的实现内 容。
     ② static:static 和对象没有关系,但是构造方法是 用于创建对象的,相互矛盾;
     同时static修饰的方法可以直接通过 类名.静态方法名(实参);但是构造方法不允许手动调 用。 
     ③ final:final方法是约束子类不能覆盖,但是构造方 法本身就不允许子类继承,谈不上覆盖。
    
  • (3) private、abstract、static、final是否能联合修饰成 员方法?

  • a. private 和 abstract:

     private 修饰的方法不能被 子类继承,asbtract修饰的方法需要通过子类覆盖给与方法的实现部 分,联合修饰一个成员方法,矛盾。 
    
  • b. static 和 abstract::

     static 修饰方法可以直接 通过类名调 用, 如果通过类名调用的是一个抽象方法 (半成品),jvm无 法执行,不能 联合修饰一个成员方法。 
    
  • c. final 和 abstract:

     final修饰的方法可以被子类 继承,但是不允 许被覆盖;而 abstract修饰的方法的实现需要通过子类 覆盖时给与实现。所以不能联合使用
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值