java常用修饰符总结

java中的修饰符:
public、 protect、private、abstract、final、static (synchronize(同步的)、native(本地的)、tranient(暂时的)、volatile(易失的))
一、public、protect、无修饰符、private:
public 公开级别,对外公开
protect 受保护级别,对本类,同包,子类公开
无修饰符 默认级别 对本类,同包公开
private 私有级别,不对外公开

二、abstract:
修饰类,成员方法
用abstract修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化
用abstract修饰的方法表示抽象方法,抽象方法没有方法体:

abstract void method();

语法规则:
1、抽象类中可以没有抽象方法,但是包含了抽象方法的类必须被定义为抽象类(必要不充分条件)
2、没有抽象构造方法,也没有抽象静态方法:

public class  base(){
    public abstract base(){}//编译出错
    abstract static void method(){}//编译出错,abstractstatic不能连用
}

3、抽象类中可以有非抽象的构造方法:

class base{ 
    public base(){
        System.out.println("base")
        }
    }
class sub extends base{
    public static void main(String[] args){
        base b= new sub()
    }
}
//输出:base

4、抽象方法以及抽象类不能被abstrac和final 同时修饰:
这会自相矛盾,编译出错
原因:abstract修饰的表示抽象类或者是抽象方法,是需要下层来实现的;而final所修饰的类或者方法是表示不可变的,即不能被继承,更不可能被扩展的,这就与abstract矛盾 了

三、final:可以修饰非抽象类,成员方法(不包括构造方法), 成员变量,局部变量

  • 用final修饰的类不能被继承,没有子类
  • 用final修饰的方法不能你被子类方法覆盖
  • 用fina修饰的变量表示常量,只能被赋值一次

1final类
- 不是专门为继承而设计的诶
- 处于安全考虑,类的细节不允许有任何改动
- 确信该类不会再被扩展

2final方法:
- 不允许子类覆盖的方法可以定义为final类型

3final变量:
- 静态变量 static修饰的变量
- 实例变量
- 局部变量 方法内部定义的变量

  • final修饰的变量必须被显示初始化(就是要给它赋初值值): 静态变量可以在static代码块中初始化
final int a=1static final int b=1//合法

static final int b;//合法,与上面等价
static{
    b=1;
}
  • final修饰的变量只能被赋值一次;
  • final修饰的引用变量只能使用引用同一个对象,但是可以改变对象内容
public class A{
    public int varpublic static void main(String[] args){
        final A a =new A();//
        a.var=1;//改变对象内容
        a=new A()//不能再引用新的对象,编译出错
    }
}

四、static修饰符(修饰成员变量 非抽象方法,代码块)

  • 用static修饰的成员方法 直接可以通过类名来访问
  • 用static修饰的成员变量 直接可以通过类名来访问
  • 用static修饰的代码块 当java虚拟机加载该类时,该代码块会被自动执行

重点:被static 修饰的成员变量 和成员方法 均归该类所有,他不依赖于特定实例,但是可以被类的所有实例共享;换句话说,她们可以直接通过类名来访问,也可以被类的实例所访问
1、static变量:

  • 静态变量:被static修饰的变量在内存中只有一个拷贝,只会被分配一次内存
  • 实例变量:每创建一个实例 该实例就会被分配一次内存,实例变量在内存中可以有多个拷贝互不影响
  • 静态变量能被所有实例共享,可作为实例之间进行交流的共享数据
  • 如果类的所有实例都包含一个相同的常量属性,那可以把这个属性定义为静态常量类型
public static   final  int  MAX=110public static final  int MIN=10

2、static方法:

  • static修饰的方法终不能使用this,super关键字
  • static修饰的方法不能直接访问实例变量,必须通过类的实例来访问(类比main方法) 实例方法可以访问静态变量 实例变量
  • 静态方法必须被实现,意思就静态方法必须有方法体,意味着static 不能与abstract连用
  • main方法是静态方法

3、static 代码块:

  • 不存在仍何与的方法中 独立存在,在类被加载时自动运行,有多个静态代码块是运行顺序是线性运行

你可能感兴趣的:(java,java)