java学习笔记3>static关键字知多少

今天继续来分享一下学习经验

static是一个常见的修饰符,它只能用于修饰在一个类里面定义的成员,如变量,方法,内部类,初始化语法块,内部枚举类。

它的作用就是将上述在类里定义的成员变成静态成员,也就是说所谓的类成员。

我们要知道所有被static修饰的成员都属于类,而不是单个的java对象。


静态方法

我们可以来看看下面的程序,关于被static修饰的静态方法

class Person{
    public static void test(){
	   System.out.println("Person的test方法");
	}

}

class Student extends Person{
    
	@Override //1
    public static void test(){
	   System.out.println("Person的test方法");
	}
   public static void main(String[] args){
     Person person = new Person();
    	 person.test();
     Person student = new Student();
	     student.test(); 
   }
}


请注意,此时上面的程序会有错,因为static修饰的方法属于类本身,是不允许子类去继承父类的静态方法的,所以如果在1 处加上@Override注释的话表明该方法是重写父类的test方法,因此编译是不通过的,应该注释掉该行代码




此外有人会疑惑,那Student中的test方法不是和父类同名吗?请记住,在子类中的test方法,由于java不允许子类继承该方法,因此该方法只是子类中声明的一个普通的静态方法,该方法同样也无法给该类的子类继承


修改过来之后编译通过并且输出结果如下:


由于两次的声明都是使用Person类来声明的对象,虽然两个对象一个是Person的实例,一个是Student的实例,但是静态方法都是属于类,因此当两个对象调用类方法时,java会自动通过声明该对象的类去调用类方法,故两次都是调用Person类的test方法,如果没有static修饰符,则两个对象就会调用自己的成员方法,因为成员方法是属于对象的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值