Java关键字static概述,特点,使用时的注意事项

/*关键字   static*/

/*     定义一个人类
       姓名和年龄都是变化的,这个我能接受,因为每个人的姓名和年龄是不同的
	   但是,我们现在选取的几个人都是中国人,他们的国籍是一样的
	   一样的国籍,每次创建对象,在堆内存都要开辟这样的空间
	   我就觉的有点浪费。针对多个对象有共同的这样的成员变量值的时候
	   Java就提供了一个关键字来修饰:static

*/
class Person{
	//姓名
	private String name;
	//年龄
	private int age;
	//国籍
	private String country;
	
	//构造方法
	public Person(){};
	
	public Person(String name,int age,String country){
		this.name = name;
		this.age = age;
		this.country = country;
	}
	public void show(){
		System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
	}
}
class PersonDome{
	public static void main(String[] args){
		//创建对象1
		Person p1 = new Person("唐僧",20,"大唐");
		p1.show();
		//创建对象2
		Person p2 = new Person("孙悟空",1000,"大唐");
		p2.show();
		//创建对象3
		Person p3 = new Person("猪八戒",500,"大唐");
		p3.show();
	}
}

/*static的特点:(它可以修饰成员变量和成员方法)
  A:随着类的加载而加载
  B:优先于对象的存在
  C:被类的所以对象共享
       其实这个特点也在告诉我们什么时候使用静态
	       如果某个成员变量是被所有对象共享,那么它就应该使用静态
  D:它可以通过类名调用	  
         其实它本身也可以通过对象名调用
         推荐使用类名调用

        静态修饰的内容一般我们称其为:与类相关的,类成员
        非静态的称为对象成员		
*/
class Student{
	//非静态变量
	int num = 10;
	//静态变量
	static int = 20;
}
class StudentDemo{
	public static void main(String[] args){
		Student s = new Student;
		System.out.println(s.num);
		//直接类的调用
		System.out.println(Student.num2);
		//对象名的调用
		System.out.println(s.num2);
	}
}

/*
     static的注意事项
	   A:在静态方法中是没有this关键字的
	      如何理解?
		       静态是随着类的加载而加载的,this是随着对象的创建而存在
			   静态比对象先存在。
	   B:静态方法只能访问静态成员变量和静态成员方法
	       静态方发:
		           成员变量:只能访问静态变量
				   成员方法:只能访问静态成员方法
		   非静态方法:
                 成员变量:可以是静态的,也可以是非静态的
				 成员方法:可以是静态的成员方法,也可以是非静态的成员方法
           简单记:
                  静态只能访问静态,非静态的可以访问一切		   
*/
class number{
	//非静态的变量
	public int num = 10;
	//静态的变量
	public static int num2 = 20; 
	
	//非静态的方法
	public void show(){
	   System.out.println(num);//隐含的告诉你访问的是成员变量
	   System.out.println(this.num);//明确的告诉你访问的是成员变量
	   System.out.println(num2);
	}
	//静态的方法
	public static void method(){
		//无法从静态上下文中引用非静态的 变量 num
		System.out.println(num);//编译错误
		System.out.println(num2);
	}
	
}
class numberDome{
	public static void main(String[] args){
		//创建对象
		Number n = new Number();
		n.show();//输出结果;10,10
		n.methon();//输出结果;20
		System.out.println("---------");
		n.show();//输出结果;10,10,20
	}
}

你可能感兴趣的:(java,类,编程语言,多态)