Static静态性
1.什么是静态性,什么是非静态性?
1.静态性:<i>静态数据或静态方法属于类而不属于对象;
<ii>对象中不包含有静态数据
<iii>是所有对象可共享的数据和方法
<iv>静态数据直接初始化
2.非静态性:<i>属于对象,对象单元中含有非静态对象
<ii>非静态数据通过构造方法初始化
<iii>非静态方法一定要通过对象引用
2.静态数据和非静态数据的存储:
定义:访问权限 static 数据类型 数据名;
如;
Class Myclass{
Private int x;
Private int y;//非静态数据属于对象
Private static int z=30;//静态数据属于类直接初始化
Public Myclass(int x,int y){
This.x=x;
This.y = y;
}//构造函数不可以初始化静态数据
}
Public class Demo{
Public static void main(string arg[]){
Myclass my = new Myclass(3,4);
}
}
3.静态数据和静态方法的调用
前提:访问权限
静态方法的定义:
访问权限 static 返回值类型 方法名 ([形参]){
//函数体
}
调用:(1)通过类名直接调用
定义:类名.数据名
类名.方法名([实参])
Class Myclass{
Public static int x = 10;
Public static int y = 20;
Public static void Print(){
System.out.println(“y=”+y);
}
}
Public class demo{
Public static void main(){
Myclass.x = 10;
System.out.println(“x=”+x);
Myclass.Print();
}
}//静态方法的主要作用就是为了访问和处理静态数据
(2) 静态方法和静态数据也可以通过对象访问
定义:对象名.静态数据名 //注意访问权限
静态方法(实参)
如:
Public class Demo{
Public static void Print(){
System.out.println(“static funcation”);
}
Public static void main(string arg[]){
Demo.Print();
Demo D = new Demo();
D.Print();
}
}
4.static块:类内的一个抽象复合体
- 具有静态性:编译时为静态变量分配单元,执行静态块,在编译阶段加载类时执行static块
- 静态数据初始化:a.定义静态数据时
b.通过静态方法
c.可以通过static块
(3) 声明:static{
//数据或方法
}
如:
Class Demo{
Private static int x;
Static{
X = 30;
……//其余静态数据或方法
}
}
5、注意:
- Static只在编译阶段执行一次,整个程序运行阶段不再执行
- 主要作用:初始化
- 不可将static块放在方法中,在类中独立存在
- 在static中不可使用this,super等关键词
- 若有多个static块,按加载顺序一一执行
- 静态方法不能访问非静态数据、方法
如:
Class Myobject{
Private static string str1 = “static string”;
Private string str2;
Public Myobject(){
////
}
Public void printf(){
System.out.println(“str1’);
System.out.println(“str1’);
Print2();
}
Public static void Print2(){
System.out.println(“str1”);
System.out.println(“str2’);
Print1();
}
}