面向对象—static关键字

一、static定义

   static它是静态修饰符,一般用来修饰类中的成员。

二、static特点

  1、被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量

  2、被static修饰的成员可以并且建议通过类名直接访问。

  3、定义对象的特有数据,和对象的共享数据
          对象的特有数据(非静态修饰),调用者只能是new 对象
          对象的共享数据(静态修饰),调用者可以是new 对象,也可以是类名

          被静态修饰的成员,可以被类名字直接调用

三、代码解释

  Person类,姓名和年龄是特有的,班级是共享的数据

package itcast.demo03;
/*
 * 定义一个Person类
 * 	定义对象的特有数据,和对象的共享数据
 * 	对象的特有数据(非静态修饰),调用者只能是new 对象
 * 	对象的共享数据(静态修饰),调用者可以是new 对象,也可以是类名
 * 
 * 	被静态修饰的成员,可以被类名字直接调用
 */
public class Person {
	String name;
	
	static String className;

}

Test类,对Person类进行测试

package itcast.demo03;

public class Test {
	public static void main(String[] args) {
		
		Person p1 = new Person();
		Person p2 = new Person();
		
		p1.name = "哈哈";
		//p2.name = "嘻嘻";
		
		System.out.println(p1.name);
		System.out.println(p2.name);
		
		//对象调用静态类的静态成员变量
		p1.className = "基础班";
		System.out.println(p2.className);
		//被静态修饰的成员,可以被类名字直接调用
		System.out.println(Person.className);
		
	}

}

打印结果为:

哈哈
null
基础班
基础班

四、static注意事项

1、静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。

2、同一个类中,静态成员只能访问静态成员

3、main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中

问题1:为什么在静态中不能调用非静态?
          答:生命周期所导致,静态优先于非静态存在于内存中
 
         静态:比喻为前人,前人不能调用后人
         非静态:比喻为后人,后人可以调用前人

问题2:static 修饰到底什么时候使用?应用场景?
                 static  修饰成员变量  成员方法
                   成员变量加static,根据具体事物,具体分析问题
     答:(1)定义事物的事物,分析多个事物之间是否有共性的数据
                那么将共性的数据定义为静态的成员变量

            (2)成员变量何时加static?跟着变量走

                  有静态变量参与的方法,就必须加静态;没有就不用加静态

             (3)没有定义变量的方法也需要加静态,如下代码

public static int getSum(int a,int b,int c) {
		return a+b+c;
	}

五、静态与多态的结合

多态的调用中,编译看谁,运行看谁
 *         编译都看 = 等号左边的父类,父类有,编译成功,没有则编译失败
 *         运行,静态方法,运行父类中的静态方法
 *         运行,非静态方法,运行子类的重写方法
 *         成员变量,编译运行全是看父类

问题:为何多态调用的是父类的静态方法?

答:静态属于类,不属于对象,对象的多态性,静态和对象无关,父类的引用.静态方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值