A. 实例方法可以直接访问静态成员
class A { static int b=3,c=4; public int sum() { return c+b; } public static void main(String [] args) { A a=new A(); System.out.println(a.sum()); } }
求采纳
B. 在C#中,类的Static成员可以通过该类的实例来引用吗为什么
static成员不能用类的实例来引用!只能用类来引用!就好比一个站点的访问量 整个网站访问都采用的整个数据,如果张三来了实例化一个站点访问量,李四来了实例化一个站点访问量,到底是张三的访问量正确还是李四的?访问量这个既不属于张三,也不属于李四属于所有的访问人员的共有的属性!
C. 怎么调用静态方法
静态方法不能访问非静态的实例变量和实例方法。实例方法可以访问静态成员和非静态成员。
1在本来中直接调用静态方法
2可以通过类名来调用该类的静态方法
3通过实例调用静态方法
// 外部类,不能是静态的
public class OuterClass {
// 静态方法,又称为类方法,属于Test类
public static void staticFun() {
}
// 非静态方法,又称为实例方法,属于Test类的具体实例
public void nonStaticFun() {
}
// 静态内部类,静态类只能是内部类
public static class StaticInnerClass {
// 静态方法,属于StaticInnerClass类
public static void staticFun() {
}
// 非静态方法,属于StaticInnerClass类的实例
public void nonStaticFun() {
}
}
// 非静态内部类,不能有静态方法
public class NonStaticInnerClass {
// 非静态方法,属于NonStaticInnerClass的实例
public void nonStaticFun() {
}
}
// 测试代码如下:
public static void main(String[] args) {
// 对于静态方法,使用类直接访问
OuterClass.staticFun();
StaticInnerClass.staticFun();
// 对于非静态方法,需要使用类的实例访问
new OuterClass().nonStaticFun();
new StaticInnerClass().nonStaticFun();
// 对于非静态内部类,必须创建外部类后才能使用
OuterClass outerClass = new OuterClass();
NonStaticInnerClass nonStaticInnerClass = outerClass.new NonStaticInnerClass();
nonStaticInnerClass.nonStaticFun();
}
}
D. 静态方法和实例方法的区别
静态方法和实例方法的区别主要体现在两个方面:x0dx0a x0dx0a在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。x0dx0a x0dx0a静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。x0dx0a x0dx0a下面几个例子展示了这一区别。x0dx0a x0dx0a1、调用静态方法示例。x0dx0a x0dx0a//-----------hasStaticMethod.java-----------------x0dx0apublic class hasStaticMethod{x0dx0a//定义一个静态方法x0dx0apublic static void callMe(){x0dx0aSystem.out.println("This is a static method.");x0dx0a}x0dx0a} x0dx0a下面这个程序使用两种形式来调用静态方法。x0dx0a//-----------invokeStaticMethod.java-----------------x0dx0apublic class invokeStaticMethod{x0dx0apublic static void main(String args[]){x0dx0ahasStaticMethod.callMe(); //不创建对象,直接调用静态方法 x0dx0ahasStaticMethod oa = new hasStaticMethod(); //创建一个对象x0dx0aoa.callMe(); //利用对象来调用静态方法x0dx0a}x0dx0a} 程序两次调用静态方法,都是允许的,程序的输出如下:x0dx0aThis is a static method.This is a static method. x0dx0a x0dx0a允许不创建对象而调用静态方法,是Java为了减少程序员调用某些常用方法时的麻烦,而允许程序员按照传统的C语言中使用函数的方式来使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"来获取随机数。x0dx0a还有一个很典型的代表就是数组的处理工具Arraysx0dx0a2、静态方法访问成员变量示例。x0dx0a x0dx0a//-----------accessMember.java-----------------x0dx0aclass accessMember{x0dx0aprivate static int sa; //定义一个静态成员变量x0dx0aprivate int ia; //定义一个实例成员变量x0dx0a//下面定义一个静态方法x0dx0astatic void statMethod(){x0dx0aint i = 0; //正确,可以有自己的局部变量sa = 10; x0dx0a//正确,静态方法可以使用静态变量x0dx0aotherStat(); x0dx0a//正确,可以调用静态方法x0dx0aia = 20; //错误,不能使用实例变量x0dx0ainsMethod(); //错误,不能调用实例方法x0dx0a}x0dx0astatic void otherStat(){} x0dx0a//下面定义一个实例方法 x0dx0avoid insMethod(){x0dx0aint i = 0; //正确,可以有自己的局部变量x0dx0asa = 15; //正确,可以使用静态变量x0dx0aia = 30; //正确,可以使用实例变量x0dx0astatMethod(); //正确,可以调用静态方法x0dx0a}x0dx0a} x0dx0a本例其实可以概括成一句话:静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。x0dx0a x0dx0amain()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。x0dx0ax0dx0a希望多多交流,多多关注,共同成就梦想
E. 静态方法的方法使用
静态方法与静态变量一样,属于类本身,而不属于那个类的一个对象。调用一个被定义为static的方法,可以通过在它前面加上这个类的名称,也可以像调用非静态方法一样通过类对象调用。
实例方法必须通过类的实例来使用。实例方法可以使用类的非静态成员,也可以使用类的静态成员。
类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以建议尽量少用静态变量。尽量在静态方法中使用内部变量。 其中static关键字即表示静态的。声明静态方法的语法如下:
<访问修饰符>static返回类型 方法名(参数列表)
{//方法体} 静态方法与实例方法唯一不同的,就是静态方法在返回类型前加static关键字。静态方法的调用有两种途径:
(1)通过类的实例对象去调用
调用格式为: 对象名.方法名
(2) 通过类名直接调用
调用格式为: 类名::方法名 我们在使用时要注意:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法既可以用实例来调用,也可以用类名来调用。 #include<iostream>using namespace std;
class CStaticTest{public:CStaticTest(int a){this->a = a;}~CStaticTest(){}
static int add(CStaticTest& c1, CStaticTest& c2){return c1.a + c2.a;}
private:int a;};
int main(){CStaticTest tmp1(1);CStaticTest tmp2(2);int sum1 = tmp1.add(tmp1, tmp2);int sum2 = CStaticTest::add(tmp1, tmp2);
cout << sum1 << endl;cout << sum2 << endl;return 0;} 1. 有静态属性的类,一般会定义静态方法。
2. 没有属性的类,一般会定义静态方法,这样在使用时,通过类名::方法名即可调用,
而不用先定义对象,再调用,这样可以省去一行代码。