IEwuIL7
2019-11-19 15:38
public class Staticlearn {
static int score1 = 66; //定义静态变量
static int score2 = 99;
public static int sum(){ //定义静态方法
int sum = score1 + score2;
return sum; //返回值
}
public int show(){
//System.out.println(sum); 普通成员方法需要会报错
int show = sum();
System.out.println(score1); //普通成员方法可以直接访问静态变量或非静态变量
return show;
}
public static void main(String[] args){
Staticlearn object = new Staticlearn(); //创建类的对象
int allScore = object.show(); //静态方法访问普通成员方法???
System.out.println(allScore);
}
}
我梳理了一份序列,求大佬帮我看看是不是对的~
static静态方法
-静态变量 (直接访问)
-非静态变量 (创建类的对象访问)
-静态方法 (直接调用)
-非静态方法 (创建类的对象访问)
普通成员方法
-静态变量 (直接访问)
-非静态变量 (直接访问)
-静态方法 (通过对象调用)
-非静态方法 (直接访问)
这是我的测试流程,如果有问题欢迎指出,谢谢大家的帮助( •̀ ω •́ )y
public class Test{ static int s1 = 7; static int s2 = 9; //定义两个静态变量 int n1 = 5; int n2 = 6; //定义两个普通变量 public static int Ssum(){ Smethod(); //静态方法 直接访问 静态方法 OK Ssum(); //静态方法 直接访问 普通方法 [失败]报错 int sum1 = s1 + s2; //静态方法 直接调用 静态变量 OK int sum2 = n1 + n2; //静态方法 直接调用 非静态变量[失败}报错 } public static void Smethod(){ Test smd = new Test(); //创建类的对象 smd.Nsum(); //静态方法 通过对象访问 普通方法 OK int sum6 = smd.n1 + smd.n2; //静态方法 通过对象调用 普通变量 OK } public void Nsum(){ Ssum(); //普通方法 直接访问 静态方法 OK Nmethod(); //普通方法 直接访问 非静态方法OK int sum3 = s1 + s2; //普通方法 直接调用 静态变量 OK int sum4 = n1 + n2; //普通方法 直接调用 非静态变量 OK } public void Nmethod(){ } public static void main(String[] args){ } }
我得出的结论是:
因为程序优先加载静态,所以静态互相访问和调用OK,此时普通成员还未加载 ,所以报错。
通过创建类的对象,把普通成员方法加载出来,此时静态访问和调用OK。
普通成员最后加载,场上所有成员都已出现,所以直接访问OK
题主你就没有定义静态方法啊,main函数不算
我也是刚入门,对于你所提的,不知我下面的笔记是否能解答!
普通成员方法:
静态变量 (直接访问)
-非静态变量 (直接访问)
-静态方法 (直接调用)
-非静态方法 (通过对象访问)
/静态方法:
public static void print() {
System.out.println("静态方法调用执行==");
//静态方法可以直接调用同类中的静态成员:
System.out.println("调用同类中的静态成员:"+ hello);
//不能直接调用非静态成员:
//System.out.println("调用静态成员"+ vae);
//通过对象来调用非静态成员,对象必须是在方法体内创建才有效调用,在方法体外创建的类对象调用非静态成员是无效的
tesedemo tesed = new tesedemo();
System.out.println("通过对象调用非静态成员:" + tesed.vae);
}
//==================================================================================
//普通成员的方法中,可以直接访问同类中的 非静态变量与 静态变量:
public void pel() {
String huy = "方法体中的非静态变量";
// 普通方法体内调用静态方法是允许的
print();
//普通方法可以直接访问同类中的 静态变量
System.out.println("普通方法访问 静态变量:"+ hello);
//调用普通方法须通过类的对象调用,在方法体内可直接访问非静态变量
System.out.println("普通方法访问非 静态变量:"+ huy);
//调用普通方法须通过类的对象调用
System.out.println("调用普通方法须通过类的对象调用");
// 注: 因程序入口"main" 是静态方法,在调用普通方法时必须是对象调用。而定义的静态方法可直接访问方法名
Java入门第二季 升级版
530649 学习 · 6091 问题
相似问题