℡Wang Yan 2011-09-20 13:32 采纳率: 100%
浏览 364
已采纳

Java 中的静态类

Is there anything like static class in java?

What is the meaning of such a class. Do all the methods of the static class need to be static too?

Is it required the other way round, that if a class contains all the static methods, shall the class be static too?

What are static classes good for?

转载于:https://stackoverflow.com/questions/7486012/static-classes-in-java

  • 写回答

9条回答 默认 最新

  • 撒拉嘿哟木头 2011-09-20 13:39
    关注

    Java has static nested classes but it sounds like you're looking for a top-level static class. Java has no way of making a top-level class static but you can simulate a static class like this:

    • Declare your class final - Prevents extension of the class since extending a static class makes no sense
    • Make the constructor private - Prevents instantiation by client code as it makes no sense to instantiate a static class
    • Make all the members and functions of the class static - Since the class cannot be instantiated no instance methods can be called or instance fields accessed
    • Note that the compiler will not prevent you from declaring an instance (non-static) member. The issue will only show up if you attempt to call the instance member

    Simple example per suggestions from above:

    public class TestMyStaticClass {
         public static void main(String []args){
            MyStaticClass.setMyStaticMember(5);
            System.out.println("Static value: " + MyStaticClass.getMyStaticMember());
            System.out.println("Value squared: " + MyStaticClass.squareMyStaticMember());
            // MyStaticClass x = new MyStaticClass(); // results in compile time error
         }
    }
    
    // A top-level Java class mimicking static class behavior
    public final class MyStaticClass {
        private MyStaticClass () { // private constructor
            myStaticMember = 1;
        }
        private static int myStaticMember;
        public static void setMyStaticMember(int val) {
            myStaticMember = val;
        }
        public static int getMyStaticMember() {
            return myStaticMember;
        }
        public static int squareMyStaticMember() {
            return myStaticMember * myStaticMember;
        }
    }
    

    What good are static classes? A good use of a static class is in defining one-off, utility and/or library classes where instantiation would not make sense. A great example is the Math class that contains some mathematical constants such as PI and E and simply provides mathematical calculations. Requiring instantiation in such a case would be unnecessary and confusing. See Java's Math class. Notice that it is final and all of its members are static. If Java allowed top-level classes to be declared static then the Math class would indeed be static.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line