⑴ 在java中調用非靜態方法
在一個類中創建一個這個類的對象,像這樣:類 對象 = new 類();
然後用 對象.goAhed(這里傳一個String類型的數組) 就可以了。
⑵ java靜態方法與非靜態方法有什麼區別
靜態方法和非靜態方法的區別總結如下:
1、靜態方法屬於類所有,類實例化前即可使用;
2、非靜態方法可以訪問類中的任何成員,靜態方法只能訪問類中的靜態成員;
3、因為靜態方法在類實例化前就可以使用,而類中的非靜態變數必須在實例化之後才能分配內存;
4、static內部只能出現static變數和其他static方法!而且static方法中還不能使用this等關鍵字,因為它是屬於整個類;
5、靜態方法效率上要比實例化高,靜態方法的缺點是不自動進行銷毀,而實例化的則可以做銷毀;
6、靜態方法和靜態變數創建後始終使用同一塊內存,而使用實例的方式會創建多個內存。
主要區別:靜態方法在創建對象前就可以使用了,非靜態方法必須通過new出來的對象調用。
靜態方法與實例方法在性能和佔用內存上沒有明顯的區別,是否聲明為靜態方法需要從類型的非靜態欄位、事件、面向對象擴展和多態這三方面來考慮。
⑶ java中如何在靜態方法中實現對非靜態方法的調用,請問各位有沒有具體的例子。
public class A{
//類A中非靜態方法
public void func(){ ...... }
//類A中靜態方法(主函數)
public static void main(String[] args){
A a=new A();//需實例化A的對象後才可以調用A中非靜態方法
a.func();
}
如上面這個簡單的例子,靜態方法對非靜態方法發起調用時,需實例化包含非靜態方法的類的對象。如果類A中靜態方法需調用類B中非靜態方法時,也需實例化B的對象。
原因解釋:類中靜態的方法或者屬性,本質上來講並不是該類的成員,在java虛擬機裝在類的時候,這些靜態的東西已經有了對象,它只是在這個類中"寄居",不需要通過類的構造器(構造函數)類實現實例化;而非靜態的屬性或者方法,在類的裝載是並沒有存在,需在執行了該類的構造函數後才可依賴該類的實例對象存在。所以在靜態方法中調用非靜態方法時,編譯器會報錯(Cannot make a static reference to the non-static method func() from the type A)。
不知這么說你懂了沒,如果還有什麼不懂可以繼續問我。
⑷ java 靜態方法可以調用非靜態方法嗎
//必須可以!
publicclass非靜態方法
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========java靜態方法可以調用非靜態方法嗎!========== ");
init();
}
//測試案例,靜態方法!
privatestaticvoidinit()
{
//這里調用下面的,看控制台輸出!
new非靜態方法().show();
//很好調用,創建對象即可!
}
//測試2,非靜態方法!
privatevoidshow()
{
System.out.println("show--是非靜態方法!");
}
}
⑸ 為什麼java提供的非靜態方法可以直接在靜態主方法里使用比如charAt()
非靜態方法的使用,必須有個對象存在。而 比如 "ABC" 之類就是實體類。靜態方法中也可以創建實體類,或者把實體類作為參數。
所以charAt(),肯定是作為某個實體類的方法被調用的。這個完全沒有問題。
⑹ java非靜態方法里可以調用靜態方法嗎
靜態static方法中不能調用非靜態(non-static)方法,准確地說是不能直接調用non-static方法。但是可以通過將一個對象的引用傳入static方法中,再去調用該對象的non-static方法。
其實這個事實的應用很經常,以至於我們不去重視:
在主函數(static方法)中我們經常創建某個類的實例,再利用其引用變數調用它的非靜態方法。
⑺ java非靜態成員變數中的基本變數到底存在哪裡
其實我覺得書上就想說:基本數據類型創建的值存在棧內存中,引用數據類型的值存在堆內存中,
配合上圖詳解:基本數據類型 int i=3;就是在棧內存中開個房子給 i,名字叫 i , 裡面住著 3 。而 引用數據類型 String str="abc" 就是棧內存給它開後院,叫 str 去 堆內存地址為 0x2253的地方去住,所以引用類型的值存在 堆內存中,而棧內存中存的是它住的房號,也就是值所在的堆內存地址。
這樣說不知道你能不能理解。但我想說:圖自己畫的,文字自己敲的,如果有錯,請尊重回答者。
⑻ 關於java中的靜態方法和非靜態方法
靜態方法屬於類的。一般情況下寫一些工具方法,跟自己定義的對象無關的方法。強烈不建議用對象去調用靜態方法。具體的你可以看下java虛擬機。
⑼ java主方法如何調用非靜態方法
java主方法調用非靜態方法的步驟:
1、新建一個類,本例類名「NoStaticMethod」,聲明一些成員變數,創建一個主方法main(),一個非靜態方法Method_1()。
2、類的全部代碼。
** * Created by Administrator on 2016/7/25.
*/
public class NOstaticMethod {
//satement new variable name: studentName
public static String studentName = "xxx";
//satetment new variable nmae: country
public static String country;
//satement new variable name: nation
private static String nation;
//satement new variable name: subject
public String subject = "物理";
//satement new variable name: school
private String school;
//create main method
public static void main(String[] args) {
//NOstaticMethod.Method_1(); 在靜態方法main中是不能直接調用非靜態方法Method_1的
//只能通過創建類的對象,再由對象去調用成員方法以及成員變數。
NOstaticMethod wangyan = new NOstaticMethod();
//call methol
wangyan.Method_1();
// String physics= subject;在靜態方法中也是不能訪問非靜態成員變數的
//call not static variable
String physics = wangyan.subject;
System.out.println("在主方法main()中只能通過對象來調用非靜態成員變數subject:" + physics);
}
//create new method name: Method_1()
public void Method_1() {
System.out.println("Method_1是一個公共的、非靜態的方法");
System.out.println("在非靜態方法Method_1中訪問靜態成員變數「學生姓名」(studentName):" + studentName);
System.out.println("在method_1中直接調用非靜態成員變數subject:" + subject);
}
3、運行結果
Method_1是一個公共的、非靜態的方法
在非靜態方法Method_1中訪問靜態成員變數「學生姓名」(studentName)
在method_1中直接調用非靜態成員變數subject(科目)
在主方法main()中只能通過對象來調用非靜態成員變數subject
4、分析代碼
public static void main(String[] args) {
//NOstaticMethod.Method_1(); 在靜態方法main中是不能直接調用非靜態方法Method_1的
//只能通過創建類的對象,再由對象去調用成員方法以及成員變數。
NOstaticMethod wangyan = new NOstaticMethod();
//call methol
wangyan.Method_1();
// String physics= subject; 在靜態方法中也是不能訪問非靜態成員變數的
//call not static variable
String physics = wangyan.subject;
System.out.println("在主方法main()中只能通過對象來調用非靜態成員變數subject:" + physics);
}
⑽ java中什麼是非靜態方法
用Static修飾的方法叫靜態方法 那麼不用它修飾的當然就是非靜態方法了,非靜態方法需要創建對象並初始化後才可以使用。