Java访问权限原理与用法详解

2020-02-12 12:02:21于丽

package day7;
class Child{
static int count;
}
public class TestChild {
public static void main(String[] args) {
Child a = new Child();
Child b = new Child();
//count被所有对象共享
a.count ++;
b.count ++;
System.out.println(a.count);
System.out.println(b.count);
}
}

 

静态变量随着类的创建的而存在,优先于对象存在。

静态变量(类变量)

属于类的,被所有对象所共享,优先于对象而存在的。
使用

类名.静态变量名
对象名.静态变量名//少用,容易混淆

静态变量和实例变量的区别

1.静态:类加载的时候就加载了,就创建了,就分配空间默认初始化了

实例:对象创建的时候,才能创建;
2.静态:属于类的,存在于方法区中的。
实例:属于对象。存在于堆中。
3.静态:声明周期很长,类销毁的时候,才回释放。
实例:对象销毁,会释放。

静态变量的应用场合

当数据共享时,使用。
当不需要对象,或无法创建对象时使用。

静态块

在类中定义

static{
  作用:初始化类的,给类变量初始化,静态变量
}

局部代码块

定义:在方法中定义

public void show(){
  {
    局部代码块
    作用:用来控制局部变量生命周期和使用范围。
  }
}

静态方法

静态方法中只能访问静态成员。
静态方法中不能使用this,super关键字。super可能访问到非静态的成员。

静态方法和实例方法的区别

1.静态:属于类,用类名直接调用
实例: 属于对象调用。
2.静态:只能直接访问静态成员(静态变量,静态方法)
实例:可以直接访问静态的和非静态的
3.静态:不能使用this,super。
实例:可以使用this,super。

应用场合

当不用创建对象访问,形式简单或者不能创建对象,那么就要用静态的方法了

静态导入

导入的是类中的静态成员,导入之后可以直接使用。

格式

import static 包名.类名.静态变量名(方法);

单例模式

对类只能创建一个对象

饿汉模式

类加载时,静态变量就存储了一个对象

package day7;
class Window{
  private static Window win = new Window();
  private Window() {
  }
  public static Window getInstance() {
  return win;
  }
}
public class TestWindow {
  public static void main(String[] args) {
    Window win = Window.getInstance();
    Window win1 = Window.getInstance();
    System.out.println(win);
    System.out.println(win1);
  }
}