Java中常用修饰符的使用方法汇总
在Java中,修饰符是一种关键字,用于修饰类、变量、方法等结构的访问权限、范围等特征。本文将会详细讲解Java中常用修饰符的使用方法,帮助读者更好地理解和掌握Java编程。
访问修饰符
Java中访问修饰符包括public、protected、default和private四种,它们分别控制着变量、方法和类的访问权限。下面逐一进行说明:
public
使用public修饰的成员可以被任何其他类访问,无论这些类是否在同一个包中,即为公共访问权限。
示例:
public class Person {
public String name;
public void printName() {
System.out.println("name: " + name);
}
}
public class Test {
public static void main(String[] args) {
Person xiaoming = new Person();
xiaoming.name = "小明";
xiaoming.printName();
}
}
上述代码中,Person类中为name和printName方法均被public修饰,由于它们具有公共访问权限,因此在Test类中可以直接访问。
protected
使用protected修饰的成员可以被本类、同一个包中的其他类、以及该类的子类访问,即为受保护的访问权限。
示例:
public class Person {
protected int age;
}
public class Teacher extends Person {
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.setAge(30);
System.out.println("age: " + teacher.getAge());
}
}
上述代码中,Person类中的age变量被protected修饰,在Teacher类中能够通过继承来访问这个变量,并添加了setAge和getAge方法,可以在Test类中通过teacher对象访问到age变量的值。
default
使用default修饰的成员只能在同一个包中被访问,没有访问修饰符时默认为default,即为包访问权限。
示例:
package com.example;
class Person {
String name;
int age;
void display() {
System.out.println("name: " + name + ", age: " + age);
}
}
public class Test {
public static void main(String[] args) {
Person xiaoming = new Person();
xiaoming.name = "小明";
xiaoming.age = 18;
xiaoming.display();
}
}
上述代码中,Person类没有使用任何访问修饰符,在Test类中只有在将Person类和Test类放在同一个包中之后才能够访问到Person类中的变量和方法,即为包访问权限。
private
使用private修饰的成员只能在本类中被访问,不能被其他类访问,即为私有访问权限。
示例:
public class Person {
private String name;
private void printName() {
System.out.println("name: " + name);
}
public void setName(String name) {
this.name = name;
}
public void display() {
printName();
}
}
public class Test {
public static void main(String[] args) {
Person xiaoming = new Person();
xiaoming.setName("小明");
xiaoming.display();
}
}
上述代码中,Person类中的name变量和printName方法均被private修饰,只有在Person类内部才能够被访问。
非访问修饰符
除了访问修饰符外,Java中还有final、abstract、static和volatile四种非访问修饰符。
final
使用final修饰的成员不能被改变,即为不可变的。
示例:
public class Person {
public final String name = "小明";
public final int age = 18;
}
public class Test {
public static void main(String[] args) {
Person xiaoming = new Person();
xiaoming.name = "小红";
xiaoming.age = 20;
System.out.println("name: " + xiaoming.name + ", age: " + xiaoming.age);
}
}
上述代码中,Person类中的name变量和age变量均被final修饰,因此不能够被改变,如果在Test类中执行对这两个变量的赋值操作,则会报错。
abstract
使用abstract修饰的类必须被继承,不能被实例化,即为抽象类。
示例:
public abstract class Animal {
public abstract void move();
}
public class Dog extends Animal {
public void move() {
System.out.println("狗会跑");
}
}
public class Test {
public static void main(String[] args) {
Animal animal = new Dog();
animal.move();
}
}
上述代码中,Animal类被声明为抽象类,并使用了abstract修饰其move方法,必须在子类中进行实现。在Test类中,先将Dog类实例化为一个Animal类型的变量animal,然后使用animal.move()方法来调用的是Dog类中实现的move方法。
static
使用static修饰的成员是静态成员,属于类本身而非对象,可以通过类名直接访问,也可以通过对象访问。
示例:
public class Person {
private static int count = 0;
private int id;
private String name;
public Person(String name) {
this.name = name;
this.id = ++count;
}
public static int getCount() {
return count;
}
public void display() {
System.out.println("id: " + id + ", name: " + name);
}
}
public class Test {
public static void main(String[] args) {
Person xiaoming = new Person("小明");
Person xiaohong = new Person("小红");
System.out.println("count: " + Person.getCount());
xiaoming.display();
xiaohong.display();
}
}
上述代码中,Person类中的count变量被声明为静态变量,可以使用Person.getCount()方法来获取所有Person对象的计数器,也可以通过对象调用display方法来输出每个人的id和name。
volatile
使用volatile修饰的成员具有可见性,即被volatile修饰的变量在一个线程中被修改后,在其他线程中是可见的。
示例:
public class Counter extends Thread {
volatile int count = 0;
public synchronized void increment() {
count++;
}
public void run() {
for (int i = 0; i < 10000; i++) {
increment();
}
}
}
public class Test {
public static void main(String[] args) {
Counter counter1 = new Counter();
Counter counter2 = new Counter();
counter1.start();
counter2.start();
try {
counter1.join();
counter2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("count: " + counter1.count);
}
}
上述代码中,Counter类中的count变量被声明为volatile,确保在计数线程1中修改count变量后,在计数线程2中是可见的。在Test类中,创建了两个计数线程counter1和counter2,并启动它们,最后使用counter1.count输出计数结果。
小结
通过本文的介绍,读者可以学习到Java中常用修饰符的使用方法,包括访问修饰符和非访问修饰符。在编写Java代码时,应根据具体情况选择使用不同的修饰符,合理控制访问权限,保证代码的可读性和可维护性。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中常用修饰符的使用方法汇总 - Python技术站