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抽象类和抽象方法synchronized和volatile线程编程
Static
- 声明独立于对象的静态变量
- 静态变量只有一份拷贝
- 静态变量可用于局部变量
- 静态方法不能用于类的非静态变量
final
final变量 显示初始化并且只能初始化一次final变量 里边的值不可改变final方法 可以被继承但是不能被修改(ps: 阻止篡改)final类 不能被继承
abstract
- 抽象类 不能被实例化
- 抽象类 可以包含非抽象方法
- 抽象方法 必须声明为抽象类
- 抽象方法 不包含函数体
- 抽象方法 必须被实现, 并且不能声明为
final和strict. - 抽象方法 末尾以分号结尾
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 权限的, 对所有可见
