Java中常用修饰符的使用方法汇总

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代码时,应根据具体情况选择使用不同的修饰符,合理控制访问权限,保证代码的可读性和可维护性。

阅读剩余 82%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中常用修饰符的使用方法汇总 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java C++题解leetcode856括号的分数

    下面我将为你详细讲解“Java C++题解leetcode856括号的分数”的完整攻略。 题目描述 给定一个平衡括号字符串 S,按下述规则计算该字符串的分数: () 得 1 分。 AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。 (A) 得 2 * A 分,其中 A 是平衡括号字符串。 示例1: 输入: "()" 输出: 1…

    Java 2023年5月20日
    00
  • Java动态代理四种实现方式详解

    《Java动态代理四种实现方式详解》是一篇详细介绍Java动态代理技术的文章,本文将从以下几个方面逐一介绍: 什么是Java动态代理 Java动态代理的特点 Java动态代理的四种实现方式 实现示例 总结 1. 什么是Java动态代理 Java动态代理是指在程序运行过程中动态生成代理类的技术。相比于静态代理需要手动编写代理类,动态代理可以让程序更加灵活,更容…

    Java 2023年5月18日
    00
  • JTS空间坐标Geometry使用

    Geomtery子类图 创建Geometry GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(); // 点 Coordinate coord = new Coordinate(1, 1); Point point = geometryFactory.createPo…

    Java 2023年4月23日
    00
  • Java无法输出中文问题及解决

    Java无法输出中文问题是因为在输出时使用的是字节流,而中文字符在UTF-8编码下占用多个字节,单独输出一个字节可能无法正确显示中文字符。下面是Java无法输出中文问题的解决步骤。 方法一:使用字符流 使用BufferedWriter类在控制台(System.out)输出中文字符。 import java.io.*; public class OutputC…

    Java 2023年5月20日
    00
  • Java API学习教程之正则表达式详解

    Java API学习教程之正则表达式详解 正则表达式简介 正则表达式是对字符串进行模式匹配的一种语法。通过正则表达式,可以快速的进行字符串匹配,替换操作等。Java通过\java.util.regex.*\包来支持正则表达式。 常用的正则表达式元字符 . – 匹配除换行符以外的任意字符 ^ – 匹配行的开始位置 $ – 匹配行的结束位置 匹配前面的元素零次或…

    Java 2023年5月26日
    00
  • SpringBoot项目找不到javax.servlet.Filter的问题及解决

    当我们开发SpringBoot Web项目时可能会遇到一个常见的问题:找不到javax.servlet.Filter。这个问题通常出现在SpringBoot 2.x版本中,而在SpringBoot 1.x版本中则不需要特别定义依赖即可正常使用。本文将为大家分享如何解决这个问题。 问题分析: 在SpringBoot 2.x版本中需要手动添加servlet-ap…

    Java 2023年5月19日
    00
  • Intellij IDEA 2020.3 配置教程详解

    Intellij IDEA 2020.3 配置教程详解 Intellij IDEA 是一款强大的 Java 集成开发环境(IDE),提供了丰富的编辑工具、代码分析功能与调试工具,适合 Java 开发者使用。在开始使用 Intellij IDEA 之前,需要对它进行一些配置。本教程将详细讲解 Intellij IDEA 2020.3 的配置过程,包括如何配置 …

    Java 2023年5月20日
    00
  • Java中HashMap与String字符串互转的问题解决

    Java中HashMap与String字符串互转的问题解决 在Java开发中,我们经常会使用到HashMap来做键值对的操作。有时候我们需要把HashMap转换成字符串,或者把字符串转换成HashMap。那么,如何进行这样的操作呢?下面是两种方式来解决问题。 使用Java中自带的方法进行转换 Java中提供了很多可以直接转换的方法,我们可以使用这些方法来进行…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部