Java中static关键字(静态)和main方法的格式讲解

static 关键字(静态修饰)
修饰的数据是被共享的
特点:
1.随着类的加载而加载
2.优先于对象存在
3.被类的所有对象共享——这也就是我们判断是否使用静态关键字的条件
4.可以通过类名调用

class person{
	private int age;
	private String name;
	static String guoji;//定义静态变量
	
	public void setPerson(int age,String name,String guoji) {
		this.guoji=guoji;
		this.age=age;
		this.name=name;
	}
	
	public void setPerson(int age,String name) {
		this.age=age;
		this.name=name;
	}
	
	public void show() {
		System.out.println("姓名:"+name+"---"+"年龄:"+age+"---"+"国籍:"+guoji);
	}
}
public class StaticDemo2 {
	public static void main(String[] args) {
	/*	person p1=new person();
		p1.setPerson(21,"张三", "中国");
		
		person p2=new person();
		p2.setPerson(20,"李四", "中国");
		
		person p3=new person();
		p3.setPerson(18,"王二", "中国");
		
		p1.show();
		p2.show();
		p3.show();
		System.out.println("--------------------------------------------------");*/
		
		/*person p1=new person();
		p1.setPerson(21,"张三", "中国");
		
		person p2=new person();
		p2.setPerson(20,"李四");
		
		person p3=new person();
		p3.setPerson(18,"王二");
		
		p1.show();
		p2.show();
		p3.show();
		System.out.println("--------------------------------------------------");*/
		
	/*	person p=new person();
		p.guoji="中国";
		
		person p1=new person();
		p1.setPerson(21,"张三");
		
		person p2=new person();
		p2.setPerson(20,"李四");
		
		person p3=new person();
		p3.setPerson(18,"王二");
		
		p1.show();
		p2.show();
		p3.show();
		System.out.println("--------------------------------------------------");*/
		
		person p1=new person();
		p1.setPerson(21,"张三", "中国");
		
		person p2=new person();
		p2.setPerson(20,"李四");
		
		person p3=new person();
		p3.setPerson(18,"王二");
		
		p1.show();
		p2.show();
		p3.show();
		System.out.println("--------------------------------------------------");
		
		p1.guoji="美国";//改变静态变量(这里不管是改成p1,p2,p3都是一样的)
		p1.show();
		p2.show();
		p3.show();
				
	}
}

 static注意事项
1.在静态方法中是没有this关键字的
2.静态方法只能访问静态的成员变量和静态的成员方法

静态变量和成员变量的区别
A:所属不同
1.静态变量属于类,所以也称为类变量
2.成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
1.静态变量存储于方法去的静态区
2.成员变量存储于堆内存
C:内存出现时间不同
1.静态变量随着类的加载而加载,随着类的消失而消失
2.成员变量随着对象的创建而创建存在,随着对象的消失而消失
D:调用不同
1.静态变量可以通过类名调用,也可以通过对象调用
2.成员变量只能通过对象名调用

class Static{
	int num1=10;
	static int num2=20;
	
	public void getNum1() {
		System.out.println(num1);
		System.out.println(this.num1);
		/*在成员方法中可以调用静态变量,而在静态方法中不能调用成员变量,因为成员方法比静态变量后加载进内存
		 	System.out.println(num1);
			System.out.println(this.num1);
			因为这两种写法是等价的,所以在静态方法中不能调用this关键字
		 */
		System.out.println(num2);
	}
	
	public static void getNum2() {
		System.out.println(num2);
	}
}
public class StaticDemo {
	public static void main(String[] args) {
		Static s = new Static();
		System.out.println(s.num1);
		//编译错误,因为成员变量不能通过类名调用
		//System.out.println(Static.num1);
		//而静态变量既可以通过类名调用,又可以通过对象调用
		System.out.println(s.num2);
		System.out.println(Static.num2);
		System.out.println("----------");
		
		s.getNum1();
		System.out.println("----------");
		s.getNum2();
	}

}

main方法的格式讲解:
public static void main(String[] args) {...}

public:公共的,访问权限是最大的,由于main方法是被jvm调用,所以权限要够大
static :静态的,不需要创建对象,通过类名就可以,方便jvm的调用
void:因为方法的返回值是返回给调用者的,而main方法是被jvm调用,所以返回内容给jvm没有意义
main:是一个常见的方法入口,几乎所有的语言都是以main作为入口
String[] args:字符串数组,在早期,是为了接受键盘录入的数据,但现在被Scanner代替。(了解)

发布了88 篇原创文章 · 获赞 47 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dai_ma_dong/article/details/95501503