为了账号安全,请及时绑定邮箱和手机立即绑定

Java中静态类为什么也可以实例化

Java中静态类为什么也可以实例化

万千封印 2019-03-28 22:19:12
这是我在书中看到的代码,代码中有把实例化静态内部类。静态类怎么可以实例化?为什么要这么做?import java.util.concurrent.*;import java.util.concurrent.locks.*;public class Consumerproducer {    private static Buffer buffer = new Buffer();    public static void main(String[] args) {        ExecutorService executor = Executors.newFixedThreadPool(2);        executor.execute(new Producertask());        executor.execute(new ConsumerTask());    }    static class Producertask implements Runnable {        public void run() {            int i = 10;            try {                while (true) {                    System.out.println("Producer writes " + i);                    buffer.write(i++);                    Thread.sleep((int) (Math.random() * 10000));                }            } catch (InterruptedException ex) {                ex.printStackTrace();            }        }    }    static class ConsumerTask implements Runnable {        public void run() {            try {                while (true) {                    System.out.println("\t\tConsumer reads " + buffer.read());                    Thread.sleep((int) (Math.random() * 10000));                }            } catch (InterruptedException ex) {                ex.printStackTrace();            }        }    }    private static class Buffer {        private static final int CAPACITY = 1;        private java.util.LinkedList<Integer> queue =                new java.util.LinkedList<>();        private static Lock lock = new ReentrantLock();        private static Condition notEmpty = lock.newCondition();        private static Condition notFull = lock.newCondition();        public void write(int value) {            lock.lock();            try {                while (queue.size() == CAPACITY) {                    System.out.println("Wait for notFull condition");                    notFull.await();                }
查看完整描述

6 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

static修饰的类不是说它自己是静态类,而是说它是外部类的静态成员。

这跟c#不一样的,c#的外部类等效于一个同名的名字空间,直接通过外部类的名字而不是外部类的对象访问。其static是静态类的意思。


查看完整回答
反对 回复 2019-04-17
?
慕斯709654

TA贡献1840条经验 获得超5个赞

static 修饰的内部类可以被外部类通过 外部类.静态内部类 直接访问,而没用static 修饰的类在new 对象的时候要通过外部类的实例.内部类点类名访问。


查看完整回答
反对 回复 2019-04-17
?
呼唤远方

TA贡献1856条经验 获得超11个赞

这是因为有些类实例化对象比较大,然后如果运行时加载时耗费的资源和时长都比较多,静态类在运行前加载。。所以在性能上会有提升。。


查看完整回答
反对 回复 2019-04-17
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

静态内部类为什么不能实例化?
没记错的话静态内部类是Effective Java推荐内部类用法。

查看完整回答
反对 回复 2019-04-17
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

静态类为什么不能实例化?
静态类跟实例化从来没有矛盾。
只要抽象类才不能实例化。

查看完整回答
反对 回复 2019-04-17
  • 6 回答
  • 0 关注
  • 4378 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号