Logo

郎哥编程

认识Java类的修饰符

2018-03-31 831

1、访问修饰符

在定义类、及类的属性和方法时,都需要指定访问修饰符,以此来限定类、属性、方法的可访问范围。Java中访问修饰符有以下几个关键字。

(1)privte:私有。只有在类的主体中才可访问。该关键字只能修饰属性和方法,不能修饰类。

(2)protected:受保护。该类及其子类的成员均可以访问,同一个包中的类也可以访问。该关键字只能修饰修饰属性和方法,不能修饰类。

(3)public:公共。该类或非该类均可访问。

(4)默认:不使用修饰符。只有相同包中的类可以访问。

例如,下面代码定义了两个类,一个类是Book类,一个类是Manager类。用Manager类访问Book类的私有变量是不能访问的。

public class Book
{
    private    String  bookName;
    protected  String  bookAuthor;
    public  String  bookBrief;
   
    Book()
    {
     this.bookName = "跟我学Java编程";
     this.bookAuthor = "践行者";
     this.bookBrief = "让读者掌握Java编程技术的同时,能够提升系统分析与设计的能力";
 
    }
   
}
 
public class Manager
{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Book book = new Book();
        //下面语句编译报错,不能访问Book类的私有成员
        System.out.println(book.bookName);
        //输出书的作者
        System.out.println(book.bookAuthor);
        //输出书的简介
        System.out.println(book.bookBrief);
 
    }  
   
}

2、static修饰符

前面说到访问类成员和方法时,需要先把类实例化为对象才能访问类的成员和方法。然而在实际编程时,有时候需要类在没有实例化的前提下访问类的成员和方法。

例如,下面的代码给出了一个加法类,该类包含了三个重载方法,用于计算不同数据类型的求和。代码如下:

public class Addition {
     public double  add(int a,int b)
    {
        double sum;
        sum = (double)a + (double)b;
        return sum;
    }
    public double  add(double a,double b)
    {
        double sum;
        sum = a + b;
        return sum;
    }
 
    public double  add(float a,float b)
    {
        double sum;
        sum = (float)a + (float)b;
        return sum;
    }
 
}
 
public class Management
{
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Addition  addition = new Addition();
        double d1 = addition.add(20, 30);
        double d2 = addition.add(189.2, 20.6);
        double d3 = addition.add(15.2f, 11.2f);
 
    }
}

代码中的Addition类属于工具类,该类可以被其它类调用计算两数和。在Management类的main方法里,声明了Addition类变量,并实例化Addition,然后再调用Addition对象的add方法。Addition类既然是工具类,必然经常被其它类调用,如果每次调用前都需要实例化对象,那就有点麻烦了。通过static修饰符就可以避免出现这样的问题。

static修饰符可以修饰类、类属性和方法。使用该关键字修饰的内容属于静态内容,可以直接使用而不必实例化后再使用。用static修饰符修饰的类方法称为静态方法,用static修饰符修饰的类属性称为静态属性。

被static修饰符修饰的类方法或类属性访问语法为:

类名.方法名

类名.属性名

修改上面的Addition类,其方法均用static修饰符修饰。代码如下:

public class Addition {
    public static double  add(int a,int b)
    {
        double sum;
        sum = (double)a + (double)b;
        return sum;
    }
 
    public static double  add(double a,double b)
    {
        double sum;
        sum = a + b;
        return sum;
    }
    public static  double  add(float a,float b)
    {
        double sum;
        sum = (float)a + (float)b;
        return sum;
    }
 
}
public class Management {
       public static void main(String[] args) {
        // TODO Auto-generated method stub
        double d1 = Addition.add(20, 30);
        double d2 = Addition.add(189.2, 20.6);
        double d3 = Addition.add(15.2f, 11.2f);
      }
}

Addition类的方法被修饰为静态方法后,就可以在Management类中直接用Addition类调用add方法,而无需实例化对象了。

3、final修饰符

final修饰符的作用类似于前面讲的常量,常量是指程序运行过程中,有些值需要保持不变。例如:在基于数学运算的程序中,圆周率是固定不变的值。类似圆周率等在程序运行过程中固定不变的值可以定义为常量,便于使用。

final修饰符可以修饰类,被修饰的类不能派生子类。

final修饰符可以修饰类方法,被修饰的类方法不能被子类重写。

final修饰符可以修饰类属性和变量,被修饰的类属性和变量不能被修改且必须被初始化。

例如,下面的代码定义了Constant类,该类的属性pi被修饰为final,不能在程序中被修改。

public class Constant{
    //定义常量
    final double pi = 3.14;
}

■ 知识点拨

访问修饰符限定了类、属性、方法的可访问范围,起到保护和隔离数据的作用;static修饰符可以把类方法和类属性修饰为静态方法,这样做的好处是对于高频使用的类方法,如工具类方法,可以在没有实例化对象的前提下调用该方法和属性;final修饰符类似于常量定义,被final修饰符修饰的类成员变量或局部变量初始化后,不能被修改。

■ 思考与练习

应用eclipse开发工具建立Addition项目,实现教材内容中的代码案例,体会静态修饰符的用法。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论