public class SimpleEnumUse 
{

Spiciness spiciness;

public SimpleEnumUse(Spiciness spiciness)
{
this.spiciness = spiciness;
}}
今天遇到个很奇怪的现象,Spiciness spiciness;这样写不会警告!
但是要是改成 private Spiciness spiciness; 就是报警告“is not used”。
一时好奇,问问大家这个是怎么回事? 谢谢!!

解决方案 »

  1.   

    private只能在类内部使用,所以编译器能判断它将来未被使用是个多余变量如果不是private,那未来在别的类中可能直接使用它,所以编译器就不能断定它一定是个多余变量
      

  2.   

    呵呵,要是不说,还真没注意。
    可能与eclipse的检查机制有关,要不就是类的访问限制有关
      

  3.   

    这是编译器检查的问题。
    如果你什么也不写spiciness就是default的访问控制权限,而如果写了private 只有在本类当中可以使用。
    在private的使用范围限制在本类,编译器很容易找本类到底用了没有,发现没有用,就能够很容易判定,因此可以产生警告。
    而default权限是包访问权限,编译器没有那么“能干”,扫描包,所以在default权限下就没有warning
      

  4.   

    private的构造函数很少见哦
    如果你非要使用它,不如先了解一下单例模式。单例模式是最简单的设计模式,它的构造函数私有
      

  5.   

    private的构造主要目的是不让调用者显示的去实例化这个类的对象。
    如果你有一个类,例如工具类,他的方法全部是static的,那么你就可以把这个类的构造声明成private,不让人构造。
    或者你不希望别人随便的去构造一个实例,例如你的系统对这个类的实例有数量的严格控制,例如连接池,或者打开某种文件的个数,你只允许有10个这样的对象,所以你不能让人随便去new对象,你就要把构造声明为private,然后通过这个类本身的一个静态函数来生产实例或者重用实例。
      

  6.   

    这个是叫friendly吧。说实话自己的代码从来没用过这个权限。
      

  7.   

    下面和程序不能编译?谁说的?public class SimpleEnumUse
    {
        private Spiciness spiciness;
        public SimpleEnumUse(Spiciness spiciness)
        {
            this.spiciness = spiciness;
        }
    }class Spiciness{
    }
      

  8.   

    如果是public 那么可以内部调用,也可以外部调用如果是private 只能内部调用,如果本类中的其他方法调用了这个私有方法就不会有提示了否则肯定会警告----你写一个没有用的方法干嘛呢