1、修饰符
public
关键字是访问修饰符,表示用于设置类,属性,方法和构造函数的访问级别。
我们将修饰符分为两种:
- 访问修饰符-控制访问级别
- 非访问修饰符-不控制访问级别,但提供其他功能
2、访问控制修饰符
对于类,可以使用public
或default:
修饰符 | 描述 |
| 该类可由任何其他类访问 |
default | 当使用不指定修饰符时,该类只能由同一包中的类访问。 |
对于属性,方法和构造函数,可以使用以下之一:
修饰符 | 描述符 |
| 可用于所有类 |
| 只能在声明的类中访问 |
default | 当使用不指定修饰符时,该类只能由同一包中的类访问。 |
| 对同一包内的类和所有子类可见。 |
3、非访问修饰符
对于类,可以使用final
或abstract
:
修饰符 | 描述 |
| final 修饰的类不能够被继承 |
| 用来创建抽象类 |
对于属性和方法,可以使用以下之一:
修饰符 | 描述 |
| 修饰的方法不能被继承类重新定义 |
| 修饰的属性和方法属于类,而不是对象 |
| 只能在抽象类中使用,并且只能在方法上使用。 该方法没有实现,例如,
|
| 序列化包含修饰的属性和方法的对象时,将忽略这些属性和方法 |
| 一次只能由一个线程访问方法 |
| 当写一个volatile变量时, JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。 当读一个volatile变量时, JMM会把该线程对应的本地内存置为无效。 线程接下来将从主内存中读取共享变量。 |
4、final修饰符
如果不希望覆盖现有的属性值,请将属性声明为final
:
例如:
public class Main { final int x = 10; final double PI = 3.14; public static void main(String[] args) { Main myObj = new Main(); myObj.x = 50; // 会产生一个错误: cannot assign a value to a final variable myObj.PI = 25; // 会产生一个错误: cannot assign a value to a final variable System.out.println(myObj.x); } }
5、static修饰符
static
方法是类方法,不需要创建类的对象就可以访问,这与public
不同:
例如:
下面示例说明static
和public
方法之间的区别:
public class Main { // 静态方法 static void myStaticMethod() { System.out.println("可以在不创建对象的情况下调用静态方法"); } // 公共方法 public void myPublicMethod() { System.out.println("公共方法必须通过创建对象来调用"); } // main方法 public static void main(String[ ] args) { myStaticMethod(); // 调用静态方法 // myPublicMethod(); 会出错 Main myObj = new Main(); // 创建Main类的对象 myObj.myPublicMethod(); // 调用方法 } }
6、abstract修饰符
abstract
抽象方法属于abstract
类,并且该方法没有实现。方法由子类实现:
例如:
// MyClass.java public class MyClass { public static void main(String[] args) { // 创建Student类的一个对象(从Person继承属性和方法) Student myObj = new Student(); System.out.println("Name: " + myObj.fname); System.out.println("Age: " + myObj.age); System.out.println("year: " + myObj.year); myObj.study(); // 调用抽象方法 } } //Main.java 抽象类 abstract class Person { public String fname = "cjavapy"; public int age = 3; public abstract void study(); // abstract method } // 子类 (从Main类继承) class Student extends Person { public int year = 2017; public void study() { // 实现抽象方法 System.out.println("好好学习,天天向上!!!"); } }