Skip to content

Java 学习 03 - 变量-修饰符

变量

定义

// 声明格式
type identifier [ = value] [, identifier [= value] ... ] ;
// 示例
int a, b, c;
int d =3, e, f = 4;
byte z = 22;
String s = "sour-lemon"

要点

局部变量

  • 局部变量是在栈上分配的
  • 局部变量没有默认值,局部变量被声明后,必须经过初始化,才可以使用

对象变量/实例变量

  • 拥有访问修饰符
  • 一般情况下应该把实例变量设为私有
  • 实例变量拥有默认值(数值: 0, 布尔: false, 引用: null)
  • 可以直接通过变量名访问

静态变量/类变量

  • 静态变量使用 static 关键词声明
  • 类变量在多个对象的应用时候只保留一份拷贝
  • 静态变量多用于常量的定义 public/private final static
  • 静态变量多声明为 public 类型
  • 定义为常量时候多使用大写字母
  • 使用类名访问

修饰符

访问控制修饰符

  • 默认的 default 同一个包内可见.
  • 私有 private 本类可见
  • 保护 protected 本类/子类
  • 公开 public 所有可见

修饰符类型

默认访问修饰符

  • 类默认是包内可见
  • 变量默认是 public static final (ps: 和常量一样哦)
  • 方法默认是 public

私有 / private

  • 类和接口不能声明为 private
  • 变量仅仅内部可以使用
  • 外部可以通过 getter 方法获取到值

公有 / public

  • 类, 方法, 构造函数, 接口均可被任意类访问到
  • 不同包之间引用不要 import 进行导入

保护/ protected

  • 同一个包中中的其他类访问
  • 不同包中的子类访问
  • 不能修饰类和接口

相互调用

  • 父类中声明为 public 的方法在子类中也必须为 public
  • 父类中声明为 protected 的方法在子类中要么声明为 protected ,要么声明为 public 不能声明为 private
  • 父类中声明为 private 的方法,不能够被继承

非访问修饰符

  • static 用于类方法和类变量
  • final 修饰类/方法/变量, 不能被继承, 不能被修改
  • abstract 抽象类和抽象方法
  • synchronizedvolatile 线程编程

Static

  • 声明独立于对象的静态变量
  • 静态变量只有一份拷贝
  • 静态变量可用于局部变量
  • 静态方法不能用于类的非静态变量

final

  • final 变量 显示初始化并且只能初始化一次
  • final 变量 里边的值不可改变
  • final 方法 可以被继承但是不能被修改(ps: 阻止篡改)
  • final 类 不能被继承

abstract

  • 抽象类 不能被实例化
  • 抽象类 可以包含非抽象方法
  • 抽象方法 必须声明为抽象类
  • 抽象方法 不包含函数体
  • 抽象方法 必须被实现, 并且不能声明为 finalstrict .
  • 抽象方法 末尾以分号结尾

synchronized 只能同一时间被同一个线程访问

public synchronized void showDetails(){
    .......
}

transient 序列化的对象包含被transient修饰的实例变量时,java虚拟机(JVM)跳过该特定的变量 volatile

  • 保证成员变量的值是最新的, 成员变量发生变化时候, 线程必须将值写回内存
  • 两个不同的线程总是看到某个成员变量的同一个值
  • 一个volatile对象引用可能是null
public class MyRunnable implements Runnable {
    private volatile boolean active;
    public void run() {
        active = true;
        // 第一行
        while (active) {
            // 代码
        }
    }
    public void stop() {
        active = false; // 第二行
    }
}

ps

在 php 中, 没有默认修饰符, 不能同一个包内可见, 默认就是 public 权限的, 对所有可见

参考文档