首页 > 代码库 > static
static
一:静态函数:用于变量前,表示每次重新使用该变量所在的方法,类,变量的值为程序这次运行最后一次为变量赋值时的值。
1.:首先在java中被申明为静态的。JVM会把这个属性或者是方法的内存开辟在静态常量池,而不是存放在所申明类中的堆中。所以不能通过对象名来访问。
private void s() { static int a=1; a++; }//方法第一次调用结束后a在内存内值为2;
//方法在第二次调用结束后a在内存内值为3;
//static的一个应用:使用静态的变量可以实现“累加”的效果。因为静态的变量在内存中独一份!
public class TestCircle {
public static void main(String[] args) {
Circle c1 = new Circle(2.0);
Circle c2 = new Circle(2.1);
System.out.println(Circle.getTotal());
Circle.show();
c1.setInfo("我是一个漂亮的圆");
Circle.show();
}
}
class Circle{
private double radius;//半径
private static String info = "我是一个圆";
private static int total = 0;//因为total是static的,在内存中独一份,所以可以用来记录创建的对象的个数
public Circle(double radius){
this.radius = radius;
total++;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public static String getInfo() {
return info;
}
public static void setInfo(String info) {
Circle.info = info;
}
public static int getTotal() {
return total;
}
public static void show(){
System.out.println(info);
}
@Override
public String toString() {
return "Circle [radius=" + radius + "]";
}
}
public class TestNew { static int a = 3; static int b; static void meth(int x){ System.out.println("x = "+x); System.out.println("a = "+a); System.out.println("b = "+b); } static { System.out.println("static block initialized"); b = a*4; } public static void main(String[] args) { // TODO Auto-generated method stub meth(42); } }
结果:
static block initialized
x=42;a=3;b=3*4=12;
上述class TestNew的执行顺序是:
首先static 块执行(打印一条消息),a被设置为3,最后b被初始化为a*4 成12。
然后调用main(),main () 调用meth() ,把值42传递给x。
3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。
二:静态方法:在方法(函数)前用static修饰,表示此方法为所在类或所在的自定义类所有,而不是这个类的实例所有。静态方法是使用公共内存空间的,就是说所有对象都可以直接引用,不需要创建对象再使用该方法。
例如,创建一个类,里面有一个静态方法和非静态方法:
class Test{ public static int z(int xx,int yy){ return xx+yy; } public int zz(int xx,int yy){ return xx+yy; } }
然后在含有main方法的类中使用这个类时,对与以上非静态和静态方法的引用方式是不同的,如下:
1 import Test; 2 public class mainClass{ 3 int sum; 4 public static void main(String args[]){ 5 6 sum=Test.z(1,2); //直接用类.方法或者属性就可以使用该方法或属性。 7 8 System.out.println(sum); 9 Test t=new Test(); 10 sum=t.zz(1,2); //因为zz不是静态方法,所以只能只能用Test类创建一个t对象,然后调用该对象的方法。 11 System.out.println(sum); 12 } 13 }
三:静态类(非静态内部类也可以定义静态成员但需要同时有final关键词修饰,静态方法鉴于无法用final修饰,仍必须是在静态内部类 或者非内部类中定义。):静态内部类是指在一个类的内部,又定义了一个用static修饰的类。可以用C中的结构体内嵌结构体来理解。
1:首先,用内部类是因为内部类与所在外部类有一定的关系,往往只有该外部类调用此内部类。所以没有必要专门用一个Java文件存放这个类。
2:静态方法、静态成员变量。它唯一的作用就是随着类的加载(而不是随着对象的产生)而产生,以致可以用类名+静态成员名直接获得。这样静态内部类就可以理解了,它可以直接被用 外部类名+内部类名 获得。举例如下:
public class Build { .............. public static class VERSION { ................ public static final String RELEASE = getString("ro.build.version.release"); ................ } ................ }
在外部可以直接通过Build.VERSION.RELEASE来访问。
public class YourClass{
public static int arg0=0; //这是个静态成员
{
//这是个静态块
}
public static void doSomething(){
//这是个静态方法
}
}
static
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。