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虛擬機(jī)裝在類的時(shí)候,這些靜態(tài)的東西已經(jīng)有了對象,它只是在這個(gè)類中”寄居”,不需要通過類的構(gòu)造器(構(gòu)造函數(shù))類實(shí)現(xiàn)實(shí)例化;
而非靜態(tài)的屬性或者方法,在類的裝載是并沒有存在,需在執(zhí)行了該類的構(gòu)造函數(shù)后才可依賴該類的實(shí)例化對象存在,所以靜態(tài)函數(shù)不可以調(diào)用非靜態(tài)函數(shù),也不可以使用this關(guān)鍵字。
3.解決方法
解決方法一
根據(jù)原因,可以知道只有將非靜態(tài)方法實(shí)例化創(chuàng)建對象之后才可以調(diào)用其方法
public class Object { ? ? public static void main(String[] args) { ? ? ? ? Object xiaoming = new Object(); // 類實(shí)例化為對象 ? ? ? ? System.out.println(xiaoming.totring()); //打印輸出,也可匿名化實(shí)例對象,直接是 ==> 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("計(jì)算的結(jié)果是:"+(a+b)); } }
main方法里面調(diào)用非靜態(tài)方法時(shí),需要new一個(gè)對象,因?yàn)殪o態(tài)方法,靜態(tài)類屬于模板,非靜態(tài)類和方法屬于對象。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Cloud Eureka服務(wù)治理的實(shí)現(xiàn)
服務(wù)治理是微服務(wù)框架中最為核心和基礎(chǔ)的模塊,它主要是用來實(shí)現(xiàn)各個(gè)微服務(wù)實(shí)例的自動(dòng)化注冊與發(fā)現(xiàn)。這篇文章主要介紹了Spring Cloud Eureka服務(wù)治理的實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2018-06-06spring 自動(dòng)注入AutowiredAnnotationBeanPostProcessor源碼解析
這篇文章主要介紹了spring自動(dòng)注入AutowiredAnnotationBeanPostProcessor源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java8函數(shù)式接口Predicate用法示例詳解
這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07MyBatis-Plus自定義SQL和復(fù)雜查詢的實(shí)現(xiàn)
MyBatis-Plus增強(qiáng)了MyBatis的功能,提供注解和XML兩種自定義SQL方式,支持復(fù)雜查詢?nèi)缍啾黻P(guān)聯(lián)、動(dòng)態(tài)分頁等,通過注解如@Select、@Insert、@Update、@Delete實(shí)現(xiàn)CRUD操作,本文就來介紹一下,感興趣的可以了解一下2024-10-10AJAX+JAVA用戶登陸注冊驗(yàn)證的實(shí)現(xiàn)代碼
這篇文章主要介紹了AJAX+JAVA用戶登陸注冊驗(yàn)證的實(shí)現(xiàn)代碼,通過ajax異步刷新頁面驗(yàn)證用戶輸入的賬號密碼是否在數(shù)據(jù)庫中存在。非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-06-06Mybatis的TypeHandler實(shí)現(xiàn)數(shù)據(jù)加解密詳解
這篇文章主要介紹了Mybatis基于TypeHandler實(shí)現(xiàn)敏感數(shù)據(jù)加密詳解,Typehandler是mybatis提供的一個(gè)接口,通過實(shí)現(xiàn)這個(gè)接口,可以實(shí)現(xiàn)jdbc類型數(shù)據(jù)和java類型數(shù)據(jù)的轉(zhuǎn)換,需要的朋友可以參考下2024-01-01