static

来源:互联网 发布:iphone7p淘宝店铺 编辑:程序博客网 时间:2024/06/17 11:14

首先一个问题:

什么是实例变量?局部变量?类变量?final变量?

实例变量:变量时对象所有,每当实例化一个对象时,会创建一个副本并初始化,如果没有显示初始化,会有一个默认值,各个对象的实例变量互不影响。

局部变量:在方法中定义的变量,在使用前必须初始化。

类变量:用static 修饰的变量,变量归类所有,只要类被加载,这个变量就可以被使用(类名.变量名),所有实例化的对象共享类变量。

static 主要有四种使用情况:成员变量,成员方法,代码块,内部类

(1)成员变量加static修饰的静态变量和不用static修饰的实例变量,静态变量属于类,在内存中只有一份可用(类.静态变量)和(对象.静态变量)引用非static只可用(对象.静态变量)引用import static java.lang.System.out;import java.util.Random;class Test {int i = 1;}public class FinalData {static Random rand = new Random();private final int VALUE_1 = 9;private static final int VALUE_2 = 10;private final Test test = new Test();private Test test2 = new Test();private final static int[] a = { 1, 2, 3, 4, 5, 6 };private final int i4 = rand.nextInt(20);private static final int i5 = rand.nextInt(20);public String toString() {return i4 + "" + i5 + "";}public static void main(String[] args) {FinalData data = new FinalData();out.println(data.VALUE_1);// 9out.println(VALUE_2);// 10// data.test = new Test();//不能重新赋值// data.VALUE_2++;//不能重新赋值data.test2 = new Test();out.println(data.test2.i);// 1for (int i = 0; i < a.length; i++) {a[i] = 9;out.print(a[i] + " ");// 9 9 9 9 9 9}out.println(data);// 718out.println(data.i4);// 7out.println(i5);// 18out.println(new FinalData());// 718}}(2)成员方法static方法是类的方法,非static方法是对象的方法。可用(类.成员方法)和(对象.成员方法)引用非static只可用(对象.成员方法)引用static一个重要的用途是实现单例模式public class Singleton {private static Singleton instance = null;private Singleton() {};public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}}(3)static代码块(4)static内部类package com.www.DP;public class Test {public static int a = 0;static {a = 10;System.out.println("父类的静态代码块在执行a=" + a);}{a = 8;System.out.println("父类的非静态代码块在执行a=" + a);}public Test() {this("a在父类带参构造方法中的值:" + Test.a); // 调用另外一个构造方法System.out.println(a);System.out.println("父类无参构造方法在执行a=" + a);}public Test(String n) {System.out.println(n);System.out.println(a);}public static void main(String[] args) {Test tsc = null;System.out.println("!!!!!!!!!!!!!!!!!!!!!");tsc = new Test();}}

输出:

父类的静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
父类的非静态代码块在执行a=8
a在父类带参构造方法中的值:10
8
8
父类无参构造方法在执行a=8



0 0
原创粉丝点击