浅析java构造函数前的访问限定符问题

  曾经一直有个问题困扰着我,我一直以为构造函数前面不能加任何东西,但偶然间看到了一本书上写的代码中,构造函数前加了public限定符,心里很是疑惑,构造函数前加毛访问限定符啊??!  在网上查了很多资料,论坛上发帖,依旧没有解决这个问题。今天亲自测试了下,得出了答案。

  首先,在两个源文件中建立两个类,HolidaySked和text;代码如下:

文件 HolidaySked.java源码:

import java.util.*;

public class HolidaySked{
    BitSet sked;
    
   private HolidaySked(){                 //    此处将HolidaySked类的构造函数声明为private。
        sked = new BitSet(365);
        int[] holiday = {1,15,50,148};
        for(int i = 0;i<holiday.length;i++){
            addHoliday(holiday[i]);
        } 
    }
    public void addHoliday(int dayToAdd){
        
        sked.set(dayToAdd);
        
    }
    public boolean isHoliday(int dayToCheck){
        boolean result = sked.get(dayToCheck);
        return result;
    }
   
}

文件text.java源码:

public class text {
    public static void main(String[] arguments){
        HolidaySked cal = new HolidaySked();          //此处会出现一个错误:  // HolidaySked() has private access in javaforworld.HolidaySked
        if(arguments.length>0){
            try{
                int whichDay=Integer.parseInt(arguments[0]);
                if(cal.isHoliday(whichDay)){
                    System.out.println("Day number "+ whichDay +" ia a holiday.");
                    
                }else{
                    System.out.println("Day number "+whichDay+" is not a holiday.");
                }
            }catch(NumberFormatException nfe){
                System.out.println("Error: "+nfe.getMessage());
            }
        }
    }
}

在此 ,我只测试了private限制的构造函数,事实证明,同一个包中的不同类是无法实例化带有private构造函数的类的, 其他几个限定符protected ,public 和一般函数限定情况是一致的,感兴趣的可自行测试。

也就是说,若一个类的构造函数声明为private,的只有是无法实例化对象的,默认的访问限定符只能包内声明对象(已测试),而public的可以全局声明对象。 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖洒的博客

Java面试笔记

Java最重要的特点就平台独立,平台独立意味着可以在一个系统编译它然后在另一个系统使用它。

872
来自专栏编程

Java后台编程初学者,这些常识你都知道吗?

小编也是一位Java后台编程初学者,以后每天利用下班时间来给大家分享一下Java编程中的一些常识,希望有心学习的可以多看一眼,如果你是高手欢迎指点文中小编的不足...

1979
来自专栏LhWorld哥陪你聊算法

【Linux篇】--sed的用法

Sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pat...

622
来自专栏前端架构与工程

【译】《Understanding ECMAScript6》- 第七章-Promise

目录 异步编程 Promise基础 链式Promise 多重Promise响应 Promise继承 总结 异步操作是JavaScript最强大的功能之一。Jav...

1986
来自专栏用户2442861的专栏

JSON 入门指南(IBM)

尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的...

831
来自专栏跟着阿笨一起玩NET

工作中遇到的问题总结1

上述用于UP_refund_Info_CaseAPIRefund_GetList是一个存储过程。

573
来自专栏MyBlog

Effective Java 读书笔记(7)避免finalizer

对于Finalizers他们的使用可能会造成错误的产生,糟糕的性能以及移植性的问题,当然Finalizers有着一些有用的优点,我们会在后续介绍这些,但是作为首...

1052
来自专栏十月梦想

ES6数据传递的传值和传址

看一下上面一段代码,通过正常的理解确实这个样子,但是下面的代码我们只改变了test.y值而obj的也随之改变!这个样子是用于前一部分是传值,后面是传地址!   ...

2024
来自专栏趣谈编程

高并发下的HashMap

HashMap不是一个线程安全的类,在并发下可能会出现死循环(JDK1.7),今天我们来聊聊这个死循环是如何形成的

910
来自专栏北京马哥教育

Python老司机也会翻车!10个最容易犯的Python开发错误

? Python是一门简单易学的编程语言,语法简洁而清晰,并且拥有丰富和强大的类库。与其它大多数程序设计语言使用大括号不一样 ,它使用缩进来定义语句块。 在平...

3838

扫码关注云+社区