一、靜態變量
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、一個方法不能讓對象參數引用另外一個參數。