实例
package java0806;
public class staticDemo {
int a =1;
static int static_b =2; //静态变量
//演示“普通方法可以访问 静态和非静态的变量和方法”
public int fun1() {
int c =3; //局部变量c
System.out.println("调用了普通方法 a+b="+(a+static_b));
static_fun2(); //普通方法访问静态方法
return a+static_b; //普通方法可以访问/调用静态b和非静态的变量a
}
//演示"静态方法不能访问非静态变量"
public static int static_fun2() { //静态方法
System.out.println("调用了静态方法="+static_b);
return static_b; //静态方法可以访问静态变量b
//add(); //语法错误,静态方法不能访问实例方法
//return a-b; //语法错误,静态方法不能访问/调用非静态变量a。
/*Cannot make a static reference to the non-static field a
*change 'a'to static
*/
}
public static void main(String[] args) {
staticDemo duixiang = new staticDemo();
System.out.println("----类能直接访问的只有静态成员----");
// System.out.println(staticDemo.a); //报错,类不能直接访问属性,需要类的对象去访问
// staticDemo.add(); //报错,类不能直接访问方法,需要类的对象去访问
System.out.println("类直接访问静态变量 ="+staticDemo.static_b);
staticDemo.static_fun2(); //类直接访问静态方法
System.out.println("\n"+"----用对象去访问静态/非静态的属性和方法----");
System.out.println("对象直接访问并修改 非静态变量 ="+(duixiang.a=10));
System.out.println("对象直接访问并修改 静态变量 ="+(duixiang.static_b=20));//有黄色提示,如下截图
duixiang.fun1(); //对象直接访问非静态方法
duixiang.static_fun2(); //对象直接访问静态方法 //有黄色提示,如下截图
}
}
调用关系:
(这里普通方法可以访问静态方法,没有画线。类似于普通方法访问静态变量)
(这里静态方法不能访问普通方法,没有画线。类似于静态方法不能访问成员变量)
一、名词概念
- 类 class
- 类的实例 = 对象object= 实例instance
- 方法method:一般面向对象 (又叫函数function:一般面向过程)
- 变量(JAVA中)= field = 属性
3种变量类型:
局部变量,方法体中定义的
成员变量(实例变量,非静态变量),在类中& 方法体之外& 无static
类变量=static变量=静态变量,类中& 方法体之外 &有static。
该类所有对象共有(一处修改,原始值改变)
2种方法类型:
普通方法(实例方法)= 无static修饰的方法
静态方法=static修饰的方法
访问=调用
二、static 修饰符
static 定义属性:
什么是静态变量:
1、static 关键字用来声明独立于对象的静态变量,无论一个类实例化多少对象,它的静态变量只有一份拷贝。
2、静态变量也被称为类变量。
3、局部变量不能被声明为 static 变量。
作用:
在创建类的多个对象时,用static修饰的常量在内存中只有一份拷贝。
不用static修饰则可能有多份拷贝。
注:
任何一个对象修改了静态属性X( 对象.X ),其他对象在使用X时,X也被改变。
体现了:静态属性是所有对象共有。 (也可通过 类.X 来修改类属性的值)
static 定义方法:
什么是静态方法:
1、static 关键字用来声明独立于对象的静态方法。
2、静态方法不能使用类的非静态变量。
3、静态方法从参数列表得到数据,然后计算这些数据。
作用:
用static 修饰的方法可以直接被调用。
不用static修饰的需要先实例化一个对象后才可以被调用。
用static的最大特点:
①static的属性或方法可以由类名(类名.方法 ,类名.属性)直接调用/访问,而不是对象名称。
因为static成员(对象和方法)属于类而不属于对象。
因为静态的在对象创建前就存在了,不依赖对象是否被创建(不能依赖任何实例)
②static属性是一个共享属性。
(普通方法和静态方法都能调用)
普通方法可以访问/调用 静态和非静态的变量
静态方法可以访问/调用静态变量
静态方法不能访问/调用非静态变量。
总结:静态成员不能访问非静态成员
static main方法:
Static表示main()是一个静态方法,不创建类的对象仍可执行(可以不依赖对象而存在)。
public static void main(String[] args) {}
public JVM要调用类的main()方法,所以public
static JVM执行时不创建(依赖)对象,所以static (由类名直接调用)
String[] args接受运行时的参数
static代码块:
不在任何方法体中
类被载入时,静态代码块被执行,且只执行一次。
常用来进行类属性的初始化。