A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第一次看到不能new对象的 ,        InetAddress  id= InetAddress.getLocalHost();
我想问如果不new对象那么怎么调用这个类中那么多非静态的方法呢???  还有不用构造方法的目的在哪呢



7 个回复

倒序浏览
这个属于单例模式,只允许这个类有一个对象。
举个例子:打印机的问题,打印机只有一台(对象只有一个),谁用谁调用,实际中不能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. }
复制代码
回复 使用道具 举报
第一:
通过静态方法拿到对象后 不就可以调用非静态方法了吗,!!
一个是通过new 一个是通过静态方法,不都是拿到实例对象了吗,然后 非静态方法  都可以调用了!

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

什么是单例模式呢 为什么要使用单例模式呢
回复 使用道具 举报
同问啊,非不可以实例化的情况下,构造函数被保护起来,那怎么调用其中非静态的方法呢?
回复 使用道具 举报
这个还是第一次看到
回复 使用道具 举报
boboyuwu 发表于 2015-8-20 10:12
什么是单例模式呢 为什么要使用单例模式呢

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

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