博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA修饰符
阅读量:4612 次
发布时间:2019-06-09

本文共 2785 字,大约阅读时间需要 9 分钟。

JAVA修饰符通常放在类、变量、方法的最前端

主要分为两类:

    1.访问修饰符

   2.非访问修饰符

 

1.访问控制修饰符

  default(缺省):不使用任何修饰符,同一包内可见;

  public:对所有类可见;

  private:在同一类内可见;不能修饰类(外部类)

  protected:对同一包内的类可见,不能修饰类(外部类)

 

 

default:

  接口里变量都隐式声明为 public static final,接口里的方法默认访问权限为 public。

 

public:

  若需要访问的类在不同的包中,需要先导入

  Java 程序的 main() 方法必须设置成公有的,否则,Java 解释器将不能运行该类。

private:

  最严格,只能被所属类访问,并且类和接口不能声明为 private。

  私有类型的变量只能通过类中公共的 getter 方法被外部类访问。

     例:

        私有成员变量format不能直接调用,只能通过public方法setformat和getformat设置和获取

1 public class Logger {2    private String format;3    public String getFormat() {4       return this.format;5    }6    public void setFormat(String format) {7       this.format = format;8    }9 }

  用来隐藏类的实现细节和保护类的数据。

 

protected:

  子类与基类在同一包中:可访问

  子类与基类不在同一包中:子类实例可以访问继承而来的 protected 方法,而不能访问基类实例的protected方法。

  protected不能修饰类(内部类除外)接口及接口的成员变量和成员方法。

 

 

 继承规则:

  父类public方法:子类必须public

 父类protected方法:子类protected或者public,不能private

 父类private方法:子类不能继承

 

 

 

非访问修饰符:

  static:修饰类方法和类变量

  final:修饰类(不能被继承),修饰方法(不能被继承类重新定义),修饰变量(不可修改,为常量)

  abstract:创建抽象类和抽象方法

  synchronized 和 volatile:主要用于线程编程

 

static:声明静态变量和静态方法。静态变量只有一份(无论有多少个实例);静态方法不能使用非静态变量,从参数列表得到数据,然后计算。

     使用 classname.variablename 和 classname.methodname 的方式访问。

1 public class InstanceCounter { 2    private static int numInstances = 0; 3    protected static int getCount() { 4       return numInstances; 5    } 6   7    private static void addInstance() { 8       numInstances++; 9    }10  11    InstanceCounter() {12       InstanceCounter.addInstance();13    }14  15    public static void main(String[] arguments) {16       System.out.println("Starting with " +17       InstanceCounter.getCount() + " instances");18       for (int i = 0; i < 500; ++i){19          new InstanceCounter();20           }21       System.out.println("Created " +22       InstanceCounter.getCount() + " instances");23    }24 }

 

 

final:通常和 static 修饰符一起使用来创建类常量。

1 public class Test{ 2   final int value = 10; 3   // 下面是声明常量的实例 4   public static final int BOXWIDTH = 6; 5   static final String TITLE = "Manager"; 6   7   public void changeValue(){ 8      value = 12; //将输出一个错误 9   }10 }

 final 方法可以被继承,但不能被修改。

 final类不能被继承。

    final变量定义时可以声明但不赋值,这中变量也称为final空白,编译器都确保空白final在使用之前必须被初始化。一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

 

abstract:

抽象类不能实例化对象;

抽象类的目的是为了将来对该类进行扩充;

类不能同时被 abstract 和 final 修饰;

如果一个类包含抽象方法,一定要声明为抽象类;

抽象类可以包含抽象方法和非抽象方法。

 

 

抽象方法

 

抽象方法是一种没有任何实现的方法,具体实现由子类提供。

 

不能被声明成 final 和 static。

 

任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。

 

如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。

 

抽象方法的声明以分号结尾,例如:public abstract sample();

  

1、final 不能同时和 abstract 使用

2:static 和 abstract 也是不能连用的

(根据性质)

 

 

synchronized修饰符:声明的方法在某一时刻只能被一个线程访问。

transient修饰符:序列化的对象包含 transient 修饰的实例变量时,java 虚拟机(JVM)跳过该变量。

volatile 修饰符:修饰的成员变量在被线程访问时,都强制从共享内存中重新获取它的值,成员变量发生变化时,强制写回共享内存。

 

转载于:https://www.cnblogs.com/s1mple/p/9893484.html

你可能感兴趣的文章
iOS经典面试题 (一)
查看>>
Linux : 从私钥中提取公钥
查看>>
Quartz.Net分布式任务管理平台
查看>>
android 应用分发
查看>>
58同城2018提前批前端笔试题总结
查看>>
compilation与编译
查看>>
useradd mfs -s /sbin/nologin -M
查看>>
mysql数据库:数据类型、存储引擎、约束、
查看>>
LeetCode-Find the Celebrity
查看>>
LeetCode-Longest Increasing Subsequence
查看>>
LeetCode-Reverse Bits
查看>>
zynq如何查看当前网速
查看>>
vue+element-ui实现表格checkbox单选
查看>>
linux公司常用基础命令必知必会
查看>>
Oracle——PL/SQL 语句
查看>>
java nio
查看>>
Spring框架的AOP的底层实现之JDK的动态代理(代码了解,理解原理)
查看>>
查询和修改selinux状态
查看>>
hdu 1348:Wall(计算几何,求凸包周长)
查看>>
手动下载spring jar包
查看>>