Java中的main方法調(diào)用非靜態(tài)方法處理
Java main方法調(diào)用非靜態(tài)方法處理
初學(xué)Java,對于main 方法調(diào)用非靜態(tài)方法所導(dǎo)致問題簡單的分析一下
1.問題描述
代碼
public class Object {
? ? public static void main(String[] args) {
? ? ? ? System.out.println(Object.totring());
? ? }
? ? public String totring() {
? ? ? ? return ("在" + Object.class.getName() + "類中寫totring()方法");
? ? }
}問題
java: Cannot make a static reference to the non-static method totring() from the type Base.oop.Object
2. 原因
簡單來說,main函數(shù)是靜態(tài)/static類型的,靜態(tài)類型都是和類/class一塊加載在內(nèi)存之中的,本質(zhì)上來講并不是該類的成員,在java虛擬機裝在類的時候,這些靜態(tài)的東西已經(jīng)有了對象,它只是在這個類中”寄居”,不需要通過類的構(gòu)造器(構(gòu)造函數(shù))類實現(xiàn)實例化;
而非靜態(tài)的屬性或者方法,在類的裝載是并沒有存在,需在執(zhí)行了該類的構(gòu)造函數(shù)后才可依賴該類的實例化對象存在,所以靜態(tài)函數(shù)不可以調(diào)用非靜態(tài)函數(shù),也不可以使用this關(guān)鍵字。
3.解決方法
解決方法一
根據(jù)原因,可以知道只有將非靜態(tài)方法實例化創(chuàng)建對象之后才可以調(diào)用其方法
public class Object {
? ? public static void main(String[] args) {
? ? ? ? Object xiaoming = new Object(); // 類實例化為對象
? ? ? ? System.out.println(xiaoming.totring()); //打印輸出,也可匿名化實例對象,直接是 ==> new Object().toString()
? ? }
? ? public String totring() {
? ? ? ? return ("在" + getClass().getName() + "類中寫totring()方法");
? ? }
}解決方法二
盡管靜態(tài)不可調(diào)用非靜態(tài),但靜態(tài)之間可以相互調(diào)用,那就把方法改為靜態(tài)方法
public class Object {
? ? public static void main(String[] args) {
? ? ? ? System.out.println(Object.totring());
? ? }
? ? public static String totring() {
? ? ? ? return ("在" + Object.class.getName() + "類中寫totring()方法");
? ? }
}main方法中如何調(diào)用非靜態(tài)方法
public class text1{
public static void main(String [] args){
int a = 12;
int b = 23;
text1 aa = new text1();
aa.add(a,b);
}
public void add(int a,int b){
System.out.println("計算的結(jié)果是:"+(a+b));
}
}main方法里面調(diào)用非靜態(tài)方法時,需要new一個對象,因為靜態(tài)方法,靜態(tài)類屬于模板,非靜態(tài)類和方法屬于對象。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud Eureka服務(wù)治理的實現(xiàn)
服務(wù)治理是微服務(wù)框架中最為核心和基礎(chǔ)的模塊,它主要是用來實現(xiàn)各個微服務(wù)實例的自動化注冊與發(fā)現(xiàn)。這篇文章主要介紹了Spring Cloud Eureka服務(wù)治理的實現(xiàn),感興趣的小伙伴們可以參考一下2018-06-06
spring 自動注入AutowiredAnnotationBeanPostProcessor源碼解析
這篇文章主要介紹了spring自動注入AutowiredAnnotationBeanPostProcessor源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03
Java8函數(shù)式接口Predicate用法示例詳解
這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
MyBatis-Plus自定義SQL和復(fù)雜查詢的實現(xiàn)
MyBatis-Plus增強了MyBatis的功能,提供注解和XML兩種自定義SQL方式,支持復(fù)雜查詢?nèi)缍啾黻P(guān)聯(lián)、動態(tài)分頁等,通過注解如@Select、@Insert、@Update、@Delete實現(xiàn)CRUD操作,本文就來介紹一下,感興趣的可以了解一下2024-10-10
Mybatis的TypeHandler實現(xiàn)數(shù)據(jù)加解密詳解
這篇文章主要介紹了Mybatis基于TypeHandler實現(xiàn)敏感數(shù)據(jù)加密詳解,Typehandler是mybatis提供的一個接口,通過實現(xiàn)這個接口,可以實現(xiàn)jdbc類型數(shù)據(jù)和java類型數(shù)據(jù)的轉(zhuǎn)換,需要的朋友可以參考下2024-01-01

