public class StaticTest
{
public static void main(String[] args)
{
System.out.println("\n\t\t如何实现静态方法调用非静态方法有哪些\n");
//开始调用,匿名调用!
new StaticTest().show();
//创建对象调用!
StaticTest st=new StaticTest();
st.show();
}
//非静态方法!
void show()
{
System.out.println("非静态方法show。..!");
}
}
public class StaticTest { public static void main(String[] args) { System.out.println("\n\t\t如何实现静态方法调用非静态方法有哪些\n"); //开始调用,匿名调用! new StaticTest().show(); //创建对象调用! StaticTest st=new StaticTest(); st.show(); } //非静态方法! void show() { System.out.println("非静态方法show。
..!"); }}。
静态方法与静态变量一样,属于类本身,而不属于那个类的一个对象。
调用一个被定义为static的方法,可以通过在它前面加上这个类的名称,也可以像调用非静态方法一样通过类对象调用。实例方法必须通过类的实例来使用。
实例方法可以使用类的非静态成员,也可以使用类的静态成员。类的静态方法,静态变量是在类装载的时候装载的。
但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以建议尽量少用静态变量。
尽量在静态方法中使用内部变量。 其中static关键字即表示静态的。
声明静态方法的语法如下:static返回类型 方法名(参数列表){//方法体} 静态方法与实例方法唯一不同的,就是静态方法在返回类型前加static关键字。静态方法的调用有两种途径:(1)通过类的实例对象去调用调用格式为: 对象名.方法名(2) 通过类名直接调用调用格式为: 类名::方法名 我们在使用时要注意:静态方法只能访问类的静态成员,不能访问类的非静态成员;非静态方法可以访问类的静态成员,也可以访问类的非静态成员;静态方法既可以用实例来调用,也可以用类名来调用。
#include 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. 没有属性的类,一般会定义静态方法,这样在使用时,通过类名::方法名即可调用,而不用先定义对象,再调用,这样可以省去一行代码。
package com.text_3;
//静态方法不能直接调用实例方法和变量,但可以间接调用(即在静态方法中创建类的实例,然后调用)
class Demo_12 {
public static void main(String[] args) {
Circle c=new Circle();
Demo_12 d=new Demo_12();
method1();//此处报错,静态方法不能直接调用非静态方法
d.method1(); //间接调用,无错
c.setRadius(5.0); //间接调用,无错
}
public void method1(){
method2();
}
public static void method2(){
Circle c=new Circle();
System.out.println("what is radius " +c.getRadius());
}
}
class Circle{
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
public class Test {
private int a;
public int getnumber() {
setnumber(8);
return this.a;
}
public int setnumber(int a) {
return this.a = a;
}
public static void main(String args[]) {
Test t = new Test();
// t.setnumber(10);
int a = t.getnumber();
System.out.println(a);
}
}
1、静态方法属于类所有,类实例化前即可使用;
2、非静态方法可以访问类中的任何成员,静态方法只能访问类中的静态成员;
3、因为静态方法在类实例化前就可以使用,而类中的非静态变量必须在实例化之后才能分配内存;
4、static内部只能出现static变量和其他static方法!而且static方法中还不能使用this等关键字,因为它是属于整个类;
5、静态方法效率上要比实例化高,静态方法的缺点是不自动进行销毁,而实例化的则可以做销毁;
6、静态方法和静态变量创建后始终使用同一块内存,而使用实例的方式会创建多个内存。
主要区别:静态方法在创建对象前就可以使用了,非静态方法必须通过new出来的对象调用。
如:
public class Per{
public static String getType(){
return "人类";
}
public String getName(){
return "张三";
}
}
上面这个类中的getType方法,在没有new对象前这就可以这样用:
String type=Per.getType();//type="人类";
而getName方法则不能这样使用,编译都不会通过
getName必须这样:
Per p=new Per();
String name=p.getName();//name="张三";
当然,getType方法也可能通过对象调用:
String type=p.getType();//type="人类";
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.314秒