码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA学习第九课(关键字二static)

时间:2014-09-12 02:25:32      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:style   color   os   使用   java   ar   strong   数据   sp   

关键字二、 static(静态)


特点:
static 用于修饰成员(成员函数和成员函数)

static的存在,优先于对象存在,随着类的加载而加载

static所修饰的成员,被所有对象共享

static可以直接被类名调用,格式:System.out.println(Person.country);:类名.静态成员

使用细节

静态方法只能访问静态成员,即static修饰的成员,static int data;

静态方法不可以写this、super:this代表着当前调用该方法的对象。

主函数(main)是静态的 : public static void main(String[] args)


import java.util.Scanner;

import javax.naming.ldap.SortControl;
class Person
{
	String name;//成员变量/实例变量
    static String country = "CN";//静态变量/类变量
	public void show () 
	{
		System.out.print(country+" : "+name);
	}
}
public class Main
{
	public static void main (String[] args) 
	{
		Person BLF = new Person();
		Scanner cin =  new Scanner(System.in);
		//BLF.name = cin.nextLine();
		BLF.name = "BLF2";
		BLF.show();
		System.out.println(Person.country);//static 共享,可以直接用类名输出
		                                   //但是不可滥用,有些数据毕竟是特有的,不是共享的
  					   	   //比如中国人 ,国籍是共享的,但是姓名是特有的
		
		cin.close();
	}
	
}


成员变量和静态变量的区别:


1.两者生命周期不同。静态的生命周期长


成员变量随着对象的创建而存在,随着对象的释放而释放,即成员变量的存在取决于对象的存在与否
静态变量随着类的加载而加载,随着类的消失而消失


2.调用方式不同
成员变量只能被对象调用
静态变量可以被对象调用,可以用类名调用,所以有static修饰的成员,最好用类名调用,清晰,且不用创建对象

3.
成员变量称为实例变量
静态变量称为类变量


4.两者存储位置不同
成员变量存储在堆内存的对象中,所以也叫对象的特有数据(堆里不肯能放变量,只能放实体,实体里可以有变量)
静态变量的数据存储在方法区(数据区/共享区)中的静态区,所以也叫对象的共享数据


static在使用过程中的细节:


1.访问有局限性:static修饰的方法只能访问static修饰的成员


错误代码:
import java.util.Scanner;


import javax.naming.ldap.SortControl;
class Person
{
	String name;
    static String country = "CN";
	public static void show () 
	{
		System.out.print(country+" : "+name);//因为有没有static修饰的成员name
		//System.out.print(country+");//所以不能有name
	}
}
public class Main
{
	static int data = 9;
	public static void main (String[] args) 
	{
		Person BLF = new Person();
		Scanner cin =  new Scanner(System.in);
		//BLF.name = cin.nextLine();
		BLF.name = "hello";
		BLF.show();
		
		cin.close();
	}
}

所以,static修饰的成员可以不用对象,直接用类名调用,因为对象还不存在,所以name自然也就不存在
(非静态既可以访问静态,又可以访问非静态)



2.主函数是静态的。

public class Main
{
	static int data = 9;//静态修饰成员变量
	public static void main (String[] args) 
	{
	       show();
	}
	public void show() //此处如果想要调用,必须用静态修饰方法,data不加静态,叫做特有数据
        //public static void show()//此方式可以访问static修饰的data
	{
		System.out.println(data);
	}
}

想访问特有数据data,所以想要调用一个show方法,可以用对象调用

public class Main
{
	int data = 9;//静态修饰成员变量
	public static void main (String[] args) 
	{
		Main BLF = new Main();
	       BLF.show();
	}
	public void show()
	{
		System.out.println(data);
		//也可以System.out.println(Main.data);//Main.  可以省略
	}
}

故,主函数用来指挥其他对象工作,把代码封装到函数中,再把函数封装到每个类中,main只需要创建那么对象,指挥那么对象工作即可


未完。。。


JAVA学习第九课(关键字二static)

标签:style   color   os   使用   java   ar   strong   数据   sp   

原文地址:http://blog.csdn.net/wjw0130/article/details/39218149

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!