黑马程序员技术交流社区

标题: 为什么类 InetAddress 不能new对象 [打印本页]

作者: boboyuwu    时间: 2015-8-18 23:02
标题: 为什么类 InetAddress 不能new对象
第一次看到不能new对象的 ,        InetAddress  id= InetAddress.getLocalHost();
我想问如果不new对象那么怎么调用这个类中那么多非静态的方法呢???  还有不用构造方法的目的在哪呢




作者: 左岸那片海    时间: 2015-8-20 01:18
这个属于单例模式,只允许这个类有一个对象。
举个例子:打印机的问题,打印机只有一台(对象只有一个),谁用谁调用,实际中不能new出很多打印机吧,当然除非你家是打印机制造商
  1. public class Singleton {
  2.     private static Singleton instance = new Singleton();
  3.     private Singleton (){}
  4.     public static Singleton getInstance() {
  5.         return instance;
  6.     }
  7. }
复制代码

作者: liuch111    时间: 2015-8-20 10:06
第一:
通过静态方法拿到对象后 不就可以调用非静态方法了吗,!!
一个是通过new 一个是通过静态方法,不都是拿到实例对象了吗,然后 非静态方法  都可以调用了!

第二:InetAddress有一个默认构造函数  但权限是protected的,不对外公开   所以你new不了,强制你用静态,从而达到单例效果!
作者: boboyuwu    时间: 2015-8-20 10:12
liuch111 发表于 2015-8-20 10:06
第一:
通过静态方法拿到对象后 不就可以调用非静态方法了吗,!!
一个是通过new 一个是通过静态方法,不 ...

什么是单例模式呢 为什么要使用单例模式呢

作者: MoonsenHung    时间: 2015-8-20 10:21
同问啊,非不可以实例化的情况下,构造函数被保护起来,那怎么调用其中非静态的方法呢?
作者: kevin986745zk    时间: 2015-8-20 10:28
这个还是第一次看到
作者: liuch111    时间: 2015-8-20 11:04
boboyuwu 发表于 2015-8-20 10:12
什么是单例模式呢 为什么要使用单例模式呢

方便对实例个数的控制并节约系统资源

比如:在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
作者: liuch111    时间: 2015-8-20 11:05
什么是单例模式 ?
基础知识  自己百度吧!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2