java三大修饰符abstract,static,final

java三大修饰符

java三大修饰符,即抽象(abstract)、静态(static)和最终的,不可变(final)

一、抽象、抽象类

抽象: java中用abstract关键字来修饰抽象事物,从字面上可以理解为抽象既是朦胧,似是而非,像又却不是;具备某种对象特征,但又不完整。用abstract修饰的类称为:抽象类,同样被abstract修饰的方法称为:抽象方法。

那到底什么是抽象类呢?例如在我们生活中可以把动物当成是一个抽象类,动物可以有很多种,但是具体是什么样的我们并不知道,如我们在街上看到一只狗,此刻在我们脑中的主观反应就是一只“狗”,并不会说成是一只动物。即动物这个概念是个宽泛并且抽象的。同样的动物的各种行为也是各不相同,那么在程序中就是抽象方法。

如何创建,使用抽象类?

1.使用abstract关键字修饰

	abstract class Animal {
	int age;//年龄
	String sex;//性别
	
	//吃(抽象方法)
	public abstract void eat();  //抽象方法没有方法体
} 

2.通过子类继承并实例化对象

class Dog extends Animal{
	@Override
	public void eat() {			//重写抽象方法
		System.out.println("狗在吃狗粮");
	}
}
		Animal animal = new Dog()  //多态,
		animal.eat();  //输出"狗吃狗粮"

3.使用抽象类的注意事项:

  • 抽象类意为不够完整的类、不够具体的类,即不能实例化对象,必须通过子类来实现。
  • 子类继承了一个抽象父类,那么必须重写父类中的所有抽象方法,除非子类也声明为抽象类。
  • 抽象类中既可以有具体的实现方法(普通方法),也可以有没有具体的实现方法(抽象方法)
  • 抽象方法是没有具体的实现,即在定义时没有方法体(没有{})
  • 抽象方法不能使用private,final关键字修饰,否则产生冲突,即子类无法覆盖重写父类抽象方法。

二、static静态关键字

静态: 如果将一个类字段定义为static,那么每个类都只有一个这样的字段。而对于非静态的实例字段,每个对象都有自己的一个副本。即一旦用了static关键字,那么这样的内容不再属于对象自己,而是属于类的,所以凡是本类的对象都【共享】一份;

如何使用static静态关键字?

1.使用static修饰成员属性

public class MyStatic{
			   int a;   //实例属性
		static int b;   //静态属性			
}  
public class TestStatic{
	public static void main(String[] args){
			MyStatic  ms1 = new MyStatic();
			ms1.a=10;    
			ms1.b = 100;
			MyStatic  ms2 = new MyStatic();
			ms2.a =20;
			ms2.b = 200;
			System.out.println(ms1.a +"\t"+ms2.a);
			//输出结果为10,20
			System.out.println(ms1.b +"\t"+ms2.b);
			//输出结果为200,200
	}
}

即实例属性是每个对象各自持有的独立空间(多份),对象单方面修改,不会影响其他对象。而静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其它对象。

2.使用static修饰成员方法

	public class MyStatic{

		public  void  method1(){
					method2();    //成员普通方法可以访问静态方法
				System.out.println("成员普通方法");
		}	
		public static void  method2(){
//					method1();      静态方法不能访问非静态方法
				System.out.println("静态方法");
		}			
} 
public class TestStatic{
	public static void main(String[] args){
	//	静态方法可以不用创建对象,通过类名调用,而实例方法必须创建对象调用
				//method()1
				MyStatic.method2();
				MyStatic  ms1 = new MyStatic();
				ms1.method1();
				ms1.method2();//不推荐,使用对象名调用静态方法
	}
}

3.使用static修饰属性,方法的注意事项

  • 静态的总是优先于非静态的,静态是随着类的加载而被加载
  • 静态方法不允许访问非静态方法,因为静态加载时机更快,静态方法中不允许使用this或是super关键字;静态方法可以继承,不能重写、没有多态。(“后人知道先人,先人却不知道后人”)
  • 调用静态方法应使用类名的方式进行调用,虽然使用对象也可以,但是不推荐,容易造成混淆,因为静态跟实例对象并没有关系。

三、final关键字

final: 代表最终的,不可改变的。可以用来修饰类,变量,方法。

1.使用final修饰的类不可被继承,称之为“太监类”。
2.使用final修饰的方法不可被覆盖重写。
3.对于使用final修饰的成员变量来说,如果修饰的是基本数据类型,那么其值不可改变,且编译器不再提供默认值,必须手动赋值;且必须保证类当中所有重载的构造方法,都最终会对final的成员变量进行赋值。
4.final如果修饰的是引用数据类型,那么指的是其地址值不可变;

	final int[] a = {2,3,4,1};  
	System.out.println(a);  //[I@22f71333
	a[0] =8;
	System.out.println(a);   //[I@22f71333
	//final修饰的引用数据类型,所谓的最终不可变指的是他们的地址值不变,还是可以改变其变量值的

5.final可以与静态static使用修饰常量,作为全局常量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值