static修饰符的使用
2006-10-13 12:54
363 查看
static修饰符能修饰内部类,方法,变量,代码块。
静态 成员意味着该成员属于类级,而不依赖于类的实例,也不依赖于任何一个类的成员,可以不通过创建类的实例来使用静态成员。
静态变量在类被加载入时初始化,一个类只有一个静态变量的内存空间,而不会依赖于对象再次分配空间。局部变量不能被声明为静态变量。
静态方法只能访问静态变量(静态方法没有this变量)。静态方法只能被重写成静态的,不能被重写成非静态的。非静态方法不能重写成静态的。
例子:
以下为没有使用静态方法的:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
int x=100;
public void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
int x=200;
public void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Child~!~!~
200
Parent init~~~
Child init~~~
Child~!~!~
200
Child~!~!~
200
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
而当使用静态方法时:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
static int x=100;
public static void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
static int x=200;
public static void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Parent~!~!~
100
Parent init~~~
Child init~~~
Parent~!~!~
100
Parent~!~!~
11
Parent~!~!~
11
Parent init~~~
Parent~!~!~
11
静态 成员意味着该成员属于类级,而不依赖于类的实例,也不依赖于任何一个类的成员,可以不通过创建类的实例来使用静态成员。
静态变量在类被加载入时初始化,一个类只有一个静态变量的内存空间,而不会依赖于对象再次分配空间。局部变量不能被声明为静态变量。
静态方法只能访问静态变量(静态方法没有this变量)。静态方法只能被重写成静态的,不能被重写成非静态的。非静态方法不能重写成静态的。
例子:
以下为没有使用静态方法的:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
int x=100;
public void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
int x=200;
public void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Child~!~!~
200
Parent init~~~
Child init~~~
Child~!~!~
200
Child~!~!~
200
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
而当使用静态方法时:
public class d
{
public static void main(String args[])
{
Child c=new Child();
c.doStuff();
Parent p=new Parent();
p.doStuff();
p=c;
p.doStuff();
Parent a=new Child();
a.doStuff();
a.x=11;
a.doStuff();
p.doStuff();
Parent b=new Parent();
b.doStuff();
}
}
class Parent
{
Parent(){System.out.println("Parent init~~~");}
static int x=100;
public static void doStuff()
{
System.out.println("Parent~!~!~");
System.out.println(x);
}
}
class Child extends Parent
{
Child(){System.out.println("Child init~~~");}
static int x=200;
public static void doStuff()
{
System.out.println("Child~!~!~");
System.out.println(x);
}
}
输出结果为:
Parent init~~~
Child init~~~
Child~!~!~
200
Parent init~~~
Parent~!~!~
100
Parent~!~!~
100
Parent init~~~
Child init~~~
Parent~!~!~
100
Parent~!~!~
11
Parent~!~!~
11
Parent init~~~
Parent~!~!~
11
相关文章推荐
- 为什么局部字符数组必须使用static关键词修饰
- tips:为什么接口中的常量必须使用public static final修饰?
- [C#]为什么Interface里的成员不能使用static修饰?
- java中使用static修饰词应注意的问题
- 在c++头文件中使用static修饰的全局变量
- 简述static关键字的作用?(备注:在什么条件下使用static修饰局部变量、全局变量、函数)
- 为什么Java接口里使用public static final修饰成员变量
- C++类中static修饰的函数的使用
- static 修饰的属性、方法、代码块的使用实例
- JavaSE8基础 内部类可以使用static修饰
- 为什么接口中的常量必须使用public static final修饰
- iOS 中extern、static修饰变量的使用及define和const区别
- 在项目中,对于频繁使用的方法,使用static修饰会提高效率吗?
- java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,也可以不使用staitc关键字修饰。
- linux大量使用了static关键字用来修饰函数和结构体定义,为何?
- 使用static关键字修饰一个属性
- linux大量使用了static关键字用来修饰函数和结构体定义,为何?
- iOS Block的简单使用以及__block 和static修饰变量
- java使用static修饰成员变量
- static 关键字在函数中的使用