Java学习--三个修饰符

一、abstract

具备某种对象的特征,但不完整,例如animal就是一个抽象的概念,现实生活中没有生物叫做动物,所以animal不应该被创建成对象。
用abstract修饰的类,不能被new出对象,不能独立存在。

abstract class Animal{
	String breed;
	int age;
	String sex;
	public void eat(){
	System.out.println("动物吃");
	}
}

此类不能被new出来

1.抽象类的作用

  1. 可被子类继承,提供共性属性和方法。

  2. 可声明为引用,更加自然的使用多态。

  3. 抽象父类,可作为子类的组成部分,依附于子类对象存在,由父类共性+子类独有组成完整的子类对象。

2.抽象方法

父类提供的方法很难满足子类不同需求,如不定义,则表示所有动物都不会吃、睡。如定义,略显多余,多数会被子类覆盖。
也就是抽象方法的定义不具体实现功能,但在子类必须实现其特有的方法,且抽象方法必须在抽象类之中。

public abstract class Animal{
	String breed;
	int age;
	String sex;
	public abstract void eat();
}

子类中必须重写eat方法,或者子类也是抽象类,可以不重写eat方法。

二、static

1.静态属性

正常的对象的实例属性是单个对象所独有的,不会影响到其他对象。
用static修饰的属性是静态属性(类属性),它属性整个类共有的属性。

public class Student{
	static int count;
}

在调用时要使用如下方式调用

Student.count;//通过具体的对象也可以访问,但不建议。
静态属性在内存中只有一份,且存在与方法区之中。

来源于千锋教育

应用

可用来统计这个类的对象被创建多少次。

2.静态方法

之前用过的静态方法
Arrays.copyOf();
Arrays.sort();

即类名.静态方法名

静态方法特点

  1. 静态方法允许直接访问静态成员。
  2. 静态方法不能直接访问非静态成员。
  3. 静态方法中不允许使用this或是super关键字
  4. 静态方法可以继承,不能重写、没有多态。

3.静态代码块

class Myclss{
	static String s="静态属性";
	static{
	System.out.println(s);
	}
	public static void method(){
	}

类加载时,触发静态代码块的执行(仅一次),在静态属性初始化之后执行
作用:可谓静态属性赋值,过必要的初始行为。

类加载

JVM首次使用某个类时,需通过CLASSPATH查找该类的.class文件,从硬盘加载到内存中。
将.class文件中对类的描述信息加载到内存中,进行保存。
加载时机:

  • 创建对象
  • 创建子类对象(父类也被加载)
  • 访问静态属性
  • 调用静态方法
  • 主动加载:Class.forName(“全限定名”);

三、final

1.概念

最后的,不可更改的

2.用法

final可修饰的内容为

  1. 类(最终类)不可被继承
    • String、Math、System均为final修饰的类,不可被继承
  2. 方法(最终方法)不能被覆盖或重写
  3. 变量(最终变量)常量

final修饰类和方法

可以用来修饰你认为功能实现已经完善的方法,或者最低的类别(不可以在被继承的类),这样子类只可以使用被final修饰的方法,而不能重写。

final修饰变量

被修饰变量值不能被改变(常量),只能被赋值一次。

实例常量

就是给实例变量加上final修饰符,变成常量,被修饰的实例常量不在提供默认值,必须手动赋予初始值。
赋值的时机:显示初始化,构造方法。
注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值。(也就是实例变量如果没赋默认值,就要在所有构造方法中为其赋予正确值。

静态常量

为静态变量增加final变成静态常量
赋值的时机:
可在初始化时赋值,也可在静态代码块赋值。
即被final修饰过的变量,必须想办法在本类赋值,要不没有默认值,且只能赋值一次。

对象常量

final int num=100;

final修饰基本类型时,值不可变

final Student s=new Student();

修饰引用类型时:地址不可以改变,里面的元素可改变,例如数组中的值,但数组对象不可改变。

总结

三个修饰符
abstact,final,static
abstract可放在定义类和方法前,被修饰的类可被继承,不能被new出对象来,抽象方法必须在抽象类中,且如果子类也是抽象类可以不用重写方法,如果子类不是抽象类,必须重写方法。
final修饰的类和方法,必须是最后一个,不可已被继承,不可以被重写,变量都变成了常量,只可以赋值一次,且必须赋值,赋值之后不可以更改,基本类型常量,值不能变,引用类型的,地址不可以改变。如果同时是静态的,可以在静态代码块赋值。
static就理解成类加载后一直在内存中存在,没有final修饰的情况下,如果不赋值是有默认值的。在其他类中可通过类名.方法名/变量名赋值或修改。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值