JAVA筆記【20131205】

一、靜態變量

Java中使用static修飾的變量,表明內存中只有一個該變量,在類中也即意味這該變量被類的各對象所共用。例如:

class Employee
{
	private int id ;
	private static int nextId = 1 ;
}

一般變量id與靜態變量nextId,有多少個Employee對象,就有多少個一般變量id,但只有一個靜態變量nextId,也即這些對象共用這一個nextId。


二、靜態常量

靜態常量一般用static final修飾,靜態常量只能初始化一次。類中的靜態常量可以直接使用類名.常量名調用。


import java.util.* ;
public class Test14
{
	static final Date sDate = new Date(); //初始化
	public static void main(String[] args)
	{
		System.out.println("s1="+sDate);
		//sDate = new Date();      //此處無法對靜態常量sDate再進行賦值,否則編譯時會報錯
		//System.out.println("s2="+sDate);
		sDate.setTime(1000000);    //但此處可以調用Date類自身的方法(本地方法)修改時間
		System.out.println("s3="+sDate);
	}
}

java.math.*中的PI以及java.lang.System中out等都屬於靜態常量。


三、靜態方法

靜態方法使用static修飾,靜態方法中不能訪問實例域,但可以使用自身類中的靜態域。靜態方法可以直接使用類名.方法名調用。

class Employee
{
	private int id ;
	private static int nextId = 1 ;
	
	public static int getId() //靜態方法
	{
		//return id;     //靜態方法中訪問了實例域id,編譯時會報錯。
		return nextId;   //靜態方法中使用自身類Employee中的靜態域nextId。
	}
}

使用靜態方法的情況:

1、當一個方法不需要訪問類狀態,所需參數都是通過顯示參數提供的。

2、當一個方法只需要訪問類的靜態域的。


四、main方法

關於Java中main方法是不對任何對象進行操作,再程序啓動的時候也沒有任何對象。靜態的main方法將執行並創建程序所需的對象。

每一個類都可以有一個main方法,這點可以用於單元測試中。

例如:Test16.java文件中類Test16和類Employee都有main方法,執行命令java Employee,則執行Employee類中的main方法。

            執行java Test16則Test16類中的main方法被執行,Employee類中的main方法永遠不會執行。


public class Test16
{
	public static void main(String[] args)
	{
		Employee staff1 = new Employee("wange",0002);
		String name = staff1.getName();
		System.out.println("name:" + name);
		int tempId = Employee.getNextId();
		System.out.println("tempId:" + tempId);
		Employee staff2 = new Employee("lisi",0003);
		name = staff2.getName();
		System.out.println("name:" + name);
		tempId = Employee.getNextId();
		System.out.println("tempId:" + tempId);
	}
}

class Employee
{
	public Employee(String name,int id)
	{
		this.name = name;
		this.id = id;
		nextId++;
	}
	
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public float getSalary()
	{
		return salary;
	}

	public void setSalary(float salary)
	{
		this.salary = salary;
	}
	
	public static int getNextId()
	{
		return nextId ;
	}
	private String name;
	private int id;
	private static int nextId = 0; 
	private float salary ;
	
	public static void main(String[] args)   //單元測試
	{
		Employee temp1 = new Employee("zhangs",0001);
		String name = temp1.getName();
		System.out.println("name:" + name);
		int tempId = Employee.getNextId();
		System.out.println("tempId:" + tempId);
	}
}

執行結果:



五、方法參數

Java中參數傳遞都是使用的值傳遞,也即方法所得的是所有參數值的一個拷貝,方法不能修改傳遞給它的任何參數變量的內容。

當然如果傳遞的參數是一個對象,該對象有修改內容的方法,則可以修改對象中內容,但不能讓對象參數引用一個新的對象。

例如:

public class Test17
{
	public static void main(String[] args)
	{
		int tempInt1 = 100;
		int tempInt2 = 99;
		Employee staff1 = new Employee("wange");
		Employee staff2 = new Employee("lisi");
		
		ExchangeInt(tempInt1,tempInt2);                    //tempInt1與tempInt2值並未交換
		System.out.println("tempInt1:" + tempInt1);
		System.out.println("tempInt2:" + tempInt2);
		
		ExchangeEpy(staff1,staff2);                        //對象staff1和staff2並未交換
		System.out.println("staff1:" + staff1.getName());
		System.out.println("staff2:" + staff2.getName());
		
		TestEmployee(staff1);
		System.out.println("staff1:" + staff1.getName()); //修改了對象staff1中的name值
	}
	static void ExchangeInt(int i,int j)
	{
		int temp = i;
		i=j;
		j=temp;
	}
	
	static void TestEmployee(Employee epy)
	{
		epy.setName("wangeUpdate");
	}

  static void ExchangeEpy(Employee epy1,Employee epy2)
  {
  	Employee tempEpy = epy1;
  	epy1 = epy2 ;
  	epy2 = tempEpy;
  }
	
}

class Employee
{
	public Employee(String name)
	{
		this.name = name;
	}
	
	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}
	private String name;
}

執行結果:



具體可以如下理解:


總結java中參數傳遞:

套用java2核心技術內的總結,

1、一個方法不能修改一個基本類型的參數。

2、一個方法可以修改一個對象參數的狀態。

3、一個方法不能讓對象參數引用另外一個參數。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章